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: package org.griphyn.cPlanner.partitioner;
016:
017: import java.io.BufferedWriter;
018: import java.io.File;
019: import java.io.FileWriter;
020: import java.io.IOException;
021: import java.io.PrintWriter;
022:
023: import org.griphyn.cPlanner.common.LogManager;
024:
025: /**
026: * It writes out the partition graph in xml form.
027: *
028: * @author Karan Vahi
029: * @version $Revision: 124 $
030: */
031: public class PDAXWriter {
032:
033: /**
034: * The version of the associated xml schema, to which the pdax files being
035: * written conform to.
036: */
037: public static final String XML_VERSION = "2.0";
038:
039: public static final String XML_NAMESPACE = "http://pegasus.isi.edu/schema";
040:
041: /**
042: * The write handle to the xml file being written.
043: */
044: private PrintWriter mWriteHandle;
045:
046: /**
047: * The handle to the logging object.
048: */
049: private LogManager mLogger;
050:
051: /**
052: * The name assigned to the pdax file being written.
053: */
054: private String mName;
055:
056: /**
057: * The fully qaulified path to the file being written.
058: */
059: private String mFileName;
060:
061: /**
062: * The overloaded constructor.
063: *
064: * @param name the name that is assigned to the pdax.
065: * @param fileName the path to the xml file that has to be written.
066: */
067: public PDAXWriter(String name, String fileName) {
068: mLogger = LogManager.getInstance();
069: mFileName = fileName;
070: mName = name;
071:
072: try {
073: mWriteHandle = new PrintWriter(new BufferedWriter(
074: new FileWriter(fileName)));
075: } catch (IOException e) {
076: throw new RuntimeException("Unable to write to file "
077: + fileName + " :", e);
078: }
079: }
080:
081: /**
082: * Writes out the opening element of the xml document.
083: */
084: public void writeHeader() {
085: String name = new File(mFileName).getName();
086:
087: writeln("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
088: writeln("<!-- generated: " + mLogger.getTimeStamp() + "-->");
089: writeln("<pdag xmlns=\""
090: + XML_NAMESPACE
091: + "/PDAX\""
092: + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
093: + " xsi:schemaLocation=\"" + XML_NAMESPACE + "/PDAX "
094: + XML_NAMESPACE + "/pdax-" + XML_VERSION + ".xsd\" "
095: + "name=\"" + mName + "\" " + "index=\"0\" count=\"1\""
096: + " version=\"" + XML_VERSION + "\" " + ">");
097:
098: }
099:
100: /**
101: * Writes out a partition to the associate XML stream.
102: *
103: * @param p the partition to be written to the stream.
104: *
105: * @exception IOException if something fishy happens to the stream.
106: */
107: public void write(Partition p) throws IOException {
108: p.toXML(mWriteHandle);
109: }
110:
111: /**
112: * Writes out to the file.
113: * @param st String
114: */
115: public void write(String st) {
116: mWriteHandle.write(st);
117: }
118:
119: /**
120: * Writes out to the file.
121: * @param st String
122: */
123: public void writeln(String st) {
124: mWriteHandle.println(st);
125: }
126:
127: /**
128: * Close the xml file that is written.
129: */
130: public void close() {
131: write("\n</pdag>");
132: mWriteHandle.close();
133: }
134: }
|