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.partitioner;
015:
016: import org.griphyn.cPlanner.cluster.Clusterer;
017: import org.griphyn.cPlanner.cluster.ClustererException;
018:
019: import org.griphyn.cPlanner.common.PegasusProperties;
020:
021: import java.util.List;
022:
023: /**
024: * A Callback implementation that passes the partitions detected during the
025: * partitioning of the worflow to a Clusterer for clustering. The clusterer
026: * is passed off to the callback during the callback initialization.
027: *
028: * @author Karan Vahi
029: * @version $Revision: 50 $
030: */
031:
032: public class ClustererCallback implements Callback {
033:
034: /**
035: * The handle to the clusterer that does the clustering.
036: */
037: private Clusterer mClusterer;
038:
039: /**
040: * The handle to the properties object.
041: */
042: private PegasusProperties mProps;
043:
044: /**
045: * The default constructor.
046: */
047: public ClustererCallback() {
048:
049: }
050:
051: /**
052: * Initializes the callback.
053: *
054: * @param properties the properties passed to the planner.
055: * @param clusterer the clusterer that has to be called out, in the callback
056: * methods.
057: */
058: public void initialize(PegasusProperties properties,
059: Clusterer clusterer) {
060: mProps = properties;
061: mClusterer = clusterer;
062: }
063:
064: /**
065: * Callback for when a partitioner determines that partition has been
066: * constructed. The partition is passed off to the clusterer that the
067: * callback has been initialized with.
068: *
069: * @param p the constructed partition.
070: *
071: * @throws RuntimeException in case of callback not being initialized, or
072: * a ClustererException being thrown during the Clusterer operation.
073: */
074: public void cbPartition(Partition p) {
075:
076: //sanity check
077: if (mClusterer == null) {
078: throw new RuntimeException(
079: "Callback needs to be initialized before being used");
080: }
081:
082: //shallow wrap of exception for time being
083: try {
084: mClusterer.determineClusters(p);
085: } catch (ClustererException e) {
086: throw new RuntimeException(
087: "ClustererCallback cbPartition( Partition ) ", e);
088: }
089: }
090:
091: /**
092: * Callback for when a partitioner determines the relations between partitions
093: * that it has previously constructed.
094: *
095: * @param child the id of a partition.
096: * @param parents the list of <code>String</code> objects that contain
097: * the id's of the parents of the partition.
098: *
099: *
100: * @throws RuntimeException in case of callback not being initialized, or
101: * a ClustererException being thrown during the Clusterer operation.
102: */
103: public void cbParents(String child, List parents) {
104: //sanity check
105: if (mClusterer == null) {
106: throw new RuntimeException(
107: "Callback needs to be initialized before being used");
108: }
109:
110: //shallow wrap of exception for time being
111: try {
112: mClusterer.parents(child, parents);
113: } catch (ClustererException e) {
114: throw new RuntimeException(
115: "ClustererCallback cbParents( String, List ) ", e);
116: }
117:
118: }
119:
120: /**
121: * Callback for the partitioner to signal that it is done with the processing.
122: *
123: *
124: */
125: public void cbDone() {
126:
127: }
128:
129: }
|