anacl_travel.java

来自「《移动Agent技术》一书的所有章节源代码。」· Java 代码 · 共 1,047 行 · 第 1/3 页

JAVA
1,047
字号
/* anacl_travel.java * $Id: anacl_travel.java,v 2.3 1997-11-19 19:22:41+09 ht Exp $ $Name: alpha5_1-release $ */package com.ibm.acl.kqml.interpreter;import java.util.*;import com.ibm.acl.kqml.*;import com.ibm.acl.kqmlsample.travel.FlightInfo;/** * Class anacl_travel interprets the contents which written in  * language anAcl and ontology travel. This class supports the following * performatives: ask-all, tell, sorry, and error.  * * @version     $Revision: 2.3 $ $Date: 1997-11-19 19:22:41+09 $ * @author      Hajime Tsuchitani */public class anacl_travel extends Interpreter {  private static final String rcsid = "$Id: anacl_travel.java,v 2.3 1997-11-19 19:22:41+09 ht Exp $ $Name: alpha5_1-release $";  private boolean debug = KQMLManager.debug;  /**   * variable description goes here   */  private KQMLManager km;  private  Conversation conv;  /**   * variable description goes here   */  private IDGenerator idgen;  private static long registeredID = 1;  private static Vector flightTable = new Vector();  private static Hashtable keyTable = new Hashtable();  /**   * Constructs anacl_travel with no specified parameter.   *   */  public anacl_travel() {    // FlightTable is set?    if (flightTable.size() == 0) {      flightTable.addElement(new FlightInfo("JAL", "405", "NRT", "CDG", 					   "03/21/97 PM"));      flightTable.addElement(new FlightInfo("ANA", "205", "NRT", "CDG",					   "03/21/97 PM"));      flightTable.addElement(new FlightInfo("AF", "275", "NRT", "CDG", 					   "03/21/97 PM"));    }  }  public Vector getFlightTable() {    return flightTable;  }  public static void setFlightTable(Vector flightTbl) {    flightTable = flightTbl;  }    /**   * Conversation calls this method to interprete    * the content of the received KQML message.   *   * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    */  public synchronized boolean doInterpret(Conversation conversation,					  KQML msg) {    if (debug)      System.err.println(new Date() + 			 " > anacl_travel.doInterpret(): entered");    conv = (Conversation) conversation;    km = conv.getKQMLManager();    String performative = msg.getPerformative();    if (performative.equalsIgnoreCase("insert")) {      return doInsert(conversation, msg);    } else if (performative.equalsIgnoreCase("ask-all")) {      return doAskAll(conversation, msg);    } else if (performative.equalsIgnoreCase("tell")) {      return doTell(conversation, msg);    } else if (performative.equalsIgnoreCase("sorry")) {      return doSorry(conversation, msg);    } else if (performative.equalsIgnoreCase("error")) {      return doError(conversation, msg);    } else {      return doOtherPerformatives(conversation, msg);    }         }  /**   * Handles insert performative.   *    * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    */  protected boolean doInsert(Conversation conversation, KQML msg) {    if (debug)       System.err.println(new Date() +         " > anacl_travel.doInsert entered");    KQML rtnMsg = new KQML();    Conversation conv = (Conversation) conversation;    idgen = conv.getIDGenerator();    String id = idgen.getID();    Vector tokens = ParseContent.parse((String) msg.getContent());    FlightInfo rec = new FlightInfo();    for (int i=0; i < tokens.size(); i++) {      if (((String) tokens.elementAt(i)).equalsIgnoreCase(":carrier")) {	rec.setCarrier((String) tokens.elementAt(++i));	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doInsert parsing: carrier: " 		+ rec.getCarrier());	continue;      } else if (((String) tokens.elementAt(i)).equalsIgnoreCase(":flight")) {	rec.setFlight((String) tokens.elementAt(++i));	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doInsert parsing: flight: " 		+ rec.getFlight());	continue;      } else if (((String) tokens.elementAt(i)).equalsIgnoreCase(":departure")) {	rec.setDeparture((String) tokens.elementAt(++i));	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doInsert parsing: departure: " 		+ rec.getDeparture());	continue;      } else if (((String) tokens.elementAt(i)).equalsIgnoreCase(":arrival")) {	rec.setArrival((String) tokens.elementAt(++i));	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doInsert parsing: arrival: " 		+ rec.getArrival());	continue;      } else if (((String) tokens.elementAt(i)).equalsIgnoreCase(":deptTime")) {	rec.setDeptTime((String) tokens.elementAt(++i));	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doInsert parsing: deptTime: " 		+ rec.getDeptTime());	continue;      } else {	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doInsert: invalid content name value pair: " 	      + "'" + tokens.elementAt(i) + "'");	continue;      }    }    if ((rec.getCarrier() != null) && (rec.getFlight() != null) &&	(rec.getDeparture() != null) && (rec.getArrival() != null) &&	(rec.getDeptTime() != null))    {      if (debug) { 	System.err.println(new Date() + 	  " - anacl_travel.doInsert: FlightInfo constructed");	System.err.println(	  "\t - anacl_travel.doInsert: FlightInfo.carrier: " 			   + rec.getCarrier());	System.err.println(	  "\t - anacl_travel.doInsert: FlightInfo.flight: " 			   + rec.getFlight());	System.err.println(	  "\t - anacl_travel.doInsert: FlightInfo.departure: " 			   + rec.getDeparture());	System.err.println(	  "\t - anacl_travel.doInsert: FlightInfo.arrival: " 			   + rec.getArrival());	System.err.println(	  "\t - anacl_travel.doInsert: FlightInfo.deptTime: " 			   + rec.getDeptTime());      }      flightTable.addElement(rec);    } else {      if (debug) 	System.err.println(new Date() + 	  " - anacl_travel.doInsert: FlightInfo construction failed, specify reserved name value pairs.");      try {	rtnMsg.setPerformative("sorry");	rtnMsg.setParameter(":sender", msg.getParameter(":receiver"));	rtnMsg.setParameter(":receiver", msg.getParameter(":sender"));	rtnMsg.setParameter(":in-reply-to", msg.getParameter(":reply-with"));	rtnMsg.setParameter(":reply-with", id);	rtnMsg.setParameter(":language", msg.getParameter(":language"));	rtnMsg.setParameter(":ontology", msg.getParameter(":ontology"));	rtnMsg.setContent("(:errmsg \"necessary name value pair not specified in content.\" )");      } catch (Exception ex) {	ex.printStackTrace();      }      Conversation c = null;      try {	c = km.sendMessage(rtnMsg);      } catch (SendFailedException ex) {	ex.printStackTrace();      } catch (InvalidFormatException ex) {	ex.printStackTrace();      } catch (InvalidMessageSequenceException ex) {	ex.printStackTrace();      } catch (JKQMLException ex) {	ex.printStackTrace();      }       if (c == null) { 	System.err.println(new Date() + 	  " < anacl_travel.doInsert(): sending response message failed");	return false;      } else {	if (debug)	  System.err.println(new Date() + 	    " < anacl_travel.doInsert(): sent response message successfully");      }    }    // Handling subscribed Messages    if (handleSubscribedMSG(conv, msg, rec)) return true;    else return false;  }  /**   * Handles ask-all performative.   *    * @param conversation reference to the Conversation   * @param msg KQML message   * @return true if message is interpreted successfully, otherwise false.   *    */  protected boolean doAskAll(Conversation conversation, KQML msg) {    if (debug)       System.err.println(new Date() +         " > anacl_travel.doAskAll entered");    KQML rtnMsg = new KQML();    Conversation conv = (Conversation) conversation;    if (debug)       System.err.println(new Date() +         " - anacl_travel.doAskAll getting IDgenerator");    idgen = conv.getIDGenerator();    if (debug)      System.err.println(new Date() +         " - anacl_travel.doAskAll got IDgenerator " + idgen);    String id = idgen.getID();    if (debug)      System.err.println(new Date() +         " - anacl_travel.doAskAll got ID " + id);      Vector tokens = ParseContent.parse((String) msg.getContent());    String carrier = null;    String flight = null;    String departure = null;    String arrival = null;    String deptTime = null;    for (int i=0; i < tokens.size(); i++) {      if (((String) tokens.elementAt(i)).equalsIgnoreCase(":carrier")) {	carrier = (String) tokens.elementAt(++i);	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doAskAll parsing: carrier: " 		+ carrier);	continue;      } else if (((String) tokens.elementAt(i)).equalsIgnoreCase(":flight")) {	flight = (String) tokens.elementAt(++i);	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doAskAll parsing: flight: " 		+ flight);	continue;      } else if (((String) tokens.elementAt(i)).equalsIgnoreCase(":departure")) {	departure = (String) tokens.elementAt(++i);	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doAskAll parsing: departure: " + departure);	continue;      } else if (((String) tokens.elementAt(i)).equalsIgnoreCase(":arrival")) {	arrival = (String) tokens.elementAt(++i);	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doAskAll parsing: arrival: " + arrival);	continue;      } else if (((String) tokens.elementAt(i)).equalsIgnoreCase(":deptTime")) {	deptTime = (String) tokens.elementAt(++i);	if (debug)	  System.err.println(new Date() + 	    " - anacl_travel.doAskAll parsing: deptTime: " + deptTime);	continue;      }    }    if ((carrier == null) && (flight == null) && (departure == null)	&& (arrival == null) && (deptTime == null))    {      if (debug) 	System.err.println(new Date() + 	  " - anacl_travel.doAskAll: invalid name value pairs in content of ask-all performative.");      try {	rtnMsg.setPerformative("sorry");	rtnMsg.setParameter(":sender", msg.getParameter(":receiver"));	rtnMsg.setParameter(":receiver", msg.getParameter(":sender"));	rtnMsg.setParameter(":in-reply-to", msg.getParameter(":reply-with"));	rtnMsg.setParameter(":reply-with", id);	rtnMsg.setParameter(":language", msg.getParameter(":language"));	rtnMsg.setParameter(":ontology", msg.getParameter(":ontology"));	rtnMsg.setContent("(:errmsg \"no keyword specified in content.\" )");      } catch (Exception ex) {	ex.printStackTrace();      }    } else {         int size = flightTable.size();      FlightInfo rec;      Vector hitRecords = new Vector();      for (int i=0; i < size; i++) {	rec = (FlightInfo) flightTable.elementAt(i);	if ((rec.getCarrier().equals(carrier) || (carrier == null)) &&	    (rec.getFlight().equals(flight) || (flight == null)) &&	    (rec.getDeparture().equals(departure) || (departure == null)) &&	    (rec.getArrival().equals(arrival) || (arrival == null)) &&	    (rec.getDeptTime().equals(deptTime) || (deptTime == null))) 	{	  hitRecords.addElement(rec);	}      }      if (!hitRecords.isEmpty()) {	StringBuffer content = new StringBuffer();	for (int i=0; i < hitRecords.size(); i++) {	  rec = (FlightInfo) hitRecords.elementAt(i);	  content.append(" :carrier ");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?