001: /*
002: * This file or a portion of this file is licensed under the terms of
003: * the Globus Toolkit Public License, found in file GTPL, or at
004: * http://www.globus.org/toolkit/download/license.html. This notice must
005: * appear in redistributions of this file, with or without modification.
006: *
007: * Redistributions of this Software, with or without modification, must
008: * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
009: * some other similar material which is provided with the Software (if
010: * any).
011: *
012: * Copyright 1999-2004 University of Chicago and The University of
013: * Southern California. All rights reserved.
014: */
015:
016: package org.griphyn.cPlanner.transfer.refiner;
017:
018: import org.griphyn.cPlanner.classes.ADag;
019: import org.griphyn.cPlanner.classes.PlannerOptions;
020:
021: import org.griphyn.cPlanner.common.PegasusProperties;
022: import org.griphyn.cPlanner.common.LogManager;
023:
024: import org.griphyn.common.util.FactoryException;
025:
026: /**
027: * This transfer refiner incorporates chaining for the impelementations that
028: * can transfer only one file per transfer job, by delegating it to the Chain
029: * refiner implementation.
030: *
031: * @author Karan Vahi
032: * @author Gaurang Mehta
033: *
034: * @version $Revision: 50 $
035: */
036: public class SChain extends SDefault {
037:
038: /**
039: * The handle to the chain refiner.
040: */
041: protected Chain mChainRefiner;
042:
043: /**
044: * A short description of the transfer refinement.
045: */
046: public static final String DESCRIPTION = "SChain Mode (the stage in jobs being chained together in bundles";
047:
048: /**
049: * The overloaded constructor.
050: *
051: * @param dag the workflow to which transfer nodes need to be added.
052: * @param properties the <code>PegasusProperties</code> object containing all
053: * the properties required by Pegasus.
054: * @param options the options passed to the planner.
055: *
056: */
057: public SChain(ADag dag, PegasusProperties properties,
058: PlannerOptions options) {
059: super (dag, properties, options);
060: mChainRefiner = new Chain(dag, properties, options);
061: try {
062: //hmm we are bypassing the factory check!
063: mChainRefiner.loadImplementations(properties, options);
064: } catch (Exception e) {
065: throw new FactoryException("While loading in SChain ", e);
066:
067: }
068: }
069:
070: /**
071: * Adds a new relation to the workflow. In the case when the parent is a
072: * transfer job that is added, the parentNew should be set only the first
073: * time a relation is added. For subsequent compute jobs that maybe
074: * dependant on this, it needs to be set to false.
075: *
076: * @param parent the jobname of the parent node of the edge.
077: * @param child the jobname of the child node of the edge.
078: * @param site the execution site where the transfer node is to be run.
079: * @param parentNew the parent node being added, is the new transfer job
080: * and is being called for the first time.
081: */
082: public void addRelation(String parent, String child, String site,
083: boolean parentNew) {
084: //delegate to the Chain refiner
085: mChainRefiner.addRelation(parent, child, site, parentNew);
086: }
087:
088: /**
089: * Prints out the bundles and chains that have been constructed.
090: */
091: public void done() {
092: //delegate to the Chain refiner
093: mChainRefiner.done();
094: }
095:
096: /**
097: * Returns a textual description of the transfer mode.
098: *
099: * @return a short textual description
100: */
101: public String getDescription() {
102: return this.DESCRIPTION;
103: }
104:
105: }
|