/* * This file or a portion of this file is licensed under the terms of * the Globus Toolkit Public License, found in file ../GTPL, or at * http://www.globus.org/toolkit/download/license.html. This notice must * appear in redistributions of this file, with or without modification. * * Redistributions of this Software, with or without modification, must * reproduce the GTPL in: (1) the Software, or (2) the Documentation or * some other similar material which is provided with the Software (if * any). * * Copyright 1999-2004 University of Chicago and The University of * Southern California. All rights reserved. */ package org.griphyn.vdl.classes; import java.util.Enumeration; import java.util.List; /** * This interface defines a common base for {@link Derivation} and * {@link Call}. The latter is in a sense an anonymous DV. * * @author Jens-S. Vöckler * @author Yong Zhao * @version $Revision$ */ public interface HasPass { /** * Accessor: Adds an actual argument to the bag of arguments. * * @param vPass is the new actual argument to add. * @see Pass */ public void addPass( Pass vPass ) throws NullPointerException; /** * Accessor: Provides an iterator for the bag of actual arguments. * @return the iterator for <code>Pass</code> elements. * @see Pass * @see java.util.Enumeration */ public Enumeration enumeratePass(); /** * Determines all LFN instances from the actual arguments of a given * derivation that match the specified linkage. This is a higher-level * method employing the given interface. Note that also linkage of * NONE will not be found in wildcard search mode. * * @param linkage is the linkage type to match against, -1 for all * files. * @return a list of logical filenames from the given derivation which * match the given linkage. For a linkage of -1, complete LFNs will be * returned, for any other linkage, just the filename will be returned. * * @see Value#getLFNList( int ) * @see LFN */ public java.util.List getLFNList( int linkage ); /** * Determines if the list contains an LFN of the specified linkage. * The logic uses short-circuit evaluation, thus finding things is * faster than not finding things. Searching a list is a potentially * expensive method. * * @param filename is the name of the LFN * @param linkage is the linkage to check for, -1 for any linkage type. * @return true if the LFN is contained in the scalar, false otherwise. * * @see Value#containsLFN( String, int ) * @see LFN */ public boolean containsLFN( String filename, int linkage ); /** * Accessor: Obtains an actual argument identified by the bound variable. * * @param name is the binding name. * @return the bound value to the given name. * @see Pass */ public Pass getPass(String name); /** * Accessor: Obtains the bag of actual arguments as array. Note that the * order is arbitrary. * * @return an array containing all bound variables. * @see Pass */ public Pass[] getPass(); /** * Accessor: Counts the number of actual arguments. * * @return the number of actual arguments in the internal bag. */ public int getPassCount(); /** * Accessor: Removes all actual arguments. Effectively empties the bag. */ public void removeAllPass(); /** * Accessor: Removes a specific actual argument. * * @param name is the bound variable name of the argument to remove. * @return the object that was removed, or null, if not found. * @see Pass */ public Pass removePass( String name ); /** * Accessor: Adds a new or overwrites an existing actual argument. * * @param vPass is a new actual argument with bound name and value. * @see Pass */ public void setPass(Pass vPass); /** * Accessor: Replaces the bag of actual argument with new arguments. * * @param passArray is the new actual argument list. * @see Pass */ public void setPass(Pass[] passArray); /** * Accessor: Obtains the name of the logical {@link Transformation} * that this derivation refers to. */ public java.lang.String getUses(); /** * Accessor: Obtains the namespace of the logical {@link Transformation} * that this derivation refers to. */ public java.lang.String getUsesspace(); /** * Accessor: Obtains the maximum inclusive version permissable for * binding to a {@link Transformation}. * * @return the maximum inclusive version number. */ public String getMaxIncludeVersion(); /** * Accessor: Obtains the minimum inclusive version permissable for * binding to a {@link Transformation}. * * @return the minimum inclusive version number. */ public String getMinIncludeVersion(); /** * Identify the transformation or derivation by its name. */ public String identify(); /** * Constructs dynamically a short descriptive, hopefully unique * identifier for this derivation w/o referring to any transformation. * FIXME: Anonymous derivations get their hash code, which is well * for the first versions working without database. Later versions * with database must use some unique sequence mechanism instead. * * @return a string describing the derivation * @see Object#hashCode() */ public String shortID(); }