001: /*
002: * <copyright>
003: *
004: * Copyright 1997-2004 BBNT Solutions, LLC
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026:
027: package org.cougaar.glm.parser;
028:
029: import java.io.FileNotFoundException;
030: import java.io.InputStream;
031: import java.util.Enumeration;
032: import java.util.Vector;
033:
034: import org.apache.xerces.parsers.DOMParser;
035: import org.cougaar.core.mts.MessageAddress;
036: import org.cougaar.glm.xml.parser.TaskParser;
037: import org.cougaar.lib.plugin.UTILEntityResolver;
038: import org.cougaar.lib.util.UTILRuntimeException;
039: import org.cougaar.planning.ldm.LDMServesPlugin;
040: import org.cougaar.planning.ldm.PlanningFactory;
041: import org.cougaar.planning.ldm.plan.Task;
042: import org.cougaar.util.ConfigFinder;
043: import org.cougaar.util.log.Logger;
044: import org.w3c.dom.Document;
045: import org.w3c.dom.Node;
046: import org.w3c.dom.NodeList;
047: import org.xml.sax.InputSource;
048:
049: /**
050: * Class that creates a list of tasks. The tasks are read in
051: * from an XML file. Use the getTasks() method to retreive
052: * an Enumeration of the tasks in the XML file.
053: *
054: */
055: public class GLMTaskParser {
056:
057: /**
058: * No-arg constructor for when we make a parser using Class.newInstance.
059: *
060: */
061: public GLMTaskParser() {
062: }
063:
064: /**
065: * Constructor. The constructor will parse the given xml file
066: * and the tasks represented in that file will become the
067: * "associated task list" for this instance of the task parser.
068: * @param pfile the name of the parameter file.
069: */
070: public GLMTaskParser(String pfile, PlanningFactory ldmf,
071: MessageAddress clusterIdentifier,
072: ConfigFinder configFinder, LDMServesPlugin ldmServesPlugin,
073: Logger logger) {
074: init(pfile, ldmf, clusterIdentifier, configFinder,
075: ldmServesPlugin, logger);
076: }
077:
078: /**
079: * Parse the given xml file
080: * and the tasks represented in that file will become the
081: * "associated task list" for this instance of the task parser.
082: * @param pfile the name of the parameter file.
083: * @param configFinder used to find the parameter file in the config path
084: */
085: public void init(String pfile, PlanningFactory ldmf,
086: MessageAddress clusterIdentifier,
087: ConfigFinder configFinder, LDMServesPlugin ldmServesPlugin,
088: Logger logger) {
089: try {
090: this .logger = logger;
091: taskParser = makeTaskParser();
092: DOMParser parser = new DOMParser();
093: parser
094: .setFeature(
095: "http://apache.org/xml/features/allow-java-encodings",
096: true);
097: parser.setEntityResolver(new UTILEntityResolver(logger));
098:
099: InputStream inputStream = configFinder.open(pfile);
100: parser.parse(new InputSource(inputStream));
101: Document doc = parser.getDocument();
102: //System.out.println("making dom parser ");
103:
104: myLdmf = ldmf;
105: this .clusterIdentifier = clusterIdentifier;
106: myLdm = ldmServesPlugin;
107: myTasks = this .getTaskList(doc);
108: } catch (FileNotFoundException fnfe) {
109: logger.error("\nCould not find file : " + fnfe.getMessage()
110: + ".", fnfe);
111: } catch (Exception e) {
112: logger.error("error", e);
113: }
114: }
115:
116: protected TaskParser makeTaskParser() {
117: return new TaskParser(logger);
118: }
119:
120: /**
121: * Get an enumeration of the tasks associated with this
122: * instance of the task parser.
123: */
124: public Enumeration getTasks() {
125: return myTasks.elements();
126: }
127:
128: /**
129: * Get the tasks out of the XML task file.
130: * @param doc the xml document to parse
131: */
132: private Vector getTaskList(Document doc) {
133: Node root = doc.getDocumentElement();
134: Vector taskbuf = new Vector();
135:
136: if (root.getNodeName().equals("tasklist")) {
137: NodeList nlist = root.getChildNodes();
138: int nlength = nlist.getLength();
139:
140: for (int i = 0; i < nlength; i++) {
141: Node node = nlist.item(i);
142: //System.out.println(node.getNodeName());
143: //System.out.println(node.getNodeType());
144: if (node.getNodeType() == Node.ELEMENT_NODE) {
145: Task task = taskParser.getTask(myLdm,
146: clusterIdentifier, myLdmf, node);
147: taskbuf.addElement(task);
148: }
149: }
150: } else {
151: throw new UTILRuntimeException("unrecognized task field: "
152: + root.getNodeName());
153: }
154:
155: return taskbuf;
156: }
157:
158: private MessageAddress clusterIdentifier = null;
159: private PlanningFactory myLdmf = null;
160: private Vector myTasks = null;
161: private LDMServesPlugin myLdm = null;
162: protected Logger logger;
163:
164: protected TaskParser taskParser;
165: }
|