You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by ke...@apache.org on 2010/07/16 05:00:31 UTC

svn commit: r964663 [4/5] - in /incubator/oodt/trunk: ./ commons/ commons/src/main/java/org/apache/oodt/commons/date/ core/ crawler/src/main/java/org/apache/oodt/cas/crawl/ crawler/src/main/java/org/apache/oodt/cas/crawl/action/ crawler/src/main/java/o...

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigFileReader.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigFileReader.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigFileReader.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigFileReader.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,318 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+//JDK imports
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.List;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+/**
+ * 
+ * <p>
+ * A Reader for reading the constructs defined in a {@link PGEConfigurationFile}.
+ * The constructs are read and a new {@link PGEConfigurationFile} object is
+ * constructed and returned.
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class PGEConfigFileReader {
+
+  /**
+   * <p>
+   * Default Constructor
+   * </p>
+   */
+  public PGEConfigFileReader() {
+  }
+
+  /**
+   * 
+   * <p>
+   * Reads the PGE Configuration file from the given <code>url</code>.
+   * </p>
+   * 
+   * @param url
+   *          The {@link URL} pointer to the pge configuration file.
+   * @return A new {@link PGEConfigurationFile} object, created from the
+   *         specified URL.
+   * @throws PGEConfigFileException
+   *           If there is an error reading the url.
+   */
+  public PGEConfigurationFile read(URL url) throws PGEConfigFileException {
+    PGEConfigurationFile configFile = null;
+
+    try {
+      configFile = read(url.openStream());
+    } catch (IOException e) {
+      throw new PGEConfigFileException("Unable to read PGE "
+          + "configuration file from url: " + url + ": Message: "
+          + e.getMessage());
+    }
+
+    return configFile;
+  }
+
+  /**
+   * 
+   * <p>
+   * Reads a PGEConfigurationFile from the specified <code>is</code>
+   * InputStream.
+   * </p>
+   * 
+   * @param is
+   *          The InputStream to read the PGEConfigurationFile from.
+   * @return A new {@link PGEConfigurationFile}, created from the specified
+   *         InputStream.
+   * @throws PGEConfigFileException
+   *           If any error occurs.
+   */
+  public PGEConfigurationFile read(InputStream is)
+      throws PGEConfigFileException {
+    PGEConfigurationFile configFile = null;
+
+    DocumentBuilderFactory factory = null;
+    DocumentBuilder parser = null;
+    Document document = null;
+
+    if (is == null) {
+      return null;
+    }
+
+    InputSource inputSource = new InputSource(is);
+
+    try {
+      factory = DocumentBuilderFactory.newInstance();
+      parser = factory.newDocumentBuilder();
+      document = parser.parse(inputSource);
+    } catch (Exception parseException) {
+      parseException.printStackTrace();
+      return null;
+    }
+
+    // okay, construct the PGEConfigurationFile now
+    configFile = new PGEConfigurationFile();
+
+    Element pgeConf = document.getDocumentElement();
+
+    NodeList pgeGroups = pgeConf.getElementsByTagName("group");
+
+    for (int i = 0; i < pgeGroups.getLength(); i++) {
+      // get the name of the group
+      Element group = (Element) pgeGroups.item(i);
+      String groupName = group.getAttribute("name");
+
+      if (groupName.equals("PGENameGroup")) {
+        addPGEName(configFile, group);
+      } else if (groupName.equals("InputProductFiles")) {
+        addInputProductFiles(configFile, group);
+      } else if (groupName.equals("StaticFileIdentificationFiles")) {
+        addSFIFFiles(configFile, group);
+      } else if (groupName.equals("DynamicAuxiliaryInputFiles")) {
+        addDynamicAuxInputFiles(configFile, group);
+      } else if (groupName.equals("RecordedAuxiliaryInputFiles")) {
+        addRecAuxInputFiles(configFile, group);
+      } else if (groupName.equals("ProductPathGroup")) {
+        addProductPath(configFile, group);
+      } else if (groupName.equals("MonitorGroup")) {
+        addMonitorGroup(configFile, group);
+      } else if (groupName.equals("MonitorLevel")) {
+        addMonitorLevels(configFile, group);
+      } else {
+        // pge specific groups, just add generic groups
+        addPGESpecificGroup(configFile, group);
+      }
+    }
+
+    return configFile;
+  }
+
+  private void addPGESpecificGroup(PGEConfigurationFile configFile,
+      Element group) throws PGEConfigFileException {
+
+    List scalars = PGEXMLFileUtils.getScalars(group);
+    List vectors = PGEXMLFileUtils.getVectors(group);
+    List matrixs = PGEXMLFileUtils.getMatrixs(group);
+
+    PGEGroup pgeGroup = new PGEGroup(group.getAttribute("name"));
+
+    for (Iterator i = scalars.iterator(); i.hasNext();) {
+      PGEScalar s = (PGEScalar) i.next();
+      pgeGroup.addScalar(s);
+    }
+
+    for (Iterator i = vectors.iterator(); i.hasNext();) {
+      PGEVector v = (PGEVector) i.next();
+      pgeGroup.addVector(v);
+    }
+
+    for (Iterator i = matrixs.iterator(); i.hasNext();) {
+      PGEMatrix m = (PGEMatrix) i.next();
+      pgeGroup.addMatrix(m);
+    }
+
+    configFile.getPgeSpecificGroups().put(pgeGroup.getName(), pgeGroup);
+
+  }
+
+  private void addMonitorLevels(PGEConfigurationFile configFile, Element group)
+      throws PGEConfigFileException {
+
+    List scalars = PGEXMLFileUtils.getScalars(group);
+
+    if (scalars != null && scalars.size() > 0) {
+      for (Iterator i = scalars.iterator(); i.hasNext();) {
+        PGEScalar scalar = (PGEScalar) i.next();
+        configFile.getMonitorLevelGroup().addScalar(scalar);
+      }
+    }
+
+  }
+
+  private void addMonitorGroup(PGEConfigurationFile configFile, Element group)
+      throws PGEConfigFileException {
+
+    List scalars = PGEXMLFileUtils.getScalars(group);
+
+    // the list should be not be null
+    if (scalars == null) {
+      throw new PGEConfigFileException(
+          "There is no monitor path or monitor filename format defined in the MonitorGroup!");
+    }
+
+    PGEScalar monPath = null, monFilenameFormat = null;
+
+    for (Iterator i = scalars.iterator(); i.hasNext();) {
+      PGEScalar scalar = (PGEScalar) i.next();
+
+      if (scalar.getName().equals("MonitorPath")) {
+        monPath = scalar;
+      } else if (scalar.getName().equals("MonitorFilenameFormat")) {
+        monFilenameFormat = scalar;
+      }
+    }
+
+    configFile.setMonitorPath(monPath);
+    configFile.setMonitorFilenameFormat(monFilenameFormat);
+
+  }
+
+  private void addProductPath(PGEConfigurationFile configFile, Element group)
+      throws PGEConfigFileException {
+    List scalars = PGEXMLFileUtils.getScalars(group);
+
+    // the list should be size 1
+    if (scalars == null || (scalars != null && scalars.size() != 1)) {
+      throw new PGEConfigFileException(
+          "There is no product path defined in the configuration file, or there is more than one scalar listed in the ProductPathGroup!");
+    }
+
+    PGEScalar scalar = (PGEScalar) scalars.get(0);
+
+    // the name of the product path should be ProductPath
+
+    if (!scalar.getName().equals("ProductPath")) {
+      throw new PGEConfigFileException(
+          "The product path should be defined as a scalar with the name \"ProductPath\"!");
+    }
+
+    configFile.setProductPath(scalar);
+  }
+
+  private void addPGEName(PGEConfigurationFile configFile, Element group)
+      throws PGEConfigFileException {
+
+    // get the scalars, there should be only one
+    List scalars = PGEXMLFileUtils.getScalars(group);
+
+    // the list should be size 1
+    if (scalars == null || (scalars != null && scalars.size() != 1)) {
+      throw new PGEConfigFileException(
+          "There is no PGEName defined in the configuration file, or there is more than one scalar listed in the PGENameGroup");
+    }
+
+    // the name of the scalar should be PGEName
+    PGEScalar scalar = (PGEScalar) scalars.get(0);
+
+    if (!scalar.getName().equals("PGEName")) {
+      throw new PGEConfigFileException(
+          "The name of the PGE should be defined as a scalar with the name \"PGEName\"!");
+    }
+
+    // okay, we're set, set the PGE Name
+    configFile.setPgeName(scalar);
+
+  }
+
+  private void addInputProductFiles(PGEConfigurationFile configFile,
+      Element group) throws PGEConfigFileException {
+    addScalarFilesToGroup(group, configFile.getInputProductFiles());
+    addVectorFilesToGroup(group, configFile.getInputProductFiles());
+  }
+
+  private void addSFIFFiles(PGEConfigurationFile configFile, Element group)
+      throws PGEConfigFileException {
+    addScalarFilesToGroup(group, configFile.getStaticFileIdentificationFiles());
+  }
+
+  private void addDynamicAuxInputFiles(PGEConfigurationFile configFile,
+      Element group) throws PGEConfigFileException {
+    addScalarFilesToGroup(group, configFile.getDynamicAuxiliaryInputFiles());
+  }
+
+  private void addRecAuxInputFiles(PGEConfigurationFile configFile,
+      Element group) throws PGEConfigFileException {
+    addScalarFilesToGroup(group, configFile.getRecordedAuxiliaryInputFiles());
+  }
+
+  private void addScalarFilesToGroup(Element group, PGEGroup pgeGroup)
+      throws PGEConfigFileException {
+    // get the scalars, and add them to the group
+    List scalars = PGEXMLFileUtils.getScalars(group);
+
+    if (scalars != null && scalars.size() > 0) {
+      for (Iterator i = scalars.iterator(); i.hasNext();) {
+        PGEScalar scalar = (PGEScalar) i.next();
+        pgeGroup.addScalar(scalar);
+      }
+    }
+  }
+
+  private void addVectorFilesToGroup(Element group, PGEGroup pgeGroup)
+      throws PGEConfigFileException {
+    // get the vectors, and add them to the group
+    List vectors = PGEXMLFileUtils.getVectors(group);
+
+    if (vectors != null && vectors.size() > 0) {
+      for (Iterator i = vectors.iterator(); i.hasNext();) {
+        PGEVector vector = (PGEVector) i.next();
+        pgeGroup.addVector(vector);
+      }
+    }
+  }
+
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigFileWriter.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigFileWriter.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigFileWriter.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigFileWriter.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,357 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+import org.apache.oodt.commons.xml.XMLUtils;
+
+//JDK imports
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * <p>
+ * A Configuration File Writer for PGEs.
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public final class PGEConfigFileWriter implements PGEConfigFileKeys,
+    PGEDataParseKeys {
+
+  /* the PGE configuration file that we're writing */
+  private PGEConfigurationFile configFile = null;
+
+  /* our log stream */
+  private static Logger LOG = Logger.getLogger(PGEConfigFileWriter.class
+      .getName());
+
+  /*
+   * whether or not the values in the XML file should be URLEncoded: if true,
+   * the values will be encoded using UTF-8.
+   */
+  private boolean urlEncoding = false;
+
+  /* schema location for the PGE input.xsd file */
+  private String schemaLocation = null;
+
+  /**
+   * <p>
+   * Default Constructor
+   * </p>
+   * .
+   * 
+   * @param config
+   *          The ConfigurationFile that this writer is responsible for writing.
+   * 
+   */
+  public PGEConfigFileWriter(PGEConfigurationFile config) {
+    this.configFile = config;
+  }
+
+  /**
+   * <p>
+   * Writes the ConfigurationFile to the specified filePath.
+   * </p>
+   * 
+   * @param filePath
+   *          The filePath of the XML config file to write.
+   * @throws Exception
+   *           If any error occurs.
+   */
+  public void writeToXmlFile(String filePath) throws Exception {
+    XMLUtils.writeXmlFile(getConfigFileXml(), filePath);
+  }
+
+  /**
+   * 
+   * @return An XML DOM {@link Document} representation of the internal
+   *         PGEConfigurationFile.
+   * @throws Exception
+   *           If any error occurs.
+   */
+  public Document getConfigFileXml() throws Exception {
+    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+    factory.setNamespaceAware(true);
+    Document document = null;
+
+    try {
+      DocumentBuilder builder = factory.newDocumentBuilder();
+      document = builder.newDocument();
+
+      Element root = (Element) document.createElement(PGE_INPUT_TAG_NAME);
+      root.setAttribute("xmlns:xsi",
+          "http://www.w3.org/2001/XMLSchema-instance");
+      root
+          .setAttribute(
+              "xsi:noNamespaceSchemaLocation",
+              (schemaLocation == null
+                  || (schemaLocation != null && schemaLocation.equals("")) ? "input.xsd"
+                  : schemaLocation));
+      document.appendChild(root);
+
+      if (configFile != null) {
+        // write the PGE Name group
+        if (configFile.getPgeName() != null) {
+          PGEGroup pgeNameGroup = new PGEGroup(PGE_NAME_GROUP);
+          pgeNameGroup.addScalar(configFile.getPgeName());
+          root.appendChild(getGroupElement(pgeNameGroup, document));
+        }
+
+        // write the input product files
+        root.appendChild(getGroupElement(configFile.getInputProductFiles(),
+            document));
+
+        // write the static file identification files
+        root.appendChild(getGroupElement(configFile
+            .getStaticFileIdentificationFiles(), document));
+
+        // write the dynamic auxilliary files
+        root.appendChild(getGroupElement(configFile
+            .getDynamicAuxiliaryInputFiles(), document));
+
+        // write the recorded auxilliary files
+        root.appendChild(getGroupElement(configFile
+            .getRecordedAuxiliaryInputFiles(), document));
+
+        // write the product path group
+        if (configFile.getProductPath() != null) {
+          PGEGroup productPathGroup = new PGEGroup(PRODUCT_PATH_GROUP);
+          productPathGroup.addScalar(configFile.getProductPath());
+          root.appendChild(getGroupElement(productPathGroup, document));
+        }
+
+        // write the monitor level group
+        root.appendChild(getGroupElement(configFile.getMonitorLevelGroup(),
+            document));
+
+        // write the monitor group
+        if (configFile.getMonitorFilenameFormat() != null
+            && configFile.getMonitorPath() != null) {
+          PGEGroup monitorGroup = new PGEGroup(MONITOR_GROUP);
+          monitorGroup.addScalar(configFile.getMonitorPath());
+          monitorGroup.addScalar(configFile.getMonitorFilenameFormat());
+          root.appendChild(getGroupElement(monitorGroup, document));
+        }
+
+        // write the pge specific groups
+        for (Iterator i = configFile.getPgeSpecificGroups().keySet().iterator(); i
+            .hasNext();) {
+          String pgeSpecificGroupName = (String) i.next();
+          PGEGroup pgeSpecificGroup = (PGEGroup) configFile
+              .getPgeSpecificGroups().get(pgeSpecificGroupName);
+
+          root.appendChild(getGroupElement(pgeSpecificGroup, document));
+        }
+
+      }
+
+      return document;
+
+    } catch (ParserConfigurationException pce) {
+      pce.printStackTrace();
+      LOG.log(Level.WARNING, "Error generating pge configuration file!: "
+          + pce.getMessage());
+      throw new Exception("Error generating pge configuration file!: "
+          + pce.getMessage());
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
+
+  private Element getGroupElement(PGEGroup group, Document document)
+      throws Exception {
+    Element groupElem = document.createElement(GROUP_TAG_NAME);
+    groupElem.setAttribute(NAME_ATTR, group.getName());
+
+    if (group.getNumScalars() > 0) {
+      for (Iterator i = group.getScalars().keySet().iterator(); i.hasNext();) {
+        String scalarName = (String) i.next();
+        PGEScalar scalar = group.getScalar(scalarName);
+
+        Element scalarElem = document.createElement(SCALAR_TAG_NAME);
+        scalarElem.setAttribute(NAME_ATTR, scalar.getName());
+
+        if (scalar.getValue() == null) {
+          throw new Exception("Attempt to write null value for scalar: ["
+              + scalarName + "] to PGE config file!");
+        }
+
+        if (urlEncoding) {
+          try {
+            scalarElem.appendChild(document.createTextNode(URLEncoder.encode(
+                scalar.getValue(), "UTF-8")));
+          } catch (UnsupportedEncodingException e) {
+            LOG.log(Level.WARNING,
+                "Error creating text node for scalar element: "
+                    + scalar.getName() + " in pge group: " + group.getName()
+                    + " Message: " + e.getMessage());
+          }
+
+        } else {
+          scalarElem.appendChild(document.createTextNode(scalar.getValue()));
+        }
+
+        groupElem.appendChild(scalarElem);
+      }
+
+    }
+
+    if (group.getNumVectors() > 0) {
+      for (Iterator i = group.getVectors().keySet().iterator(); i.hasNext();) {
+        String vectorName = (String) i.next();
+        PGEVector vector = group.getVector(vectorName);
+
+        Element vectorElem = document.createElement(VECTOR_TAG_NAME);
+        vectorElem.setAttribute(NAME_ATTR, vector.getName());
+
+        for (Iterator j = vector.getElements().iterator(); j.hasNext();) {
+          String element = (String) j.next();
+
+          if (element == null) {
+            throw new Exception("Attempt to write null value for vector: ["
+                + vectorName + "] to PGE config file!");
+          }
+
+          Element elementElem = document.createElement(VECTOR_ELEMENT_TAG);
+          if (urlEncoding) {
+            try {
+              elementElem.appendChild(document.createTextNode(URLEncoder
+                  .encode(element, "UTF-8")));
+            } catch (UnsupportedEncodingException e) {
+              LOG.log(Level.WARNING,
+                  "Error creating text node for vector element: "
+                      + vector.getName() + " in pge group: " + group.getName()
+                      + " Message: " + e.getMessage());
+            }
+          } else {
+            elementElem.appendChild(document.createTextNode(element));
+          }
+
+          vectorElem.appendChild(elementElem);
+        }
+
+        groupElem.appendChild(vectorElem);
+      }
+    }
+
+    if (group.getNumMatrixs() > 0) {
+      for (Iterator i = group.getMatrixs().keySet().iterator(); i.hasNext();) {
+        String matrixName = (String) i.next();
+        PGEMatrix matrix = group.getMatrix(matrixName);
+
+        Element matrixElem = document.createElement(MATRIX_TAG_NAME);
+        matrixElem.setAttribute(NAME_ATTR, matrix.getName());
+
+        int rowNum = 0;
+        for (Iterator j = matrix.getRows().iterator(); j.hasNext();) {
+          List rowValues = (List) j.next();
+
+          Element rowElem = document.createElement(MATRIX_ROW_TAG);
+
+          int colNum = 0;
+          for (Iterator k = rowValues.iterator(); k.hasNext();) {
+            String colValue = (String) k.next();
+            Element colElem = document.createElement(MATRIX_COL_TAG);
+
+            if (colValue == null) {
+              throw new Exception("Attempt to write null value for matrix: ["
+                  + matrixName + "]: " + "(" + rowNum + "," + colNum + ")");
+            }
+
+            if (urlEncoding) {
+              try {
+                colElem.appendChild(document.createTextNode(URLEncoder.encode(
+                    colValue, "UTF-8")));
+              } catch (UnsupportedEncodingException e) {
+                LOG.log(Level.WARNING,
+                    "Error creating node for matrix element: "
+                        + matrix.getName() + " (" + rowNum + "," + colNum
+                        + ") in pge group: " + group.getName() + " Message: "
+                        + e.getMessage());
+              }
+
+            } else {
+              colElem.appendChild(document.createTextNode(colValue));
+            }
+
+            colNum++;
+          }
+
+          rowNum++;
+        }
+
+        groupElem.appendChild(matrixElem);
+      }
+    }
+
+    if (group.getNumGroups() > 0) {
+      for (Iterator i = group.getGroups().keySet().iterator(); i.hasNext();) {
+        String groupName = (String) i.next();
+        PGEGroup subgroup = group.getGroup(groupName);
+        Element subgroupElem = getGroupElement(subgroup, document);
+        groupElem.appendChild(subgroupElem);
+      }
+
+    }
+
+    return groupElem;
+
+  }
+
+  /**
+   * @return Returns the urlEncoding.
+   */
+  public boolean isUrlEncoding() {
+    return urlEncoding;
+  }
+
+  /**
+   * @param urlEncoding
+   *          The urlEncoding to set.
+   */
+  public void setUrlEncoding(boolean urlEncoding) {
+    this.urlEncoding = urlEncoding;
+  }
+
+  /**
+   * @return Returns the schemaLocation.
+   */
+  public String getSchemaLocation() {
+    return schemaLocation;
+  }
+
+  /**
+   * @param schemaLocation
+   *          The schemaLocation to set.
+   */
+  public void setSchemaLocation(String schemaLocation) {
+    this.schemaLocation = schemaLocation;
+  }
+
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigurationFile.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigurationFile.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigurationFile.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEConfigurationFile.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,235 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+//OCO imports
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 
+ * <p>
+ * A configuration file to record input similar to HDF format. The configuration
+ * file is a set of named {@link PGEGroup}s.
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class PGEConfigurationFile implements PGEConfigFileKeys {
+
+  /* the name of the PGE that uses this configuration file */
+  private PGEScalar pgeName = null;
+
+  /* the list of data product files for tihs PGE */
+  private PGEGroup inputProductFiles = null;
+
+  /* the list of static file identification files */
+  private PGEGroup staticFileIdentificationFiles = null;
+
+  /* the list of ancillary files identified by the PCS */
+  private PGEGroup dynamicAuxiliaryInputFiles = null;
+
+  /*
+   * the list of ancillary files that are not used by the PGE directly, but are
+   * recorded in the AncillaryDataDescriptors metadata element
+   */
+  private PGEGroup recordedAuxiliaryInputFiles = null;
+
+  /* the location to put any output products */
+  private PGEScalar productPath = null;
+
+  /* the location to which to save monitor files */
+  private PGEScalar monitorPath = null;
+
+  /* the filename format of the monitor files */
+  private PGEScalar monitorFilenameFormat = null;
+
+  private PGEGroup monitorLevelGroup = null;
+
+  /* the pge specific groups in the configuration file */
+  private Map<String, PGEGroup> pgeSpecificGroups = null;
+
+  /**
+   * <p>
+   * Constructs a new PGEConfigurationFile with no groups.
+   * </p>
+   */
+  public PGEConfigurationFile() {
+    this.pgeSpecificGroups = new HashMap<String, PGEGroup>();
+    this.inputProductFiles = new PGEGroup(INPUT_PRODUCT_FILES_GROUP);
+    this.staticFileIdentificationFiles = new PGEGroup(SFIF_FILE_GROUP);
+    this.dynamicAuxiliaryInputFiles = new PGEGroup(
+        DYNAMIC_AUX_INPUT_FILES_GROUP);
+    this.recordedAuxiliaryInputFiles = new PGEGroup(
+        RECORDED_AUX_INPUT_FILES_GROUP);
+    this.monitorLevelGroup = new PGEGroup(MONITOR_LEVEL_GROUP);
+  }
+
+  /**
+   * @return the pgeName
+   */
+  public PGEScalar getPgeName() {
+    return pgeName;
+  }
+
+  /**
+   * @param pgeName
+   *          the pgeName to set
+   */
+  public void setPgeName(PGEScalar pgeName) {
+    this.pgeName = pgeName;
+  }
+
+  /**
+   * @return the inputProductFiles
+   */
+  public PGEGroup getInputProductFiles() {
+    return inputProductFiles;
+  }
+
+  /**
+   * @param inputProductFiles
+   *          the inputProductFiles to set
+   */
+  public void setInputProductFiles(PGEGroup inputProductFiles) {
+    this.inputProductFiles = inputProductFiles;
+  }
+
+  /**
+   * @return the staticFileIdentificationFiles
+   */
+  public PGEGroup getStaticFileIdentificationFiles() {
+    return staticFileIdentificationFiles;
+  }
+
+  /**
+   * @param staticFileIdentificationFiles
+   *          the staticFileIdentificationFiles to set
+   */
+  public void setStaticFileIdentificationFiles(
+      PGEGroup staticFileIdentificationFiles) {
+    this.staticFileIdentificationFiles = staticFileIdentificationFiles;
+  }
+
+  /**
+   * @return the dynamicAuxiliaryInputFiles
+   */
+  public PGEGroup getDynamicAuxiliaryInputFiles() {
+    return dynamicAuxiliaryInputFiles;
+  }
+
+  /**
+   * @param dynamicAuxiliaryInputFiles
+   *          the dynamicAuxiliaryInputFiles to set
+   */
+  public void setDynamicAuxiliaryInputFiles(PGEGroup dynamicAuxiliaryInputFiles) {
+    this.dynamicAuxiliaryInputFiles = dynamicAuxiliaryInputFiles;
+  }
+
+  /**
+   * @return the recordedAuxiliaryInputFiles
+   */
+  public PGEGroup getRecordedAuxiliaryInputFiles() {
+    return recordedAuxiliaryInputFiles;
+  }
+
+  /**
+   * @param recordedAuxiliaryInputFiles
+   *          the recordedAuxiliaryInputFiles to set
+   */
+  public void setRecordedAuxiliaryInputFiles(
+      PGEGroup recordedAuxiliaryInputFiles) {
+    this.recordedAuxiliaryInputFiles = recordedAuxiliaryInputFiles;
+  }
+
+  /**
+   * @return the productPath
+   */
+  public PGEScalar getProductPath() {
+    return productPath;
+  }
+
+  /**
+   * @param productPath
+   *          the productPath to set
+   */
+  public void setProductPath(PGEScalar productPath) {
+    this.productPath = productPath;
+  }
+
+  /**
+   * @return the monitorPath
+   */
+  public PGEScalar getMonitorPath() {
+    return monitorPath;
+  }
+
+  /**
+   * @param monitorPath
+   *          the monitorPath to set
+   */
+  public void setMonitorPath(PGEScalar monitorPath) {
+    this.monitorPath = monitorPath;
+  }
+
+  /**
+   * @return the monitorFilenameFormat
+   */
+  public PGEScalar getMonitorFilenameFormat() {
+    return monitorFilenameFormat;
+  }
+
+  /**
+   * @param monitorFilenameFormat
+   *          the monitorFilenameFormat to set
+   */
+  public void setMonitorFilenameFormat(PGEScalar monitorFilenameFormat) {
+    this.monitorFilenameFormat = monitorFilenameFormat;
+  }
+
+  /**
+   * @return the monitorLevelGroup
+   */
+  public PGEGroup getMonitorLevelGroup() {
+    return monitorLevelGroup;
+  }
+
+  /**
+   * @param monitorLevelGroup
+   *          the monitorLevelGroup to set
+   */
+  public void setMonitorLevelGroup(PGEGroup monitorLevelGroup) {
+    this.monitorLevelGroup = monitorLevelGroup;
+  }
+
+  /**
+   * @return the pgeSpecificGroups
+   */
+  public Map<String, PGEGroup> getPgeSpecificGroups() {
+    return pgeSpecificGroups;
+  }
+
+  /**
+   * @param pgeSpecificGroups
+   *          the pgeSpecificGroups to set
+   */
+  public void setPgeSpecificGroups(Map<String, PGEGroup> pgeSpecificGroups) {
+    this.pgeSpecificGroups = pgeSpecificGroups;
+  }
+  
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEDataHandler.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEDataHandler.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEDataHandler.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEDataHandler.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,253 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+//JDK imports
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Logger;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * 
+ * <p>
+ * A SAX-based event handler to parse PGE data out of an underlying XML file.
+ * </p>
+ * 
+ * 
+ * @author mattmann
+ * @version $Revision$
+ */
+public class PGEDataHandler extends DefaultHandler implements PGEDataParseKeys {
+
+  /* our log stream */
+  private static final Logger LOG = Logger.getLogger(PGEDataHandler.class
+      .getName());
+
+  /* scalars to be set as tags are encountered */
+  private Map scalars = new HashMap();
+
+  /* vectors to be set as tags are encountered */
+  private Map vectors = new HashMap();
+
+  /* matrices to be set as tags are encountered */
+  private Map matrices = new HashMap();
+
+  /* the status of the parse handler */
+  private int parseStatus = UNSET;
+
+  private boolean vecElement;
+
+  private boolean matrixElement;
+
+  private PGEScalar currentScalar = null;
+
+  private PGEVector currentVector = null;
+
+  private PGEMatrix currentMatrix = null;
+
+  private StringBuffer charBuf;
+
+  // needed for parsing matrix
+  private int currentRow = 0;
+
+  private int currentCol = 0;
+
+  public PGEDataHandler() {
+    vecElement = false;
+    matrixElement = false;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
+   * java.lang.String, java.lang.String, org.xml.sax.Attributes)
+   */
+  public void startElement(String uri, String localName, String qName,
+      Attributes attributes) throws SAXException {
+    if (notParsing()) {
+      // only care about if it's a scalar/vector or matrix
+      if (qName.equals(SCALAR_TAG_NAME)) {
+        parseStatus = PARSING_SCALAR;
+        currentScalar = new PGEScalar();
+        currentScalar.setName(attributes.getValue(NAME_ATTR));
+        charBuf = new StringBuffer();
+      } else if (qName.equals(VECTOR_TAG_NAME)) {
+        parseStatus = PARSING_VEC;
+        currentVector = new PGEVector();
+        currentVector.setName(attributes.getValue(NAME_ATTR));
+      } else if (qName.equals(MATRIX_TAG_NAME)) {
+        parseStatus = PARSING_MATRIX;
+        currentMatrix = new PGEMatrix(attributes.getValue(NAME_ATTR), Integer
+            .parseInt(attributes.getValue(ROWS_ATTR)), Integer
+            .parseInt(attributes.getValue(COLS_ATTR)));
+      }
+    } else if (isParsingScalar()) {
+      // shouldn't encountere another tag here
+      throw new SAXException("Parsing scalar: [" + this.currentScalar.getName()
+          + "]: Should not encounter another tag within");
+    } else if (isParsingVector()) {
+      if (qName.equals(VECTOR_ELEMENT_TAG)) {
+        vecElement = true;
+        charBuf = new StringBuffer();
+      }
+
+    } else if (isParsingMatrix()) {
+      if (qName.equals(MATRIX_COL_TAG)) {
+        matrixElement = true;
+        charBuf = new StringBuffer();
+      }
+    }
+
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
+   * java.lang.String, java.lang.String)
+   */
+  public void endElement(String uri, String localName, String qName)
+      throws SAXException {
+    if (qName.equals(SCALAR_TAG_NAME)) {
+      this.currentScalar.setValue(this.charBuf.toString());
+      this.scalars.put(this.currentScalar.getName(), this.currentScalar);
+      clearCharBuf();
+      parseStatus = UNSET;
+    } else if (qName.equals(VECTOR_ELEMENT_TAG)) {
+      this.currentVector.getElements().add(this.charBuf.toString());
+      clearCharBuf();
+      this.vecElement = false;
+    } else if (qName.equals(VECTOR_TAG_NAME)) {
+      // add the vector
+      if (this.currentVector != null) {
+        this.vectors.put(this.currentVector.getName(), this.currentVector);
+        parseStatus = UNSET;
+      }
+    } else if (qName.equals(MATRIX_TAG_NAME)) {
+      if (this.currentMatrix != null) {
+        this.matrices.put(this.currentMatrix.getName(), this.currentMatrix);
+
+        parseStatus = UNSET;
+        this.currentCol = 0;
+        this.currentRow = 0;
+      }
+    } else if (qName.equals(MATRIX_ROW_TAG)) {
+      this.currentRow++;
+      this.currentCol = 0;
+    } else if (qName.equals(MATRIX_COL_TAG)) {
+      this.currentMatrix.addValue(this.charBuf.toString(), this.currentRow,
+          this.currentCol);
+      this.currentCol++;
+      clearCharBuf();
+      this.matrixElement = false;
+    }
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
+   */
+  public void characters(char[] ch, int start, int length) throws SAXException {
+    /*
+     * String val = new String(ch, start, length).trim(); if(!val.equals("")){
+     * this.charBuf.append(val); }
+     */
+    if (isParsingScalar() || isParsingVectorElement()
+        || isParsingMatrixElement()) {
+      this.charBuf.append(ch, start, length);
+    }
+  }
+
+  /**
+   * @return the matrices
+   */
+  public Map getMatrices() {
+    return matrices;
+  }
+
+  /**
+   * @param matrices
+   *          the matrices to set
+   */
+  public void setMatrices(Map matrices) {
+    this.matrices = matrices;
+  }
+
+  /**
+   * @return the scalars
+   */
+  public Map getScalars() {
+    return scalars;
+  }
+
+  /**
+   * @param scalars
+   *          the scalars to set
+   */
+  public void setScalars(Map scalars) {
+    this.scalars = scalars;
+  }
+
+  /**
+   * @return the vectors
+   */
+  public Map getVectors() {
+    return vectors;
+  }
+
+  /**
+   * @param vectors
+   *          the vectors to set
+   */
+  public void setVectors(Map vectors) {
+    this.vectors = vectors;
+  }
+
+  public boolean isParsingScalar() {
+    return parseStatus == PARSING_SCALAR;
+  }
+
+  public boolean isParsingVector() {
+    return parseStatus == PARSING_VEC;
+  }
+
+  public boolean isParsingMatrix() {
+    return parseStatus == PARSING_MATRIX;
+  }
+
+  public boolean isParsingMatrixElement() {
+    return matrixElement;
+  }
+
+  public boolean isParsingVectorElement() {
+    return vecElement;
+  }
+
+  public boolean notParsing() {
+    return parseStatus == UNSET;
+  }
+
+  private void clearCharBuf() {
+    this.charBuf.setLength(0);
+    this.charBuf = null;
+  }
+
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEDataParseKeys.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEDataParseKeys.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEDataParseKeys.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEDataParseKeys.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,59 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+/**
+ * 
+ * <p>
+ * A collection of metadata keys relating to the {@link PGEDataHandler}
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public interface PGEDataParseKeys {
+
+  public static final int PARSING_VEC = -10;
+
+  public static final int PARSING_SCALAR = -20;
+
+  public static final int PARSING_MATRIX = -30;
+
+  public static final int UNSET = -1;
+
+  public static final String GROUP_TAG_NAME = "group";
+
+  public static final String SCALAR_TAG_NAME = "scalar";
+
+  public static final String VECTOR_TAG_NAME = "vector";
+
+  public static final String MATRIX_TAG_NAME = "matrix";
+
+  public static final String PGE_INPUT_TAG_NAME = "input";
+
+  public static final String VECTOR_ELEMENT_TAG = "element";
+
+  public static final String MATRIX_ROW_TAG = "tr";
+
+  public static final String MATRIX_COL_TAG = "td";
+
+  public static final String NAME_ATTR = "name";
+
+  public static final String ROWS_ATTR = "rows";
+
+  public static final String COLS_ATTR = "cols";
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEGroup.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEGroup.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEGroup.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEGroup.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,211 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+//JDK imports
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * A PGEGroup is a named set of named {@link PGEVector}s, {@link PGEScalar}s and
+ * {@link PGEMatrix}s.
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class PGEGroup {
+
+  /* the name of the PGEGroup */
+  private String name = null;
+
+  /* the HashMap of PGEScalars */
+  private Map<String, PGEScalar> scalars = null;
+
+  /* the HashMap of PGEVectors */
+  private Map<String, PGEVector> vectors = null;
+
+  /* the HashMap of PGEMatrixs */
+  private Map<String, PGEMatrix> matrixs = null;
+
+  /* the HashMap of PGEGroups */
+  private Map<String, PGEGroup> groups = null;
+
+  /**
+   * <p>
+   * Constructs a new PGEGroup with the given name
+   * </p>
+   */
+  public PGEGroup(String name) {
+    this.name = name;
+    this.scalars = new HashMap<String, PGEScalar>();
+    this.vectors = new HashMap<String, PGEVector>();
+    this.matrixs = new HashMap<String, PGEMatrix>();
+    this.groups = new HashMap<String, PGEGroup>();
+  }
+
+  /**
+   * @return the name
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * @param name
+   *          the name to set
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * @return the scalars
+   */
+  public Map<String, PGEScalar> getScalars() {
+    return scalars;
+  }
+
+  /**
+   * @param scalars
+   *          the scalars to set
+   */
+  public void setScalars(Map<String, PGEScalar> scalars) {
+    this.scalars = scalars;
+  }
+
+  /**
+   * @return the vectors
+   */
+  public Map<String, PGEVector> getVectors() {
+    return vectors;
+  }
+
+  /**
+   * @param vectors
+   *          the vectors to set
+   */
+  public void setVectors(Map<String, PGEVector> vectors) {
+    this.vectors = vectors;
+  }
+
+  /**
+   * @return the matrixs
+   */
+  public Map<String, PGEMatrix> getMatrixs() {
+    return matrixs;
+  }
+
+  /**
+   * @param matrixs
+   *          the matrixs to set
+   */
+  public void setMatrixs(Map<String, PGEMatrix> matrixs) {
+    this.matrixs = matrixs;
+  }
+
+  /**
+   * @return the groups
+   */
+  public Map<String, PGEGroup> getGroups() {
+    return groups;
+  }
+
+  /**
+   * @param groups
+   *          the groups to set
+   */
+  public void setGroups(Map<String, PGEGroup> groups) {
+    this.groups = groups;
+  }
+
+  public void addScalar(PGEScalar scalar) {
+    if (this.scalars != null && !this.scalars.containsKey(scalar.getName())) {
+      this.scalars.put(scalar.getName(), scalar);
+    }
+  }
+
+  public void addVector(PGEVector vector) {
+    if (this.vectors != null && !this.vectors.containsKey(vector.getName())) {
+      this.vectors.put(vector.getName(), vector);
+    }
+  }
+
+  public void addMatrix(PGEMatrix matrix) {
+    if (this.matrixs != null && !this.matrixs.containsKey(matrix.getName())) {
+      this.matrixs.put(matrix.getName(), matrix);
+    }
+  }
+
+  public PGEScalar getScalar(String name) {
+    if (this.scalars != null) {
+      return this.scalars.get(name);
+    } else
+      return null;
+  }
+
+  public PGEVector getVector(String name) {
+    if (this.vectors != null) {
+      return this.vectors.get(name);
+    } else
+      return null;
+  }
+
+  public PGEMatrix getMatrix(String name) {
+    if (this.matrixs != null) {
+      return this.matrixs.get(name);
+    } else
+      return null;
+  }
+
+  public PGEGroup getGroup(String name) {
+    if (this.groups != null) {
+      return this.groups.get(name);
+    } else
+      return null;
+  }
+
+  public int getNumScalars() {
+    if (this.scalars != null) {
+      return this.scalars.size();
+    } else
+      return 0;
+  }
+
+  public int getNumVectors() {
+    if (this.vectors != null) {
+      return this.vectors.size();
+    } else
+      return 0;
+  }
+
+  public int getNumMatrixs() {
+    if (this.matrixs != null) {
+      return this.matrixs.size();
+    } else
+      return 0;
+  }
+
+  public int getNumGroups() {
+    if (this.groups != null) {
+      return this.groups.size();
+    } else
+      return 0;
+  }
+
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEMatrix.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEMatrix.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEMatrix.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEMatrix.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,133 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+//JDK imports
+import java.util.List;
+import java.util.Vector;
+
+/**
+ * 
+ * <p>
+ * A PGEMatrix is a set of rows and columns with values in each cell defined by
+ * a row number and column number.
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class PGEMatrix {
+
+  private List<List<Object>> rows;
+
+  private int numCols;
+
+  private String name;
+
+  /**
+   * <p>
+   * Constructs a new PGEMatrix with no rows or columns.
+   * </p>
+   */
+  public PGEMatrix() {
+    this(null, 0, 0);
+  }
+
+  /**
+   * <p>
+   * Constructs a new PGEMatrix with the specified <code>numrows</code> and
+   * <code>numcols</code>.
+   * 
+   * @param numrows
+   *          The number of rows in the matrix.
+   * @param numcols
+   *          The number of columns for each row in the matrix.
+   */
+  public PGEMatrix(String name, int numrows, int numcols) {
+    super();
+    this.rows = new Vector<List<Object>>(numrows);
+    this.numCols = numcols;
+    this.name = name;
+
+    for (int i = 0; i < numrows; i++) {
+      List<Object> colVector = new Vector<Object>(numcols);
+      this.rows.add(i, colVector);
+    }
+  }
+
+  public void addValue(Object value, int row, int col) {
+    if ((row > this.rows.size() || row < 0) || (col > this.numCols || col < 0)) {
+      return;
+    }
+
+    ((List<Object>) this.rows.get(row)).add(col, value);
+  }
+
+  public Object getValue(int row, int col) {
+    if ((row > this.rows.size() || row < 0) || (col > this.numCols || col < 0)) {
+      return null;
+    }
+
+    return ((List<Object>) this.rows.get(row)).get(col);
+  }
+
+  /**
+   * @return Returns the rows.
+   */
+  public List<List<Object>> getRows() {
+    return this.rows;
+  }
+
+  /**
+   * @param rows
+   *          The rows to set.
+   */
+  public void setRows(List<List<Object>> rows) {
+    this.rows = rows;
+  }
+
+  /**
+   * @return Returns the name.
+   */
+  public String getName() {
+    return this.name;
+  }
+
+  /**
+   * @param name
+   *          The name to set.
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * @return Returns the numCols.
+   */
+  public int getNumCols() {
+    return this.numCols;
+  }
+
+  /**
+   * @param numCols
+   *          The numCols to set.
+   */
+  public void setNumCols(int numCols) {
+    this.numCols = numCols;
+  }
+
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEScalar.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEScalar.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEScalar.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEScalar.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,82 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+/**
+ * 
+ * <p>
+ * A PGE Scalar represents a named unit of information. In essence, it is a
+ * name/value pair.
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class PGEScalar {
+
+  private String name;
+
+  private String value;
+
+  /**
+     * 
+     */
+  public PGEScalar() {
+    super();
+  }
+
+  /**
+   * @param name
+   * @param value
+   */
+  public PGEScalar(String name, String value) {
+    super();
+    this.name = name;
+    this.value = value;
+  }
+
+  /**
+   * @return the name
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * @param name
+   *          the name to set
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * @return the value
+   */
+  public String getValue() {
+    return value;
+  }
+
+  /**
+   * @param value
+   *          the value to set
+   */
+  public void setValue(String value) {
+    this.value = value;
+  }
+
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEVector.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEVector.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEVector.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEVector.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,86 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+//JDK imports
+import java.util.List;
+import java.util.Vector;
+
+/**
+ * 
+ * <p>
+ * A PGEVector is a dynamic set of information, coupled with a name. The
+ * information may include number, or string data.
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class PGEVector {
+
+  private String name;
+
+  private List<Object> elements;
+
+  /**
+   * @param name
+   * @param elements
+   */
+  public PGEVector(String name, List<Object> elements) {
+    super();
+    this.name = name;
+    this.elements = elements;
+  }
+
+  /**
+   * 
+   */
+  public PGEVector() {
+    this(null, new Vector<Object>());
+  }
+
+  /**
+   * @return the name
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * @param name
+   *          the name to set
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * @return the elements
+   */
+  public List<Object> getElements() {
+    return elements;
+  }
+
+  /**
+   * @param elements
+   *          the elements to set
+   */
+  public void setElements(List<Object> elements) {
+    this.elements = elements;
+  }
+
+}

Added: incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEXMLFileUtils.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEXMLFileUtils.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEXMLFileUtils.java (added)
+++ incubator/oodt/trunk/pcs-input/src/main/java/org/apache/oodt/pcs/input/PGEXMLFileUtils.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,365 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+//OODT imports
+import org.apache.oodt.commons.xml.DOMUtil;
+
+//JDK imports
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+/**
+ * <p>
+ * Low-level reading API to get {@link PGEVector}s, {@link PGEScalar}s, and
+ * {@link PGEMatrix}s from underlying OCO XML files.
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ */
+public final class PGEXMLFileUtils {
+
+  /* our log stream */
+  private static final Logger LOG = Logger.getLogger(PGEXMLFileUtils.class
+      .getName());
+
+  public static Map getMatrixsAsMap(Element group)
+      throws PGEConfigFileException {
+    // get the nodelist for the matrixs
+    NodeList matrixs = group.getElementsByTagName("matrix");
+
+    // if it's null, return null
+    if (matrixs == null) {
+      return null;
+    }
+
+    Map matrixMap = new HashMap(matrixs.getLength());
+
+    // for each matrix in the list, create a PGEMatrix with the name
+    // attribute and the appropriate value
+
+    for (int i = 0; i < matrixs.getLength(); i++) {
+      Element matrix = (Element) matrixs.item(i);
+
+      // get the name of the matrix
+      String matrixName = matrix.getAttribute("name");
+
+      // get the number of cols
+      NodeList rowNodeList = matrix.getElementsByTagName("tr");
+
+      // there has to be at least one 1
+      if (rowNodeList == null
+          || (rowNodeList != null && rowNodeList.getLength() <= 0)) {
+        throw new PGEConfigFileException(
+            "there must be at least one row in a matrix!");
+      }
+
+      PGEMatrix pgeMatrix = new PGEMatrix();
+      pgeMatrix.setName(matrixName);
+
+      for (int j = 0; j < rowNodeList.getLength(); j++) {
+        Element rowElem = (Element) rowNodeList.item(j);
+
+        // get the number of cols
+        NodeList colNodeList = rowElem.getElementsByTagName("td");
+
+        // there must be at least one colum in each row
+        if (colNodeList == null
+            || (colNodeList != null && colNodeList.getLength() <= 0)) {
+          throw new PGEConfigFileException(
+              "there must be at least one column a matrix row!");
+        }
+
+        if (pgeMatrix.getNumCols() == 0) {
+          // then set it
+          pgeMatrix.setNumCols(colNodeList.getLength());
+        }
+
+        List colList = new Vector(colNodeList.getLength());
+
+        for (int k = 0; k < colNodeList.getLength(); k++) {
+          Element colElement = (Element) colNodeList.item(k);
+          colList.add(DOMUtil.getSimpleElementText(colElement));
+        }
+
+        pgeMatrix.getRows().add(colList);
+      }
+
+      matrixMap.put(pgeMatrix.getName(), pgeMatrix);
+    }
+    return matrixMap;
+  }
+
+  public static List getMatrixs(Element group) throws PGEConfigFileException {
+    // get the nodelist for the matrixs
+    NodeList matrixs = group.getElementsByTagName("matrix");
+
+    // if it's null, return null
+    if (matrixs == null) {
+      return null;
+    }
+
+    List matrixList = new Vector(matrixs.getLength());
+
+    // for each matrix in the list, create a PGEMatrix with the name
+    // attribute and the appropriate value
+
+    for (int i = 0; i < matrixs.getLength(); i++) {
+      Element matrix = (Element) matrixs.item(i);
+
+      // get the name of the matrix
+      String matrixName = matrix.getAttribute("name");
+
+      // get the number of cols
+      NodeList rowNodeList = matrix.getElementsByTagName("tr");
+
+      // there has to be at least one 1
+      if (rowNodeList == null
+          || (rowNodeList != null && rowNodeList.getLength() <= 0)) {
+        throw new PGEConfigFileException(
+            "there must be at least one row in a matrix!");
+      }
+
+      PGEMatrix pgeMatrix = new PGEMatrix();
+      pgeMatrix.setName(matrixName);
+
+      for (int j = 0; j < rowNodeList.getLength(); j++) {
+        Element rowElem = (Element) rowNodeList.item(j);
+
+        // get the number of cols
+        NodeList colNodeList = rowElem.getElementsByTagName("td");
+
+        // there must be at least one colum in each row
+        if (colNodeList == null
+            || (colNodeList != null && colNodeList.getLength() <= 0)) {
+          throw new PGEConfigFileException(
+              "there must be at least one column a matrix row!");
+        }
+
+        if (pgeMatrix.getNumCols() == 0) {
+          // then set it
+          pgeMatrix.setNumCols(colNodeList.getLength());
+        }
+
+        List colList = new Vector(colNodeList.getLength());
+
+        for (int k = 0; k < colNodeList.getLength(); k++) {
+          Element colElement = (Element) colNodeList.item(k);
+          colList.add(DOMUtil.getSimpleElementText(colElement));
+        }
+
+        pgeMatrix.getRows().add(colList);
+      }
+
+      matrixList.add(pgeMatrix);
+    }
+
+    return matrixList;
+  }
+
+  public static Map getScalarsAsMap(Element group)
+      throws PGEConfigFileException {
+    // get the nodelist for scalars
+    NodeList scalars = group.getElementsByTagName("scalar");
+
+    // if it's null, return null
+    if (scalars == null) {
+      return null;
+    }
+
+    Map scalarMap = new HashMap(scalars.getLength());
+
+    // for each scalar in the list, create a PGEScalar with the name
+    // attribute, and appropriate value
+    for (int i = 0; i < scalars.getLength(); i++) {
+      Element scalar = (Element) scalars.item(i);
+
+      // name of the scalar is in the name attribute
+      String scalarName = scalar.getAttribute("name");
+
+      // get the value of it
+      String scalarValue = DOMUtil.getSimpleElementText(scalar);
+
+      scalarMap.put(scalarName, new PGEScalar(scalarName, scalarValue));
+    }
+
+    return scalarMap;
+  }
+
+  public static List getScalars(Element group) throws PGEConfigFileException {
+    // get the nodelist for scalars
+    NodeList scalars = group.getElementsByTagName("scalar");
+
+    // if it's null, return null
+    if (scalars == null) {
+      return null;
+    }
+
+    List scalarList = new Vector(scalars.getLength());
+
+    // for each scalar in the list, create a PGEScalar with the name
+    // attribute, and appropriate value
+    for (int i = 0; i < scalars.getLength(); i++) {
+      Element scalar = (Element) scalars.item(i);
+
+      // name of the scalar is in the name attribute
+      String scalarName = scalar.getAttribute("name");
+
+      // get the value of it
+      String scalarValue = DOMUtil.getSimpleElementText(scalar);
+
+      scalarList.add(new PGEScalar(scalarName, scalarValue));
+    }
+
+    return scalarList;
+  }
+
+  public static Map getVectorsAsMap(Element group)
+      throws PGEConfigFileException {
+    // get the nodelist for scalars
+    NodeList vectors = group.getElementsByTagName("vector");
+
+    // if it's null, return null
+    if (vectors == null) {
+      return null;
+    }
+
+    Map vectorMap = new HashMap(vectors.getLength());
+
+    // for each vector in the list, create a PGEVector with the name
+    // attribute, and appropriate value
+    for (int i = 0; i < vectors.getLength(); i++) {
+      Element vector = (Element) vectors.item(i);
+
+      // name of the vector is in the name attribute
+      String vectorName = vector.getAttribute("name");
+
+      PGEVector vec = new PGEVector();
+      vec.setName(vectorName);
+
+      // get the nodelist of elements
+      NodeList vecElems = vector.getElementsByTagName("element");
+
+      if (vecElems == null || (vecElems != null && vecElems.getLength() <= 0)) {
+        throw new PGEConfigFileException(
+            "There must be at least one element in a PGEVector!");
+      }
+
+      List vecElemList = new Vector(vecElems.getLength());
+
+      for (int j = 0; j < vecElems.getLength(); j++) {
+        Element vecElem = (Element) vecElems.item(j);
+        vecElemList.add(DOMUtil.getSimpleElementText(vecElem));
+      }
+
+      vec.setElements(vecElemList);
+      vectorMap.put(vec.getName(), vec);
+    }
+
+    return vectorMap;
+  }
+
+  public static List getVectors(Element group) throws PGEConfigFileException {
+    // get the nodelist for scalars
+    NodeList vectors = group.getElementsByTagName("vector");
+
+    // if it's null, return null
+    if (vectors == null) {
+      return null;
+    }
+
+    List vectorList = new Vector(vectors.getLength());
+
+    // for each vector in the list, create a PGEVector with the name
+    // attribute, and appropriate value
+    for (int i = 0; i < vectors.getLength(); i++) {
+      Element vector = (Element) vectors.item(i);
+
+      // name of the vector is in the name attribute
+      String vectorName = vector.getAttribute("name");
+
+      PGEVector vec = new PGEVector();
+      vec.setName(vectorName);
+
+      // get the nodelist of elements
+      NodeList vecElems = vector.getElementsByTagName("element");
+
+      if (vecElems == null || (vecElems != null && vecElems.getLength() <= 0)) {
+        throw new PGEConfigFileException(
+            "There must be at least one element in a PGEVector!");
+      }
+
+      List vecElemList = new Vector(vecElems.getLength());
+
+      for (int j = 0; j < vecElems.getLength(); j++) {
+        Element vecElem = (Element) vecElems.item(j);
+        vecElemList.add(DOMUtil.getSimpleElementText(vecElem));
+      }
+
+      vec.setElements(vecElemList);
+      vectorList.add(vec);
+    }
+
+    return vectorList;
+  }
+
+  public static Document getDocumentRoot(String xmlFile) {
+    // open up the XML file
+    DocumentBuilderFactory factory = null;
+    DocumentBuilder parser = null;
+    Document document = null;
+    InputSource inputSource = null;
+
+    InputStream xmlInputStream = null;
+
+    try {
+      xmlInputStream = new File(xmlFile).toURL().openStream();
+    } catch (IOException e) {
+      LOG.log(Level.WARNING, "IOException when getting input stream from ["
+          + xmlFile + "]: returning null document root");
+      return null;
+    }
+
+    inputSource = new InputSource(xmlInputStream);
+
+    try {
+      factory = DocumentBuilderFactory.newInstance();
+      parser = factory.newDocumentBuilder();
+      document = parser.parse(inputSource);
+    } catch (Exception e) {
+      LOG.warning("Unable to parse xml file [" + xmlFile + "]." + "Reason is ["
+          + e + "]");
+      return null;
+    }
+
+    return document;
+  }
+
+}

Added: incubator/oodt/trunk/pcs-input/src/main/resources/pge-config-example.xml
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/resources/pge-config-example.xml?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/resources/pge-config-example.xml (added)
+++ incubator/oodt/trunk/pcs-input/src/main/resources/pge-config-example.xml Fri Jul 16 03:00:26 2010
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more contributor
+license agreements.  See the NOTICE.txt file distributed with this work for
+additional information regarding copyright ownership.  The ASF licenses this
+file to you under the Apache License, Version 2.0 (the "License"); you may not
+use this file except in compliance with the License.  You may obtain a copy of
+the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+License for the specific language governing permissions and limitations under
+the License.
+-->
+<!-- Configuration file for running PGE Test -->
+<!-- Created by mattmann -->
+<!-- Created on November 11, 2005 at 09:22:00 -->
+<!-- GDS Build n.mm.pp -->
+<!-- Test name: testPGEConfigFileReader -->
+
+<input>
+   <group name="PGENameGroup">
+     <scalar name="PGEName">Test PGE</scalar>
+   </group>
+   
+   <group name="InputProductFiles">
+     <scalar name="VCID17Stream">/data/o04521/10/oco_10_200090503_o04521_p125_vcid17_mcf200901051234ops.hdf</scalar>
+     <scalar name="VCID32Stream">/data/o04521/10/oco_10_200090503_o04521_p125_vcid32_mcf200901051234ops.hdf</scalar>
+     <scalar name="VCID33Stream">/data/o04521/10/oco_10_200090503_o04521_p125_vcid33_mcf200901051234ops.hdf</scalar>
+     <scalar name="VCID34Stream">/data/o04521/10/oco_10_200090503_o04521_p125_vcid34_mcf200901051234ops.hdf</scalar>
+   </group>
+
+   <group name="StaticFileIdentificationFiles">
+     <scalar name="SFIF12Stream">/data/o04521/10/oco_10_200090503_o04521_p125_sfif12_mcf200901051234ops.hdf</scalar>
+     <scalar name="SFIF34Stream">/data/o04521/10/oco_10_200090503_o04521_p125_sfif34_mcf200901051234ops.hdf</scalar>
+   </group>
+   
+   <group name="DynamicAuxiliaryInputFiles">
+     <scalar name="AuxStream1">/data/o04521/10/oco_10_200090503_o04521_p125_aux1_mcf200901051234ops.aux</scalar>
+   </group>
+   
+   <group name="RecordedAuxiliaryInputFiles">
+      <scalar name="RecAuxStream1">/data/o04521/10/oco_10_200090503_o04521_p125_raux1_mcf200901051234ops.raux</scalar>
+   </group>
+   
+   <group name="ProductPathGroup">
+      <scalar name="ProductPath">/data</scalar>
+   </group>
+   
+   <group name="MonitorGroup">
+      <scalar name="MonitorPath">/data/monitor</scalar>
+      <scalar name="MonitorFilenameFormat">.monitor</scalar>
+   </group>
+
+   <group name="MonitorLevel">
+      <scalar name="MonIO">High</scalar>
+      <scalar name="MonAlg">Off</scalar>
+      <scalar name="MonControl">Med</scalar>
+   </group>
+   
+   <!--  PGE Specific Info -->
+   
+   <group name="MyPGEInfo">
+     <scalar name="TestScalar1">Scalar1</scalar>
+     <vector name="TestVector1">
+       <element>10</element>
+       <element>test string</element>
+       <element>55.5</element>
+       <element>/data/1/2/3/file.file</element>
+     </vector>
+     
+     <matrix name="TestMatrix1">
+       <tr>
+         <td>55</td>
+         <td>12</td>
+         <td>1</td>
+       </tr>
+        <tr>
+         <td>44</td>
+         <td>33</td>
+         <td>100</td>
+       </tr>    
+     </matrix>
+   </group>
+   
+   
+</input>

Added: incubator/oodt/trunk/pcs-input/src/main/resources/pge-data-sax-example.xml
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/main/resources/pge-data-sax-example.xml?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/main/resources/pge-data-sax-example.xml (added)
+++ incubator/oodt/trunk/pcs-input/src/main/resources/pge-data-sax-example.xml Fri Jul 16 03:00:26 2010
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more contributor
+license agreements.  See the NOTICE.txt file distributed with this work for
+additional information regarding copyright ownership.  The ASF licenses this
+file to you under the Apache License, Version 2.0 (the "License"); you may not
+use this file except in compliance with the License.  You may obtain a copy of
+the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+License for the specific language governing permissions and limitations under
+the License.
+-->
+<!DOCTYPE pgedata [
+
+<!--define the internal DTD-->
+  <!ELEMENT pgedata (scalar*,vector*,matrix*)>
+  <!ELEMENT matrix (tr+)>
+  <!ELEMENT tr (td+)>
+  <!ELEMENT td (#PCDATA)>
+  <!ELEMENT scalar (#PCDATA)>
+  <!ATTLIST scalar name CDATA ''>
+  <!ATTLIST matrix name CDATA ''>
+  <!ATTLIST matrix rows CDATA ''>
+  <!ATTLIST matrix cols CDATA ''>
+  <!ELEMENT vector (element*)>
+  <!ATTLIST vector name CDATA ''>
+  <!ELEMENT element (#PCDATA)>
+
+<!--close the DOCTYPE declaration-->
+]>
+
+<pgedata>
+<scalar name="foo">bar</scalar>
+<vector name="solar_degrad_stddev_pixel_strong_co2">
+<element>7.156829408322501e-18</element>
+<element>1.001230034697944e-17</element>
+<element>2.516345810183765e-18</element>
+<element>5.094596673550921e-18</element>
+<element>3.255014963930512e-18</element>
+<element>5.462772487746047e-18</element>
+<element>4.855160146533748e-18</element>
+<element>9.933721983075038e-18</element>
+<element>6.690502587946044e-18</element>
+<element>9.151933719744191e-18</element>
+<element>5.650032685446839e-07</element>
+<element>5.650032683079101e-07</element>
+<element>5.650032675464667e-07</element>
+<element>5.650032673675753e-07</element>
+<element>5.650032682784805e-07</element>
+<element>5.650032672186995e-07</element>
+<element>5.650032673387105e-07</element>
+<element>5.650032679108124e-07</element>
+<element>5.650032677826825e-07</element>
+<element>5.650032673930709e-07</element>
+<element>5.650032675232457e-07</element>
+<element>5.650032685245339e-07</element>
+<element>5.650032680052611e-07</element>
+<element>5.65003268542033e-07</element>
+<element>5.650032679906624e-07</element>
+<element>5.650032673606469e-07</element>
+<element>5.650032675613922e-07</element>
+<element>5.650032683106426e-07</element>
+<element>5.650032689379945e-07</element>
+<element>5.650032676014303e-07</element>
+<element>5.65003266960909e-07</element>
+<element>5.650032677139583e-07</element>
+<element>5.650032674960097e-07</element>
+<element>5.650032681530792e-07</element>
+<element>5.650032675200847e-07</element>
+<element>5.650032686111758e-07</element>
+<element>5.650032686858376e-07</element>
+<element>5.65003268010127e-07</element>
+<element>5.650032682342422e-07</element>
+<element>5.650032678880181e-07</element>
+<element>5.650032682061757e-07</element>
+<element>5.65003267883388e-07</element>
+<element>5.650032675152441e-07</element>
+<element>5.650032682394885e-07</element>
+<element>5.650032674941117e-07</element>
+<element>5.650032684140377e-07</element>
+<element>5.650032683660305e-07</element>
+<element>5.650032682050788e-07</element>
+<element>5.650032687935118e-07</element>
+<element>5.650032683845967e-07</element>
+<element>5.650032676294086e-07</element>
+<element>5.650032679809725e-07</element>
+<element>5.650032676793177e-07</element>
+<element>5.65003268781788e-07</element>
+<element>5.650032684167456e-07</element>
+<element>5.650032680698273e-07</element>
+<element>5.650032682093531e-07</element>
+<element>5.650032668567917e-07</element>
+<element>5.650032684921305e-07</element>
+<element>5.650032678442659e-07</element>
+<element>5.650032683200177e-07</element>
+<element>5.650032674059403e-07</element>
+<element>5.650032675556752e-07</element>
+<element>5.650032672721777e-07</element>
+<element>5.65003268435877e-07</element>
+<element>5.65003268168295e-07</element>
+<element>5.650032672004772e-07</element>
+<element>5.65003268343149e-07</element>
+<element>5.650032672935149e-07</element>
+<element>5.650032673435717e-07</element>
+<element>5.650032676094195e-07</element>
+<element>5.650032684139997e-07</element>
+<element>5.650032685593072e-07</element>
+<element>5.65003268364404e-07</element>
+<element>5.650032679422686e-07</element>
+<element>5.650032675656163e-07</element>
+<element>5.650032684983817e-07</element>
+<element>5.650032677526585e-07</element>
+<element>5.650032675956273e-07</element>
+<element>5.650032687894096e-07</element>
+<element>5.650032678559322e-07</element>
+<element>5.650032682914911e-07</element>
+<element>5.650032679964352e-07</element>
+<element>5.650032684764378e-07</element>
+<element>5.650032674968119e-07</element>
+<element>5.650032681637797e-07</element>
+<element>5.650032681947215e-07</element>
+<element>5.650032678251767e-07</element>
+<element>5.650032690991248e-07</element>
+<element>5.650032690235313e-07</element>
+<element>5.650032680351119e-07</element>
+<element>5.650032676168338e-07</element>
+<element>5.647772123356515e-07</element>
+<element>4.376496495071942e-07</element>
+<element>4.376496497473271e-07</element>
+<element>4.376496497611925e-07</element>
+<element>4.376496496419958e-07</element>
+<element>4.376496499490122e-07</element>
+<element>4.376496491453507e-07</element>
+<element>4.376496496199902e-07</element>
+<element>4.376496496313135e-07</element>
+<element>4.376496493560163e-07</element>
+<element>4.37649649415751e-07</element>
+<element>4.376496487438027e-07</element>
+<element>4.376496490231489e-07</element>
+<element>4.376496487693666e-07</element>
+<element>4.376496497192663e-07</element>
+<element>4.376496495310717e-07</element>
+<element>4.37649648937335e-07</element>
+<element>4.376496500508244e-07</element>
+<element>4.376496494235092e-07</element>
+<element>4.376496487765641e-07</element>
+<element>4.376496502573037e-07</element>
+<element>4.376496491797974e-07</element>
+<element>4.376496499778206e-07</element>
+<element>4.376496500770006e-07</element>
+<element>4.376496494665307e-07</element>
+<element>4.376496491597167e-07</element>
+<element>4.376496489798316e-07</element>
+<element>4.376496494860262e-07</element>
+<element>4.37649649797094e-07</element>
+<element>4.376496497130217e-07</element>
+<element>4.376496486902971e-07</element>
+<element>4.376496495729736e-07</element>
+<element>4.376496496595051e-07</element>
+<element>4.376496499103306e-07</element>
+<element>4.376496500715821e-07</element>
+<element>4.37649648393365e-07</element>
+<element>4.376496484669906e-07</element>
+<element>4.376496492303731e-07</element>
+<element>4.376496495606573e-07</element>
+<element>4.376496490041646e-07</element>
+<element>4.37649649320577e-07</element>
+<element>4.376496495126756e-07</element>
+<element>4.376496494133791e-07</element>
+<element>4.376496502085632e-07</element>
+<element>4.376496503500403e-07</element>
+<element>4.376496494589024e-07</element>
+<element>4.376496498368655e-07</element>
+<element>4.376496500551011e-07</element>
+<element>4.376496497645193e-07</element>
+<element>4.376496500291563e-07</element>
+<element>4.376496502373919e-07</element>
+<element>4.376496509054261e-07</element>
+<element>4.376496493571226e-07</element>
+<element>4.376496494287977e-07</element>
+<element>4.376496480356845e-07</element>
+<element>4.376496498622485e-07</element>
+<element>4.376496492795068e-07</element>
+<element>4.376496493635472e-07</element>
+<element>4.376496495742711e-07</element>
+<element>4.376496492800899e-07</element>
+<element>4.376496486776432e-07</element>
+<element>4.376496491663729e-07</element>
+<element>4.376496487538479e-07</element>
+<element>4.376496505841974e-07</element>
+<element>4.376496494712244e-07</element>
+<element>4.376496507553076e-07</element>
+<element>4.376496496479507e-07</element>
+<element>4.376496489174097e-07</element>
+<element>4.376496506213675e-07</element>
+<element>4.376496492764853e-07</element>
+<element>4.376496503826606e-07</element>
+<element>4.376496497457357e-07</element>
+<element>4.376496500068803e-07</element>
+<element>4.376496491424506e-07</element>
+<element>4.376496490184349e-07</element>
+<element>4.376496499516555e-07</element>
+<element>4.376496508092893e-07</element>
+<element>4.376496497149663e-07</element>
+<element>4.376496490162042e-07</element>
+<element>4.376496497150526e-07</element>
+<element>4.376496496328375e-07</element>
+<element>4.376496508772949e-07</element>
+<element>4.376496494788424e-07</element>
+<element>4.376496495435055e-07</element>
+<element>4.376496488787512e-07</element>
+<element>4.376496496375363e-07</element>
+<element>4.376496496740998e-07</element>
+<element>4.37649649215851e-07</element>
+<element>4.376496489065544e-07</element>
+<element>4.376496492788316e-07</element>
+<element>4.376496490897931e-07</element>
+<element>4.37649649440043e-07</element>
+<element>4.376496498238065e-07</element>
+<element>4.376496494226082e-07</element>
+<element>4.376496497567646e-07</element>
+<element>4.376496493141858e-07</element>
+<element>4.37649648813068e-07</element>
+<element>4.376496501462642e-07</element>
+<element>4.376496497298497e-07</element>
+<element>4.376496492198953e-07</element>
+<element>4.376496503621545e-07</element>
+<element>4.376496508834365e-07</element>
+<element>4.37649649716903e-07</element>
+<element>4.376496497673743e-07</element>
+<element>4.376496492369553e-07</element>
+<element>4.376496488408098e-07</element>
+<element>4.376496497061842e-07</element>
+<element>4.376496492088419e-07</element>
+<element>4.376496505378924e-07</element>
+<element>4.376496500324374e-07</element>
+<element>4.376496505858961e-07</element>
+<element>4.376496483579881e-07</element>
+<element>4.376496492047949e-07</element>
+<element>4.37649650283361e-07</element>
+<element>4.37649649931959e-07</element>
+<element>4.37649650345139e-07</element>
+<element>4.376496499007843e-07</element>
+<element>4.376496490379377e-07</element>
+<element>1.061115853951698e-17</element>
+<element>1.044441840201302e-17</element>
+<element>4.957385254465431e-18</element>
+<element>4.329574642053506e-18</element>
+<element>7.235238887322188e-18</element>
+<element>6.979433064230618e-18</element>
+<element>1.100843453633496e-17</element>
+<element>7.519914554272377e-18</element>
+<element>4.874490654891152e-18</element>
+<element>1.716558331680342e-18</element>
+</vector>
+<matrix name="foomatrix" rows="2" cols="2">
+ <tr>
+   <td>194</td>
+   <td>192</td>
+ </tr>
+ <tr>
+   <td>1</td>
+   <td>2.2</td>
+ </tr>
+</matrix>
+</pgedata>

Added: incubator/oodt/trunk/pcs-input/src/test/org/apache/oodt/pcs/input/PGEConfigFileReaderTest.java
URL: http://svn.apache.org/viewvc/incubator/oodt/trunk/pcs-input/src/test/org/apache/oodt/pcs/input/PGEConfigFileReaderTest.java?rev=964663&view=auto
==============================================================================
--- incubator/oodt/trunk/pcs-input/src/test/org/apache/oodt/pcs/input/PGEConfigFileReaderTest.java (added)
+++ incubator/oodt/trunk/pcs-input/src/test/org/apache/oodt/pcs/input/PGEConfigFileReaderTest.java Fri Jul 16 03:00:26 2010
@@ -0,0 +1,168 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more contributor
+// license agreements.  See the NOTICE.txt file distributed with this work for
+// additional information regarding copyright ownership.  The ASF licenses this
+// file to you under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy of
+// the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+package org.apache.oodt.pcs.input;
+
+//JDK imports
+import java.util.Iterator;
+
+//Junit imports
+import junit.framework.TestCase;
+
+/**
+ * <p>
+ * A TestCase to test the PGEConfigFileReader
+ * </p>
+ * 
+ * @author mattmann
+ * @version $Revision$
+ * 
+ */
+public class PGEConfigFileReaderTest extends TestCase {
+
+  private PGEConfigurationFile configFile = null;
+
+  protected void setUp() {
+    PGEConfigFileReader reader = new PGEConfigFileReader();
+
+    try {
+      configFile = reader.read(this.getClass().getResource(
+          "pge-config-example.xml"));
+    } catch (PGEConfigFileException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  public void testPGEName() {
+    assertEquals("The PGE Name: " + configFile.getPgeName().getValue()
+        + " is not equal to TestPGE", "Test PGE", configFile.getPgeName()
+        .getValue());
+  }
+
+  public void testInputProductFiles() {
+    PGEGroup inputProductFiles = configFile.getInputProductFiles();
+
+    assertEquals("There is not 4 input product files!", 4, inputProductFiles
+        .getNumScalars());
+    assertEquals(
+        "The VCID17Stream does not have the correct value!",
+        "/data/o04521/10/oco_10_200090503_o04521_p125_vcid17_mcf200901051234ops.hdf",
+        inputProductFiles.getScalar("VCID17Stream").getValue());
+
+    assertEquals(
+        "The VCID34Stream does not have the correct value!",
+        "/data/o04521/10/oco_10_200090503_o04521_p125_vcid34_mcf200901051234ops.hdf",
+        inputProductFiles.getScalar("VCID34Stream").getValue());
+  }
+
+  public void testSFIFInputFiles() {
+    PGEGroup sfifFiles = configFile.getStaticFileIdentificationFiles();
+
+    assertEquals("There is not 2 sfif files!", 2, sfifFiles.getNumScalars());
+
+    assertEquals(
+        "The SFIF34Stream does not have the correct value!",
+        "/data/o04521/10/oco_10_200090503_o04521_p125_sfif34_mcf200901051234ops.hdf",
+        sfifFiles.getScalar("SFIF34Stream").getValue());
+  }
+
+  public void testDynamicAuxFiles() {
+    PGEGroup dynAuxFiles = configFile.getDynamicAuxiliaryInputFiles();
+
+    assertEquals("There is not 1 dynamic aux file!", 1, dynAuxFiles
+        .getNumScalars());
+
+    assertEquals(
+        "The AuxStream1 does not have the correct value!",
+        "/data/o04521/10/oco_10_200090503_o04521_p125_aux1_mcf200901051234ops.aux",
+        dynAuxFiles.getScalar("AuxStream1").getValue());
+  }
+
+  public void testRecordedAuxFiles() {
+    PGEGroup recAuxFiles = configFile.getRecordedAuxiliaryInputFiles();
+
+    assertEquals("There is not 1 recorded aux file!", 1, recAuxFiles
+        .getNumScalars());
+
+    assertEquals(
+        "The RecAuxStream1 does not have the correct value!",
+        "/data/o04521/10/oco_10_200090503_o04521_p125_raux1_mcf200901051234ops.raux",
+        recAuxFiles.getScalar("RecAuxStream1").getValue());
+  }
+
+  public void testProductPath() {
+    assertEquals("The product path: " + configFile.getProductPath().getValue()
+        + " is not equal to /data", "/data", configFile.getProductPath()
+        .getValue());
+  }
+
+  public void testMonitorPath() {
+    assertEquals("The monitor path: " + configFile.getMonitorPath().getValue()
+        + " is not equal to /data/monitor", "/data/monitor", configFile
+        .getMonitorPath().getValue());
+  }
+
+  public void testMonitorFilenameFormat() {
+    assertEquals("The monitor filename format: "
+        + configFile.getMonitorFilenameFormat().getValue()
+        + " is not equal to .monitor", ".monitor", configFile
+        .getMonitorFilenameFormat().getValue());
+  }
+
+  public void testMonitorLevels() {
+    assertEquals("The MonIO level was not set to High!", "High", configFile
+        .getMonitorLevelGroup().getScalar("MonIO").getValue());
+    assertEquals("The MonAlg level was not set to Off!", "Off", configFile
+        .getMonitorLevelGroup().getScalar("MonAlg").getValue());
+    assertEquals("The MonControl level was not set to Med!", "Med", configFile
+        .getMonitorLevelGroup().getScalar("MonControl").getValue());
+  }
+
+  public void testPGESpecificInfo() {
+
+    PGEGroup pgeSpecific = (PGEGroup) configFile.getPgeSpecificGroups().get(
+        "MyPGEInfo");
+
+    assertNotNull(pgeSpecific);
+
+    // test that the scalar is read
+    assertEquals("The test scalar 1 does not have a value of Scalar1",
+        "Scalar1", pgeSpecific.getScalar("TestScalar1").getValue());
+
+    // test that the vector is read
+    PGEVector testVec = pgeSpecific.getVector("TestVector1");
+
+    String testVal = "/data/1/2/3/file.file";
+    boolean hasValue = false;
+
+    for (Iterator i = testVec.getElements().iterator(); i.hasNext();) {
+      String elem = (String) i.next();
+      if (elem.equals(testVal)) {
+        hasValue = true;
+      }
+    }
+
+    assertTrue("The vector TestVector1 does not have the value " + testVal
+        + "!", hasValue);
+
+    // test that the matrix was read right
+    PGEMatrix testMatrix = pgeSpecific.getMatrix("TestMatrix1");
+
+    // row 1, col 0 should be 44
+    assertEquals("The matrix value isn't 44!", 44, Integer
+        .parseInt((String) testMatrix.getValue(1, 0)));
+  }
+}