001: /*
002: * This file or a portion of this file is licensed under the terms of
003: * the Globus Toolkit Public License, found in file GTPL, or at
004: * http://www.globus.org/toolkit/download/license.html. This notice must
005: * appear in redistributions of this file, with or without modification.
006: *
007: * Redistributions of this Software, with or without modification, must
008: * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
009: * some other similar material which is provided with the Software (if
010: * any).
011: *
012: * Copyright 1999-2004 University of Chicago and The University of
013: * Southern California. All rights reserved.
014: */
015:
016: package org.griphyn.cPlanner.parser.dax;
017:
018: import org.griphyn.cPlanner.classes.SubInfo;
019:
020: import org.griphyn.cPlanner.common.LogManager;
021: import org.griphyn.cPlanner.common.PegasusProperties;
022:
023: import java.util.HashMap;
024: import java.util.List;
025: import java.util.Map;
026:
027: /**
028: * A callback that causes the parser to exit after the metadata about the DAX
029: * has been parsed. This is achieved by stopping the parsing after the
030: * cbDocument method.
031: *
032: * @author Karan Vahi
033: * @version $Revision: 314 $
034: */
035: public class DAX2Metadata implements Callback {
036:
037: /**
038: * The handle to the properties object.
039: */
040: private PegasusProperties mProps;
041:
042: /**
043: * A flag to specify whether the graph has been generated for the partition
044: * or not.
045: */
046: private boolean mDone;
047:
048: /**
049: * The metadata of the workflow.
050: */
051: private Map mMetadata;
052:
053: /**
054: * The overloaded constructor.
055: *
056: * @param properties the properties passed to the planner.
057: * @param dax the path to the DAX file.
058: */
059: public DAX2Metadata(PegasusProperties properties, String dax) {
060: mProps = properties;
061: mDone = false;
062: }
063:
064: /**
065: * Callback when the opening tag was parsed. This contains all
066: * attributes and their raw values within a map. It ends up storing
067: * the attributes with the adag element in the internal memory structure.
068: *
069: * @param attributes is a map of attribute key to attribute value
070: */
071: public void cbDocument(Map attributes) {
072: mMetadata = new HashMap();
073: mMetadata.put("count", (String) attributes.get("count"));
074: mMetadata.put("index", (String) attributes.get("index"));
075: mMetadata.put("name", (String) attributes.get("name"));
076:
077: //call the cbDone()
078: cbDone();
079: }
080:
081: /**
082: * Callback for the job from section 2 jobs. These jobs are completely
083: * assembled, but each is passed separately.
084: *
085: * @param job the <code>SubInfo</code> object storing the job information
086: * gotten from parser.
087: */
088: public void cbJob(SubInfo job) {
089:
090: }
091:
092: /**
093: * Callback for child and parent relationships from section 3.
094: *
095: * @param child is the IDREF of the child element.
096: * @param parents is a list of IDREFs of the included parents.
097: */
098: public void cbParents(String child, List parents) {
099:
100: }
101:
102: /**
103: * Callback when the parsing of the document is done. It sets the flag
104: * that the parsing has been done, that is used to determine whether the
105: * ADag object has been fully generated or not.
106: */
107: public void cbDone() {
108: mDone = true;
109: throw new RuntimeException("Parsing done");
110: }
111:
112: /**
113: * Returns an ADag object corresponding to the abstract plan it has generated.
114: * It throws a runtime exception if the method is called before the object
115: * has been created fully.
116: *
117: * @return ADag object containing the abstract plan referred in the dax.
118: */
119: public Object getConstructedObject() {
120: if (!mDone)
121: throw new RuntimeException(
122: "Method called before the metadata was parsed");
123: return mMetadata;
124: }
125: }
|