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: */
015:
016: package org.griphyn.vdl.classes;
017:
018: import org.griphyn.vdl.classes.*;
019: import java.util.*;
020: import java.io.Serializable;
021:
022: /**
023: * This class is the base class for {@link Scalar} and {@link List}
024: * child classes.
025: *
026: * @author Jens-S. Vöckler
027: * @author Yong Zhao
028: * @version $Revision: 50 $
029: */
030: public abstract class Value extends VDL implements Cloneable,
031: Serializable {
032: /**
033: * @deprecated This is the name for a value element. Originally we
034: * thought to employ this value, but it is currently unused.
035: */
036: private String m_name;
037:
038: /**
039: * Denotes a scalar component, which is always a leaf.
040: *
041: * @see #getContainerType()
042: * @see Scalar#getContainerType()
043: */
044: public static final int SCALAR = 0;
045:
046: /**
047: * Denotes a list component.
048: *
049: * @see #getContainerType()
050: * @see List#getContainerType()
051: */
052: public static final int LIST = 1;
053:
054: /**
055: * This method determines which container is being used in the abstract
056: * base class in order to avoid <code>typeof</code> constructs.
057: *
058: * @return either the constant to designate a <code>Scalar</code>, or
059: * a constant to designate a <code>List</code>.
060: *
061: * @see #SCALAR
062: * @see #LIST
063: */
064: abstract public int getContainerType();
065:
066: /**
067: * This method determines which container is being used in the abstract
068: * base class in order to kludgy statements when printing debug info.
069: *
070: * @return the symblic identifier for the type of the Value.
071: */
072: abstract public String getSymbolicType();
073:
074: /**
075: * Creates and returns a copy of this object.
076: * @return a new instance.
077: */
078: public abstract Object clone();
079:
080: /**
081: * Determines all LFN instances of a given scalar that match the
082: * specified linkage. This is a higher-level method employing the
083: * given API.
084: *
085: * @param linkage is the linkage to check for, -1 for all filenames.
086: * @return a set of logical filename instances that match the linkage
087: * and were part of the scalar. The result may be an empty set, if no
088: * such result were to be found.
089: *
090: * @see LFN
091: */
092: abstract public java.util.List getAllLFN(int linkage);
093:
094: /**
095: * Determines all LFN instances of a given scalar that match the
096: * specified linkage. This is a higher-level method employing the
097: * given API. Note that also linkage of NONE will not be found in
098: * wildcard search mode.
099: *
100: * @param linkage is the linkage to check for, -1 for all filenames.
101: * @return a set of all logical filenames that match the linkage and
102: * were part of the scalar. The result may be an empty set, if no such
103: * result were to be found. For a linkage of -1, complete LFNs will be
104: * returned, for any other linkage, just the filename will be
105: * returned.
106: *
107: * @see Derivation#getLFNList( int )
108: * @see LFN
109: */
110: abstract public java.util.List getLFNList(int linkage);
111:
112: /**
113: * Determines if the Value contains an LFN of the specified linkage.
114: * The logic uses short-circuit evaluation, thus finding things is
115: * faster than not finding things. Searching a list is a potentially
116: * expensive method.
117: *
118: * @param filename is the name of the LFN
119: * @param linkage is the linkage to check for, -1 for any linkage type.
120: * @return true if the LFN is contained in the scalar, false otherwise.
121: *
122: * @see org.griphyn.vdl.classes.LFN
123: * @see Derivation#containsLFN( String, int )
124: */
125: abstract public boolean containsLFN(String filename, int linkage);
126:
127: /**
128: * Predicate function to determine, if a container type is within
129: * the legal range of values.
130: *
131: * @param x is the container type
132: * @return true, if the type is within the legal range, or
133: * false, if the container type is outside legal range.
134: *
135: * @see #SCALAR
136: * @see #LIST
137: */
138: public static boolean isInRange(int x) {
139: return ((x >= Value.SCALAR) && (x <= Value.LIST));
140: }
141:
142: /**
143: * Default ctor.
144: */
145: public Value() {
146: // empty
147: }
148:
149: /**
150: * Accessor method. Obtains the current state of the thus named attribute.
151: *
152: * @return the current state of the m_name attribute.
153: * @see #setName(String)
154: * @deprecated the attribute is currently unused.
155: */
156: public String getName() {
157: return this .m_name;
158: }
159:
160: /**
161: * Accessor method. Sets the attribute of same name to a new value.
162: *
163: * @param name is the new value to overwrite the current state with.
164: * @see #getName()
165: * @deprecated the name attribute is currently unused.
166: */
167: public void setName(String name) {
168: this.m_name = name;
169: }
170: }
|