| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.ambari.server.events; |
| |
| import org.apache.ambari.server.state.Host; |
| import org.apache.ambari.server.state.MaintenanceState; |
| import org.apache.ambari.server.state.Service; |
| import org.apache.ambari.server.state.ServiceComponentHost; |
| |
| /** |
| * The {@link MaintenanceModeEvent} is used to capture a host/service/component |
| * maintenance mode change and broadcast it to the system. |
| * <p/> |
| * Although there are several different states aside from on & off in |
| * {@link MaintenanceState}, this event should handle explicit on or off state |
| * changes. This event should not be used for implied state changes, such as |
| * when a component goes into implied maintenance mode as a result of its host's |
| * maintenance mode being explicitely invoked. |
| */ |
| public class MaintenanceModeEvent extends AmbariEvent { |
| |
| /** |
| * The new maintenance state. |
| */ |
| private final MaintenanceState m_state; |
| |
| /** |
| * The service whose maintenance state changed, or {@code null}. |
| */ |
| private final Service m_service; |
| |
| /** |
| * The host whose maintenance state changed, or {@code null}. |
| */ |
| private final Host m_host; |
| |
| /** |
| * The component whose maintenace state changed, or {@code null}. |
| */ |
| private final ServiceComponentHost m_serviceComponentHost; |
| |
| /** |
| * Constructor. |
| * |
| * @param state |
| * the new state (not {@code null}). |
| * @param service |
| * the service that changed maintenance state (not {@code null})). |
| */ |
| public MaintenanceModeEvent(MaintenanceState state, Service service) { |
| this(state, service, null, null); |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param state |
| * the new state (not {@code null}). |
| * @param host |
| * the host that changed maintenance state (not {@code null})). |
| */ |
| public MaintenanceModeEvent(MaintenanceState state, Host host) { |
| this(state, null, host, null); |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param state |
| * the new state (not {@code null}). |
| * @param serviceComponentHost |
| * the component that changed maintenance state (not {@code null})). |
| */ |
| public MaintenanceModeEvent(MaintenanceState state, |
| ServiceComponentHost serviceComponentHost) { |
| this(state, null, null, serviceComponentHost); |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param state |
| * the new state (not {@code null}). |
| * @param service |
| * the service that changed maintenance state, or {@code null}. |
| * @param host |
| * the host that changed maintenance state, or {@code null}. |
| * @param serviceComponentHost |
| * the component that changed maintenance state, or {@code null}. |
| */ |
| private MaintenanceModeEvent(MaintenanceState state, Service service, |
| Host host, ServiceComponentHost serviceComponentHost) { |
| super(AmbariEventType.MAINTENANCE_MODE); |
| m_state = state; |
| m_service = service; |
| m_host = host; |
| m_serviceComponentHost = serviceComponentHost; |
| } |
| |
| /** |
| * Gets the service that had the direct maintenance mode event, or |
| * {@code null} if the event was not directly on a service. |
| * |
| * @return the service or {@code null} |
| */ |
| public Service getService() { |
| return m_service; |
| } |
| |
| /** |
| * Gets the host that had the direct maintenance mode event, or {@code null} |
| * if the event was not directly on a host. |
| * |
| * @return the host or {@code null} |
| */ |
| public Host getHost() { |
| return m_host; |
| } |
| |
| /** |
| * Gets the component that had the direct maintenance mode event, or |
| * {@code null} if the event was not directly on a component. |
| * |
| * @return the component or {@code null} |
| */ |
| public ServiceComponentHost getServiceComponentHost() { |
| return m_serviceComponentHost; |
| } |
| |
| /** |
| * Gets the new maintenance state for the service/host/component. |
| * |
| * @return the new maintenance state (never {@code null}). |
| */ |
| public MaintenanceState getMaintenanceState() { |
| return m_state; |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public String toString() { |
| Object object = null; |
| if (null != m_service) { |
| object = m_service; |
| } else if (null != m_host) { |
| object = m_host; |
| } else { |
| object = m_serviceComponentHost; |
| } |
| |
| StringBuilder buffer = new StringBuilder("MaintenanceModeEvent{"); |
| buffer.append("state=").append(m_state); |
| buffer.append(", object=").append(object); |
| buffer.append("}"); |
| |
| return buffer.toString(); |
| } |
| } |