/**
* 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.parser.dax;
import edu.isi.pegasus.planner.classes.Job;
import edu.isi.pegasus.planner.partitioner.graph.Bag;
import edu.isi.pegasus.planner.partitioner.graph.LabelBag;
import edu.isi.pegasus.planner.partitioner.graph.GraphNode;
import edu.isi.pegasus.planner.common.PegasusProperties;
import edu.isi.pegasus.common.logging.LogManager;
import edu.isi.pegasus.planner.classes.PegasusBag;
/**
* The callback, that ends up building a label graph. With each GraphNode a label
* is associated. The label can be associated via a profile in the VDS namespace
* with the jobs in the DAX. The key for the profile can either be set via the
* constructor, or a default key is used.
*
* @author Karan Vahi
* @version $Revision$
*/
public class DAX2LabelGraph extends DAX2Graph {
/**
* The default key for the VDS namespace profile, that is used in case none
* is specified by the user.
*/
public static final String DEFAULT_LABEL_KEY = "label";
/**
* The default label value that is to be applied, in case the profile is
* not associated with the job.
*/
//public static String DEFAULT_LABEL_VALUE = "default";
/**
* The profile key that is used for the labelling.
*/
private String mLabelKey;
/**
* Sets the default label value that is to be used if the profile is not
* associated with the job.
*
* @param value the value to be associated.
*/
// public static void setLabelValue(String value){
// DEFAULT_LABEL_VALUE = value;
// }
/**
* The overloaded constructor.
*
* @param bag the bag of initialization objects containing the properties
* and the logger
* @param dax the path to the DAX file.
*/
public void initialize( PegasusBag bag, String dax ){
super.initialize( bag, dax );
this.setLabelKey( DEFAULT_LABEL_KEY );
}
/**
* Set the profile key that is to be used to pick up the labels.
* Sets the profile key to the value specified. If value passed is
* null, then is set to the default label key.
*
* @param key the VDS profile key that is to be used.
*
* @see #DEFAULT_LABEL_KEY
*/
public void setLabelKey( String key ){
mLabelKey = ( key == null )? this.DEFAULT_LABEL_KEY : key;
LabelBag.setLabelKey(mLabelKey);
}
/**
* This constructs a graph node for the job and ends up storing it in the
* internal map. In addition assigns a label with the node. The label is
* is the value of a profile in the VDS namespace. The name of the profile
* can
*
* @param job the job that was parsed.
*/
public void cbJob(Job job) {
mLogger.log( "Adding job to graph " + job.getName() ,
LogManager.DEBUG_MESSAGE_LEVEL );
GraphNode gn = new GraphNode(job.logicalId,job.logicalName);
String label = (String)job.vdsNS.get(mLabelKey);
// label = (label == null)? DEFAULT_LABEL_VALUE : label;
Bag bag = new LabelBag();
bag.add(mLabelKey,label);
gn.setBag(bag);
put(job.logicalId,gn);
}
/**
* Callback to signal that traversal of the DAX is complete. At this point a
* dummy root node is added to the graph, that is the parents to all the root
* nodes in the existing DAX. This method in additions adds the default label
* to the root.
*/
public void cbDone() {
super.cbDone();
Bag bag = new LabelBag();
// bag.add(mLabelKey,DEFAULT_LABEL_VALUE);
mRoot.setBag(bag);
}
}