/**
* Copyright 2007-2008 University Of Southern California
*
* Licensed 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 edu.isi.pegasus.planner.partitioner;
import edu.isi.pegasus.common.logging.LogManagerFactory;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import edu.isi.pegasus.common.logging.LogManager;
import edu.isi.pegasus.common.util.Currently;
/**
* It writes out the partition graph in xml form.
*
* @author Karan Vahi
* @version $Revision$
*/
public class PDAXWriter {
/**
* The version of the associated xml schema, to which the pdax files being
* written conform to.
*/
public static final String XML_VERSION = "2.0";
public static final String XML_NAMESPACE="http://pegasus.isi.edu/schema";
/**
* The write handle to the xml file being written.
*/
private PrintWriter mWriteHandle;
/**
* The handle to the logging object.
*/
private LogManager mLogger;
/**
* The name assigned to the pdax file being written.
*/
private String mName;
/**
* The fully qaulified path to the file being written.
*/
private String mFileName;
/**
* The overloaded constructor.
*
* @param name the name that is assigned to the pdax.
* @param fileName the path to the xml file that has to be written.
*/
public PDAXWriter(String name, String fileName) {
mLogger = LogManagerFactory.loadSingletonInstance();
mFileName = fileName;
mName = name;
try{
mWriteHandle =
new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
}
catch(IOException e){
throw new RuntimeException( "Unable to write to file " + fileName + " :",
e);
}
}
/**
* Writes out the opening element of the xml document.
*/
public void writeHeader(){
String name = new File(mFileName).getName();
writeln("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
writeln("<!-- generated: " + Currently.iso8601(false) + "-->");
writeln("<pdag xmlns=\""+XML_NAMESPACE+"/PDAX\"" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
" xsi:schemaLocation=\""+XML_NAMESPACE+"/PDAX " +
XML_NAMESPACE+"/pdax-"+XML_VERSION+".xsd\" " +
"name=\"" + mName + "\" " + "index=\"0\" count=\"1\"" +
" version=\"" + XML_VERSION + "\" " + ">");
}
/**
* Writes out a partition to the associate XML stream.
*
* @param p the partition to be written to the stream.
*
* @exception IOException if something fishy happens to the stream.
*/
public void write( Partition p ) throws IOException{
p.toXML( mWriteHandle );
}
/**
* Writes out to the file.
* @param st String
*/
public void write(String st){
mWriteHandle.write(st);
}
/**
* Writes out to the file.
* @param st String
*/
public void writeln(String st){
mWriteHandle.println(st);
}
/**
* Close the xml file that is written.
*/
public void close(){
write("\n</pdag>");
mWriteHandle.close();
}
}