/* * 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 org.griphyn.vdl.classes.*; import java.util.*; import java.io.Serializable; /** * This class is the base class for {@link Scalar} and {@link List} * child classes. * * @author Jens-S. Vöckler * @author Yong Zhao * @version $Revision$ */ public abstract class Value extends VDL implements Cloneable, Serializable { /** * @deprecated This is the name for a value element. Originally we * thought to employ this value, but it is currently unused. */ private String m_name; /** * Denotes a scalar component, which is always a leaf. * * @see #getContainerType() * @see Scalar#getContainerType() */ public static final int SCALAR = 0; /** * Denotes a list component. * * @see #getContainerType() * @see List#getContainerType() */ public static final int LIST = 1; /** * This method determines which container is being used in the abstract * base class in order to avoid <code>typeof</code> constructs. * * @return either the constant to designate a <code>Scalar</code>, or * a constant to designate a <code>List</code>. * * @see #SCALAR * @see #LIST */ abstract public int getContainerType(); /** * This method determines which container is being used in the abstract * base class in order to kludgy statements when printing debug info. * * @return the symblic identifier for the type of the Value. */ abstract public String getSymbolicType(); /** * Creates and returns a copy of this object. * @return a new instance. */ public abstract Object clone(); /** * Determines all LFN instances of a given scalar that match the * specified linkage. This is a higher-level method employing the * given API. * * @param linkage is the linkage to check for, -1 for all filenames. * @return a set of logical filename instances that match the linkage * and were part of the scalar. The result may be an empty set, if no * such result were to be found. * * @see LFN */ abstract public java.util.List getAllLFN( int linkage ); /** * Determines all LFN instances of a given scalar that match the * specified linkage. This is a higher-level method employing the * given API. Note that also linkage of NONE will not be found in * wildcard search mode. * * @param linkage is the linkage to check for, -1 for all filenames. * @return a set of all logical filenames that match the linkage and * were part of the scalar. The result may be an empty set, if no such * result were to be found. For a linkage of -1, complete LFNs will be * returned, for any other linkage, just the filename will be * returned. * * @see Derivation#getLFNList( int ) * @see LFN */ abstract public java.util.List getLFNList( int linkage ); /** * Determines if the Value 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 org.griphyn.vdl.classes.LFN * @see Derivation#containsLFN( String, int ) */ abstract public boolean containsLFN( String filename, int linkage ); /** * Predicate function to determine, if a container type is within * the legal range of values. * * @param x is the container type * @return true, if the type is within the legal range, or * false, if the container type is outside legal range. * * @see #SCALAR * @see #LIST */ public static boolean isInRange( int x ) { return ((x >= Value.SCALAR) && (x <= Value.LIST)); } /** * Default ctor. */ public Value() { // empty } /** * Accessor method. Obtains the current state of the thus named attribute. * * @return the current state of the m_name attribute. * @see #setName(String) * @deprecated the attribute is currently unused. */ public String getName() { return this.m_name; } /** * Accessor method. Sets the attribute of same name to a new value. * * @param name is the new value to overwrite the current state with. * @see #getName() * @deprecated the name attribute is currently unused. */ public void setName( String name ) { this.m_name = name; } }