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 + -
显示快捷键?