private void handleRequestStateChange(VerticalCommand cmd)
        throws IMTPException, JADESecurityException, NotFoundException, ServiceException {

      Object[] params = cmd.getParams();
      AID agentID = (AID) params[0];
      AgentState as = (AgentState) params[1];

      int newState = Agent.AP_MIN;
      if (as.equals(jade.domain.FIPAAgentManagement.AMSAgentDescription.SUSPENDED)) {
        newState = Agent.AP_SUSPENDED;
      } else if (as.equals(jade.domain.FIPAAgentManagement.AMSAgentDescription.WAITING)) {
        newState = Agent.AP_WAITING;
      } else if (as.equals(jade.domain.FIPAAgentManagement.AMSAgentDescription.ACTIVE)) {
        newState = Agent.AP_ACTIVE;
      }

      MainContainer impl = myContainer.getMain();
      if (impl != null) {
        ContainerID cid = impl.getContainerID(agentID);
        // Note that since getContainerID() succeeded, targetSlice can't be null
        AgentManagementSlice targetSlice = (AgentManagementSlice) getSlice(cid.getName());
        try {
          targetSlice.changeAgentState(agentID, newState);
        } catch (IMTPException imtpe) {
          // Try to get a newer slice and repeat...
          targetSlice = (AgentManagementSlice) getFreshSlice(cid.getName());
          targetSlice.changeAgentState(agentID, newState);
        }
      } else {
        // Do nothing for now, but could also route the command to the main slice, thus enabling
        // e.g. AMS replication
      }
    }
    private void handleInformStateChanged(VerticalCommand cmd) {

      Object[] params = cmd.getParams();
      AID target = (AID) params[0];
      AgentState from = (AgentState) params[1];
      AgentState to = (AgentState) params[2];

      if (to.equals(jade.domain.FIPAAgentManagement.AMSAgentDescription.SUSPENDED)) {
        try {
          // Notify the main container through its slice
          AgentManagementSlice mainSlice = (AgentManagementSlice) getSlice(MAIN_SLICE);

          try {
            mainSlice.suspendedAgent(target);
          } catch (IMTPException imtpe) {
            // Try to get a newer slice and repeat...
            mainSlice = (AgentManagementSlice) getFreshSlice(MAIN_SLICE);
            mainSlice.suspendedAgent(target);
          }
        } catch (IMTPException re) {
          re.printStackTrace();
        } catch (NotFoundException nfe) {
          nfe.printStackTrace();
        } catch (ServiceException se) {
          se.printStackTrace();
        }
      } else if (from.equals(jade.domain.FIPAAgentManagement.AMSAgentDescription.SUSPENDED)) {
        try {
          // Notify the main container through its slice
          AgentManagementSlice mainSlice = (AgentManagementSlice) getSlice(MAIN_SLICE);

          try {
            mainSlice.resumedAgent(target);
          } catch (IMTPException imtpe) {
            // Try to get a newer slice and repeat...
            mainSlice = (AgentManagementSlice) getFreshSlice(MAIN_SLICE);
            mainSlice.resumedAgent(target);
          }
        } catch (IMTPException re) {
          re.printStackTrace();
        } catch (NotFoundException nfe) {
          nfe.printStackTrace();
        } catch (ServiceException se) {
          se.printStackTrace();
        }
      }
    }