Package jade.imtp.leap

Source Code of jade.imtp.leap.FrontEndStub

/*****************************************************************
JADE - Java Agent DEvelopment Framework is a framework to develop
multi-agent systems in compliance with the FIPA specifications.
Copyright (C) 2000 CSELT S.p.A.

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;

//#J2ME_EXCLUDE_FILE

import jade.core.FrontEnd;
import jade.core.IMTPException;
import jade.core.NotFoundException;
import jade.core.PostponedException;
import jade.core.AID;
import jade.core.Profile;
import jade.core.Specifier;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import jade.imtp.leap.JICP.JICPProtocol;
import jade.util.leap.List;
import jade.util.leap.ArrayList;
import jade.util.leap.Iterator;
import jade.util.leap.Properties;
import jade.core.MicroRuntime;
import java.util.Enumeration;
import java.util.StringTokenizer;

/**
* Class declaration
* @author Giovanni Caire - TILAB
*/
public class FrontEndStub extends MicroStub implements FrontEnd {
 
  public FrontEndStub(Dispatcher d) {
    super(d);
 
 
  /**
   */
  public void createAgent(String name, String className, String[] args) throws IMTPException {
    Command c = new Command(FrontEndSkel.CREATE_AGENT);
    c.addParam(name);
    c.addParam(className);
    c.addParam(args);
    // The CREATE_AGENT command must not be postponed   
    executeRemotely(c, 0);
  }

  /**
   */
  public void killAgent(String name) throws NotFoundException, IMTPException {
    Command c = new Command(FrontEndSkel.KILL_AGENT);
    c.addParam(name);
    Command r = executeRemotely(c, -1);
    if (r != null) {
      if (r.getCode() == Command.ERROR) {
        // One of the expected exceptions occurred in the remote FrontEnd
        // --> It must be a NotFoundException --> throw it
        throw new NotFoundException((String) r.getParamAt(2));
      }
    }
    else {
      throw new PostponedException();
    }
  }
 
  /**
   */
  public void suspendAgent(String name) throws NotFoundException, IMTPException {
    Command c = new Command(FrontEndSkel.SUSPEND_AGENT);
    c.addParam(name);
    Command r = executeRemotely(c, -1);
    if (r != null) {
      if (r.getCode() == Command.ERROR) {
        // One of the expected exceptions occurred in the remote FrontEnd
        // --> It must be a NotFoundException --> throw it
        throw new NotFoundException((String) r.getParamAt(2));
      }
    }
    else {
      throw new PostponedException();
   
  }
 
  /**
   */
  public void resumeAgent(String name) throws NotFoundException, IMTPException {
    Command c = new Command(FrontEndSkel.RESUME_AGENT);
    c.addParam(name);
    Command r = executeRemotely(c, -1);
    if (r != null) {
      if (r.getCode() == Command.ERROR) {
        // One of the expected exceptions occurred in the remote FrontEnd
        // --> It must be a NotFoundException --> throw it
        throw new NotFoundException((String) r.getParamAt(2));
      }
    }
    else {
      throw new PostponedException();
   
  }
 
  /**
   */
  public void messageIn(ACLMessage msg, String receiver) throws NotFoundException, IMTPException {
    Command c = new Command(FrontEndSkel.MESSAGE_IN);
    c.addParam(msg);
    c.addParam(receiver);
    Command r = executeRemotely(c, -1);
    // We don't even throw PostponedException here since that
    // is completely transparent to the rest of the platform.
    if (r != null && r.getCode() == Command.ERROR) {
      // One of the expected exceptions occurred in the remote FrontEnd
      // --> It must be a NotFoundException --> throw it
      throw new NotFoundException((String) r.getParamAt(2));
    }
  }
 
  /**
   */
  public void exit(boolean self) throws IMTPException {
    Command c = new Command(FrontEndSkel.EXIT);
    c.addParam(new Boolean(self));
    // The EXIT command must not be postponed
    executeRemotely(c, 0);
  }
 
  /**
   */
  public void synch() throws IMTPException {
    Command c = new Command(FrontEndSkel.SYNCH);
    // The SYNCH command must not be postponed
    executeRemotely(c, 0);
  }
   
  public List removePendingMessages(MessageTemplate template) {
    synchronized (pendingCommands) {
      List messages = new ArrayList();
      List commands = new ArrayList();
      Enumeration e = pendingCommands.elements();
      while (e.hasMoreElements()) {
        Command c = (Command) e.nextElement();
        if (c.getCode() == FrontEndSkel.MESSAGE_IN) {
          ACLMessage msg = (ACLMessage) c.getParamAt(0);
          if (template.match(msg)) {
            Object[] oo = new Object[]{msg, c.getParamAt(1)};
            messages.add(oo);
            commands.add(c);
          }
        }
      }
      // Remove all the commands carrying matching messages
      Iterator it = commands.iterator();
      while (it.hasNext()) {
        pendingCommands.remove(it.next());
     
     
      // Return the list of matching messages
      return messages;
    }
  }
 
  public static final String encodeCreateMediatorResponse(Properties pp) {
    StringBuffer sb = new StringBuffer();
    appendProp(sb, Profile.PLATFORM_ID, pp);
    appendProp(sb, MicroRuntime.PLATFORM_ADDRESSES_KEY, pp);
    appendProp(sb, JICPProtocol.MEDIATOR_ID_KEY, pp);
    appendProp(sb, JICPProtocol.LOCAL_HOST_KEY, pp);
    appendProp(sb, Profile.AGENTS, pp, false);
    return sb.toString();
  }
   
  private static final void appendProp(StringBuffer sb, String key, Properties pp) {
    appendProp(sb, key, pp, true);
  }
 
  private static final void appendProp(StringBuffer sb, String key, Properties pp, boolean appendHash) {
    Object val = pp.get(key);
    if (val != null) {
      String strVal = val.toString();
      if(strVal.length() > 0){
        sb.append(key);
        sb.append('=');
        sb.append(val);
        if (appendHash) {
          sb.append('#');
        }
      }
    }
  }
 
  public static final Properties parseCreateMediatorRequest(String s) throws ICPException {
    StringTokenizer st = new StringTokenizer(s, "=#");
    Properties p = new Properties();
    while (st.hasMoreTokens()) {
      String key = st.nextToken();
      if (!st.hasMoreTokens()) {
        throw new ICPException("Wrong initialization properties format.");
      }
      p.setProperty(key, st.nextToken());
    }
    return p;
  }
}

TOP

Related Classes of jade.imtp.leap.FrontEndStub

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.