/*--- formatted by Jindent 2.1, (www.c-lab.de/~jindent) ---*/ /* * *************************************************************** * The LEAP libraries, when combined with certain JADE platform components, * provide a run-time environment for enabling FIPA agents to execute on * lightweight devices running Java. LEAP and JADE teams have jointly * designed the API for ease of integration and hence to take advantage * of these dual developments and extensions so that users only see * one development platform and a * single homogeneous set of APIs. Enabling deployment to a wide range of * devices whilst still having access to the full development * environment and functionalities that JADE provides. * Copyright (C) 2001 Siemens AG. * * GNU Lesser General Public License * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * ************************************************************** */ package jade.imtp.leap; import jade.core.*; import java.io.IOException; import java.io.DataOutputStream; import java.io.ByteArrayOutputStream; import java.util.Vector; /** * The <code>Command</code> object is used to represent a platform command. * @author Michael Watzke * @author Steffen Rusitschka * @author Giovanni Rimassa - FRAMeTech s.r.l. */ public class Command { /** * Unspecified object id */ public static final int DUMMY_ID = -1; /** * Command identifier code for response command. */ // Lower limit for service and node management related commands static final int SERVICE_BASE = 0; // Service and node management related command IDs public static final int GET_PLATFORM_NAME = 1; public static final int ADD_NODE = 2; public static final int REMOVE_NODE = 3; public static final int ACTIVATE_SERVICE = 4; public static final int DEACTIVATE_SERVICE = 5; public static final int FIND_SLICE_NODE = 6; public static final int FIND_ALL_NODES = 7; public static final int ACCEPT_COMMAND = 8; public static final int PING_NODE_BLOCKING = 9; public static final int PING_NODE_NONBLOCKING = 10; public static final int EXIT_NODE = 11; public static final int INTERRUPT_NODE = 12; public static final int SERVICE_MANAGER_ADOPT = 13; public static final int SERVICE_MANAGER_ADD_REPLICA = 14; public static final int SERVICE_MANAGER_UPDATE_COUNTERS = 15; public static final int PLATFORM_MANAGER_DEAD = 16; public static final int OK = 1; public static final int ERROR = 2; public static final int FORWARD = 37; /** * Code defining the type of command. */ private int commandCode; /** * Identifier of the remote object this Command is directed to. */ private int objectID; /** * This list represents the argument list of this platform command. */ private Vector commandParameters; private boolean requireFreshConnection = false; /** */ Command(int code) { commandCode = code; objectID = DUMMY_ID; } /** */ Command(int code, int id) { commandCode = code; objectID = id; } /** */ Command(int code, int id, boolean requireFreshConnection) { commandCode = code; objectID = id; this.requireFreshConnection = requireFreshConnection; } /** Allows reusing the same object to deal with another command. Generally used to build a response to an incoming command. */ void reset(int code) { commandCode = code; objectID = DUMMY_ID; if (commandParameters != null) { commandParameters.removeAllElements(); } } /** * Return the command identifier code of this command. * @return the command identifier code specifying the type of command */ int getCode() { return commandCode; } /** * Method declaration * * @return * * @see */ int getObjectID() { return objectID; } /** * Add a deliverable parameter, i.e., an object implementing the * <code>Deliverable</code> interface or a <code>java.lang.String</code> or a * <code>java.lang.StringBuffer</code> object to the end of the * argument list of this command object. * @param param the parameter object to be added at the end of the argument * list * @see Deliverable * @see DeliverableDataInputStream#readObject() * @see DeliverableDataOutputStream#writeObject( java.lang.Object ) */ void addParam(Object param) { if (commandParameters == null) { commandParameters = new Vector(); } commandParameters.addElement(param); } /** * Return the number of parameters in this command object. */ int getParamCnt() { if (commandParameters == null) { return 0; } else { return commandParameters.size(); } } /** * Return the parameter at the specified index of this command object. * @param index the parameter index * @return the parameter at the specified index */ Object getParamAt(int index) { if (commandParameters == null) { throw new IndexOutOfBoundsException(String.valueOf(index)); } else { return commandParameters.elementAt(index); } } boolean getRequireFreshConnection() { return requireFreshConnection; } }