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: package org.griphyn.vdl.invocation;
016:
017: import java.util.*;
018: import java.io.Writer;
019: import java.io.IOException;
020:
021: /**
022: * This class carries an argument vector entry for the argument vector.
023: * This calls is expected to be transient to the parsing process only.
024: *
025: * @author Jens-S. Vöckler
026: * @author Yong Zhao
027: * @version $Revision: 50 $
028: */
029: public class ArgEntry extends Invocation implements HasText {
030: /**
031: * argument vector position
032: */
033: private int m_position;
034:
035: /**
036: * argument vector value
037: */
038: private StringBuffer m_value;
039:
040: /**
041: * Default c'tor: Construct a hollow shell and allow further
042: * information to be added later.
043: */
044: public ArgEntry() {
045: m_position = -1;
046: m_value = null;
047: }
048:
049: /**
050: * C'tor: Prepares a given key for accepting a value later on.
051: * @param position is the location to use.
052: */
053: public ArgEntry(int position) {
054: m_position = position;
055: m_value = null;
056: }
057:
058: /**
059: * C'tor: Fully initializes the class
060: * @param position is the location to use.
061: * @param value is the value to remember
062: */
063: public ArgEntry(int position, String value) {
064: m_position = position;
065: m_value = new StringBuffer(value);
066: }
067:
068: /**
069: * Appends a piece of text to the existing text.
070: * @param fragment is a piece of text to append to existing text.
071: * Appending <code>null</code> is a noop.
072: */
073: public void appendValue(String fragment) {
074: if (fragment != null) {
075: if (this .m_value == null)
076: this .m_value = new StringBuffer(fragment);
077: else
078: this .m_value.append(fragment);
079: }
080: }
081:
082: /**
083: * Accessor
084: * @return the position of this entry in the argument vector.
085: * @see #setPosition(int)
086: */
087: public int getPosition() {
088: return this .m_position;
089: }
090:
091: /**
092: * Accessor.
093: *
094: * @param position
095: * @see #getPosition()
096: */
097: public void setPosition(int position) {
098: this .m_position = position;
099: }
100:
101: /**
102: * Accessor
103: *
104: * @see #setValue(String)
105: */
106: public String getValue() {
107: return (m_value == null ? null : m_value.toString());
108: }
109:
110: /**
111: * Accessor.
112: *
113: * @param value is the new value to set.
114: * @see #getValue()
115: */
116: public void setValue(String value) {
117: this .m_value = (value == null ? null : new StringBuffer(value));
118: }
119:
120: /**
121: * Converts the active state into something meant for human consumption.
122: * The method will be called when recursively traversing the instance
123: * tree.
124: *
125: * @param stream is a stream opened and ready for writing. This can also
126: * be a string stream for efficient output.
127: */
128: public void toString(Writer stream) throws IOException {
129: stream.write('[');
130: stream.write(m_position);
131: stream.write("]=");
132: stream.write(getValue());
133: }
134:
135: /**
136: * Dumps the state of the current element as XML output. However, for
137: * the given instance, this class is ludicrious.
138: *
139: * @param stream is a stream opened and ready for writing. This can also
140: * be a string stream for efficient output.
141: * @param indent is a <code>String</code> of spaces used for pretty
142: * printing. The initial amount of spaces should be an empty string.
143: * The parameter is used internally for the recursive traversal.
144: * @param namespace is the XML schema namespace prefix. If neither
145: * empty nor null, each element will be prefixed with this prefix,
146: * and the root element will map the XML namespace.
147: * @exception IOException if something fishy happens to the stream.
148: */
149: public void toXML(Writer stream, String indent, String namespace)
150: throws IOException {
151: String tag = (namespace != null && namespace.length() > 0) ? namespace
152: + ":arg"
153: : "arg";
154:
155: // open tag
156: if (indent != null && indent.length() > 0)
157: stream.write(indent);
158: stream.write('<');
159: stream.write(tag);
160: writeAttribute(stream, " id=\"", Integer.toString(m_position));
161: stream.write('>');
162:
163: stream.write(quote(getValue(), false));
164:
165: stream.write("</");
166: stream.write(tag);
167: stream.write('>');
168: if (indent != null)
169: stream.write(System.getProperty("line.separator", "\r\n"));
170: }
171: }
|