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: */package org.griphyn.cPlanner.code.generator;
015:
016: import org.griphyn.cPlanner.classes.ADag;
017: import org.griphyn.cPlanner.classes.SubInfo;
018: import org.griphyn.cPlanner.classes.PlannerOptions;
019:
020: import org.griphyn.cPlanner.code.CodeGenerator;
021: import org.griphyn.cPlanner.code.CodeGeneratorException;
022:
023: import org.griphyn.cPlanner.common.PegasusProperties;
024:
025: import org.griphyn.common.util.DynamicLoader;
026:
027: import java.io.BufferedWriter;
028: import java.io.File;
029: import java.io.FileWriter;
030: import java.io.IOException;
031: import java.io.PrintWriter;
032: import org.griphyn.cPlanner.classes.PegasusBag;
033:
034: /**
035: * An Abstract Base class implementing the CodeGenerator interface. Introduces
036: * helper methods for determining basenames of files, that contain concrete
037: * job descriptions.
038: *
039: *
040: * @author Karan Vahi
041: * @author Gaurang Mehta
042: *
043: * @version $Revision: 410 $
044: */
045: public abstract class Abstract implements CodeGenerator {
046:
047: /**
048: * The bag of initialization objects.
049: */
050: protected PegasusBag mBag;
051:
052: /**
053: * The directory where all the submit files are to be generated.
054: */
055: protected String mSubmitFileDir;
056:
057: /**
058: * The object holding all the properties pertaining to Pegasus.
059: */
060: protected PegasusProperties mProps;
061:
062: /**
063: * The object containing the command line options specified to the planner
064: * at runtime.
065: */
066: protected PlannerOptions mPOptions;
067:
068: /**
069: * Initializes the Code Generator implementation.
070: *
071: * @param bag the bag of initialization objects.
072: *
073: * @throws CodeGeneratorException in case of any error occuring code generation.
074: */
075: public void initialize(PegasusBag bag)
076: throws CodeGeneratorException {
077: mBag = bag;
078: mProps = bag.getPegasusProperties();
079: mPOptions = bag.getPlannerOptions();
080: mSubmitFileDir = mPOptions.getSubmitDirectory();
081: }
082:
083: /**
084: * Starts monitoring of the workflow by invoking a workflow monitor daemon.
085: * The monitoring should start only after the output files have been generated.
086: * FIXME: It should actually happen after the workflow has been submitted.
087: * Eventually should be a separate monitor interface, and submit writers
088: * should be loaded by an AbstractFactory.
089: *
090: * @return boolean indicating whether could successfully start the monitor
091: * daemon or not.
092: */
093: public boolean startMonitoring() {
094: //by default not all code generators support monitoring.
095: return false;
096: }
097:
098: /**
099: * Resets the Code Generator implementation.
100: *
101: * @throws CodeGeneratorException in case of any error occuring code generation.
102: */
103: public void reset() throws CodeGeneratorException {
104: mSubmitFileDir = null;
105: mProps = null;
106: mPOptions = null;
107: }
108:
109: /**
110: * Returns an open stream to the file that is used for writing out the
111: * job information for the job.
112: *
113: * @param job the job whose job information needs to be written.
114: *
115: * @return the writer to the open file.
116: * @exception IOException if unable to open a write handle to the file.
117: */
118: public PrintWriter getWriter(SubInfo job) throws IOException {
119: // String jobDir = job.getSubmitDirectory();
120: StringBuffer sb = new StringBuffer();
121:
122: //determine the absolute submit directory for the job
123: // sb.append( GridStart.getSubmitDirectory( mSubmitFileDir, job ));
124: sb.append(mSubmitFileDir);
125:
126: //append the base name of the job
127: sb.append(File.separatorChar).append(getFileBaseName(job));
128:
129: // intialize the print stream to the file
130: return new PrintWriter(new BufferedWriter(new FileWriter(sb
131: .toString())));
132: }
133:
134: /**
135: * Returns the basename of the file to which the job is written to.
136: *
137: * @param job the job whose job information needs to be written.
138: *
139: * @return the basename of the file.
140: */
141: public String getFileBaseName(SubInfo job) {
142: StringBuffer sb = new StringBuffer();
143: sb.append(job.jobName).append(".sub");
144: return sb.toString();
145: }
146:
147: }
|