/** * 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.classes; import edu.isi.pegasus.common.util.Separator; import edu.isi.pegasus.planner.dax.Invoke; import java.util.Collection; import java.util.List; import java.util.LinkedList; /** * * A data class to contain compound transformations. * * @author Karan Vahi * @version $Revision$ */ public class CompoundTransformation { /** * The namespace of the compound transformation. */ protected String mNamespace; /** * The name of the tranformation. */ protected String mName; /** * The version */ protected String mVersion; /** * The list of dependant executables */ protected List<PegasusFile> mUses; /** * All the notifications associated with the job */ protected Notifications mNotifications; /** * Constructor * * @param name of transformation */ public CompoundTransformation(String name) { this("", name, ""); } /** * Overloaded Constructor * * @param namespace namespace * @param name name * @param version version */ public CompoundTransformation(String namespace, String name, String version) { mNamespace = (namespace == null) ? "" : namespace; mName = (name == null) ? "" : name; mVersion = (version == null) ? "" : version; mUses = new LinkedList<PegasusFile>(); mNotifications = new Notifications(); } /** * Returns name of compound transformation. * * @return name */ public String getName() { return mName; } /** * Returns the namespace * * @return namespace */ public String getNamespace() { return mNamespace; } /** * Returns the version * * @return version */ public String getVersion() { return mVersion; } /** * Adds a dependant file. * * @param pf */ public void addDependantFile( PegasusFile pf ){ this.mUses.add( pf ); } /** * Returns the List of dependant files * * @return List of Dependant Files */ public List<PegasusFile> getDependantFiles() { return this.mUses; } /** * Adds a Invoke object correpsonding to a notification. * * @param invoke the invoke object containing the notification */ public void addNotification( Invoke invoke ){ this.mNotifications.add(invoke); } /** * Adds all the notifications passed to the underlying container. * * @param invokes the notifications to be added */ public void addNotifications( Notifications invokes ){ this.mNotifications.addAll(invokes); } /** * Returns a collection of all the notifications that need to be * done for a particular condition * * @param when the condition * * @return */ public Collection<Invoke> getNotifications( Invoke.WHEN when ){ return this.mNotifications.getNotifications(when); } /** * Returns all the notifications associated with the job. * * @return the notifications */ public Notifications getNotifications( ){ return this.mNotifications; } /** * Returns whether two objects are equal or not on the basis of the * complete name of the transformation. * * @param obj the reference object with which to compare. * * @return true, if the primary keys match, false otherwise. */ public boolean equals( Object obj ){ // ward against null if ( obj == null ) return false; // shortcut if ( obj == this ) return true; // compare similar objects only if ( ! (obj instanceof CompoundTransformation) ) return false; // now we can safely cast CompoundTransformation c = (CompoundTransformation) obj; return this.getCompleteName().equals( c.getCompleteName() ); } /** * Calculate a hash code value for the object to support hash tables. * The hashcode value is computed only on basis of namespace, name and version * fields * * @return a hash code value for the object. */ public int hashCode(){ return this.getCompleteName().hashCode(); } /** * Returns the complete name for the transformation. * * @return the complete name */ public String getCompleteName(){ return Separator.combine(mNamespace, mName, mVersion); } /** * Converts object to String * * @return the textual description */ public String toString(){ StringBuffer sb = new StringBuffer(); sb.append( "Transformation -> " ).append( this.getCompleteName() ).append( "\n" ); for( PegasusFile pf : this.getDependantFiles() ){ sb.append( "\t " ); sb.append( pf.getType() == PegasusFile.DATA_FILE ? "data" : "executable" ). append( " -> ").append( pf ). append( "\n" ); } sb.append( "Notifications -> " ).append( "\n" ). append( this.getNotifications() ); return sb.toString(); } }