content: /*
   * 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.agent;
  
  import com.google.gson.Gson;
  
  /**
   * The base class for all agent commands. Concrete implementations are
   * serialized by Gson ({@link Gson}) and should be annotated with Gson
   * annotations (not Jackson).
   */
  public abstract class AgentCommand {
  
    private AgentCommandType commandType;
  
    /**
     * Constructor. Although not required for Gson, it's a good idea to have it so
     * that we don't need to worry about unsafe object construction that bypasses
     * the constructors.
     * <p/>
     * Subclasses should always use {@link #AgentCommand(AgentCommandType)}
     */
    public AgentCommand() {
      commandType = AgentCommandType.STATUS_COMMAND;
    }
  
    /**
     * Constructor. Must be invoked by all concrete subsclasses to properly set
     * the type.
     */
    public AgentCommand(AgentCommandType type) {
      commandType = type;
    }
  
    public enum AgentCommandType {
      EXECUTION_COMMAND,
      BACKGROUND_EXECUTION_COMMAND,
      STATUS_COMMAND,
      CANCEL_COMMAND,
      REGISTRATION_COMMAND,
  
      /**
       * Sends alert definitions to an agent which will refresh all alerts running
       * on that host.
       */
      ALERT_DEFINITION_COMMAND,
  
      /**
       * A single alert that should be run immediately.
       */
      ALERT_EXECUTION_COMMAND
    }
  
    public AgentCommandType getCommandType() {
      return commandType;
    }
  
    public void setCommandType(AgentCommandType commandType) {
      this.commandType = commandType;
    }
  
    @Override
    public String toString() {
      return "AgentCommand{" +
              "commandType=" + commandType +
              '}';
    }
  }
  