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 is the container for a FIFO object. A FIFO, also known as
023: * named pipe, does not consume space on the filesystem except for an
024: * inode.
025: *
026: * @author Jens-S. Vöckler
027: * @author Yong Zhao
028: * @version $Revision: 50 $
029: */
030: public class Fifo extends Temporary {
031: /**
032: * optional message count for the FIFO.
033: */
034: protected int m_count;
035:
036: /**
037: * optional number of bytes read from FIFO.
038: */
039: protected long m_rsize;
040:
041: /**
042: * optional number of bytes written - but not to the FIFO. This
043: * has to do with the message size that was created from the
044: * original input message.
045: */
046: protected long m_wsize;
047:
048: /**
049: * Default c'tor: Construct a hollow shell and allow further
050: * information to be added later.
051: */
052: public Fifo() {
053: super ();
054: m_count = 0;
055: m_rsize = m_wsize = 0;
056: }
057:
058: /**
059: * Constructs a FIFO object.
060: * @param filename is the name of the file that stat was invoked
061: * @param descriptor is a valid file descriptor number.
062: */
063: public Fifo(String filename, int descriptor) {
064: super (filename, descriptor);
065: m_count = 0;
066: m_rsize = m_wsize = 0;
067: }
068:
069: /**
070: * Accessor
071: *
072: * @see #setCount(int)
073: */
074: public int getCount() {
075: return this .m_count;
076: }
077:
078: /**
079: * Accessor.
080: *
081: * @param count
082: * @see #getCount()
083: */
084: public void setCount(int count) {
085: this .m_count = count;
086: }
087:
088: /**
089: * Accessor
090: *
091: * @see #setInputSize(long)
092: */
093: public long getInputSize() {
094: return this .m_rsize;
095: }
096:
097: /**
098: * Accessor.
099: *
100: * @param rsize
101: * @see #getInputSize()
102: */
103: public void setInputSize(long rsize) {
104: this .m_rsize = rsize;
105: }
106:
107: /**
108: * Accessor
109: *
110: * @see #setOutputSize(long)
111: */
112: public long getOutputSize() {
113: return this .m_wsize;
114: }
115:
116: /**
117: * Accessor.
118: *
119: * @param wsize
120: * @see #getOutputSize()
121: */
122: public void setOutputSize(long wsize) {
123: this .m_wsize = wsize;
124: }
125:
126: /**
127: * Dump the state of the current element as XML output. This function
128: * traverses all sibling classes as necessary, and converts the data
129: * into pretty-printed XML output. The stream interface should be able
130: * to handle large output efficiently.
131: *
132: * @param stream is a stream opened and ready for writing. This can also
133: * be a string stream for efficient output.
134: * @param indent is a <code>String</code> of spaces used for pretty
135: * printing. The initial amount of spaces should be an empty string.
136: * The parameter is used internally for the recursive traversal.
137: * If a <code>null</code> value is specified, no indentation nor
138: * linefeeds will be generated.
139: * @param namespace is the XML schema namespace prefix. If neither
140: * empty nor null, each element will be prefixed with this prefix,
141: * and the root element will map the XML namespace.
142: * @exception IOException if something fishy happens to the stream.
143: */
144: public void toXML(Writer stream, String indent, String namespace)
145: throws IOException {
146: String tag = (namespace != null && namespace.length() > 0) ? namespace
147: + ":fifo"
148: : "fifo";
149:
150: // open tag
151: if (indent != null && indent.length() > 0)
152: stream.write(indent);
153: stream.write('<');
154: stream.write(tag);
155: writeAttribute(stream, " name=\"", m_filename);
156: writeAttribute(stream, " descriptor=\"", Integer
157: .toString(m_descriptor));
158: writeAttribute(stream, " count=\"", Integer.toString(m_count));
159: writeAttribute(stream, " rsize=\"", Long.toString(m_rsize));
160: writeAttribute(stream, " wsize=\"", Long.toString(m_wsize));
161:
162: if (m_hexbyte != null && m_hexbyte.length() > 0) {
163: // yes, content
164: stream.write('>');
165: stream.write(m_hexbyte);
166: stream.write("</");
167: stream.write(tag);
168: stream.write('>');
169: } else {
170: // no content
171: stream.write("/>");
172: }
173:
174: if (indent != null)
175: stream.write(System.getProperty("line.separator", "\r\n"));
176: }
177: }
|