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.partitioner;
017:
018: import org.griphyn.cPlanner.common.PegasusProperties;
019: import org.griphyn.cPlanner.common.LogManager;
020:
021: import org.griphyn.cPlanner.partitioner.graph.GraphNode;
022:
023: import java.util.Map;
024:
025: /**
026: * The abstract class that lays out the api to do the partitioning of the dax
027: * into smaller daxes. It defines additional functions to get and set the name
028: * of the partitions etc.
029: *
030: * @author Karan Vahi
031: * @version $Revision: 50 $
032: */
033:
034: public abstract class Partitioner {
035:
036: /**
037: * The package name where the implementing classes of this interface reside.
038: */
039: public static final String PACKAGE_NAME = "org.griphyn.cPlanner.partitioner";
040:
041: /**
042: * The version number associated with this API of Code Generator.
043: */
044: public static final String VERSION = "1.2";
045:
046: /**
047: * The root node of the graph from where to start the BFS.
048: */
049: protected GraphNode mRoot;
050:
051: /**
052: * The map containing all the graph nodes. The key to the map are the logical
053: * id's of the jobs as identified in the dax and the values are the
054: * corresponding Graph Node objects.
055: */
056: protected Map mGraph;
057:
058: /**
059: * The handle to the internal logging object.
060: */
061: protected LogManager mLogger;
062:
063: /**
064: * The object holding all the properties pertaining to Pegasus.
065: */
066: protected PegasusProperties mProps;
067:
068: /**
069: * The overloaded constructor.
070: *
071: * @param root the dummy root node of the graph.
072: * @param graph the map containing all the nodes of the graph keyed by
073: * the logical id of the nodes.
074: * @param properties the properties passed out to the planner.
075: */
076: public Partitioner(GraphNode root, Map graph,
077: PegasusProperties properties) {
078: mRoot = root;
079: mGraph = graph;
080: mLogger = LogManager.getInstance();
081: mProps = properties;
082: //set a default name to the partition dax
083: //mPDAXWriter = null;
084:
085: }
086:
087: /**
088: * The main function that ends up traversing the graph structure corrsponding
089: * to the dax and creates the smaller dax files(one dax file per partition)
090: * and the .pdax file that illustrates the partition graph. It is recommended
091: * that the implementing classes use the already initialized handles to the
092: * DAXWriter and PDAXWriter interfaces to write out the xml files. The
093: * advantage of using these preinitialized handles is that they already
094: * are correctly configured for the directories where Pegasus expects the
095: * submit files and dax files to reside.
096: *
097: *
098: * @param c the callback object that the partitioner calls out to.
099: */
100: public abstract void determinePartitions(Callback c);
101:
102: /**
103: * Returns a textual description of the transfer implementation.
104: *
105: * @return a short textual description
106: */
107: public abstract String description();
108:
109: }
|