001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.commons.vfs.util;
018:
019: import org.apache.commons.vfs.RandomAccessContent;
020:
021: import java.io.IOException;
022: import java.io.InputStream;
023:
024: /**
025: * An RandomAccessContent that provides end-of-stream monitoring.
026: *
027: * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
028: * @version $Revision: 480428 $ $Date: 2006-11-28 22:15:24 -0800 (Tue, 28 Nov 2006) $
029: */
030: public class MonitorRandomAccessContent implements RandomAccessContent {
031: private final RandomAccessContent content;
032: private boolean finished;
033:
034: public MonitorRandomAccessContent(final RandomAccessContent content) {
035: this .content = content;
036: }
037:
038: /**
039: * Called after this stream is closed. This implementation does nothing.
040: */
041: protected void onClose() throws IOException {
042: }
043:
044: /**
045: * Closes this content.
046: */
047: public void close() throws IOException {
048: if (finished) {
049: return;
050: }
051:
052: // Close the output stream
053: IOException exc = null;
054: try {
055: content.close();
056: } catch (final IOException ioe) {
057: exc = ioe;
058: }
059:
060: // Notify of end of output
061: exc = null;
062: try {
063: onClose();
064: } catch (final IOException ioe) {
065: exc = ioe;
066: }
067:
068: finished = true;
069:
070: if (exc != null) {
071: throw exc;
072: }
073: }
074:
075: public long getFilePointer() throws IOException {
076: return content.getFilePointer();
077: }
078:
079: public void seek(long pos) throws IOException {
080: content.seek(pos);
081: }
082:
083: public long length() throws IOException {
084: return content.length();
085: }
086:
087: public void write(int b) throws IOException {
088: content.write(b);
089: }
090:
091: public void write(byte[] b) throws IOException {
092: content.write(b);
093: }
094:
095: public void write(byte[] b, int off, int len) throws IOException {
096: content.write(b, off, len);
097: }
098:
099: public void writeBoolean(boolean v) throws IOException {
100: content.writeBoolean(v);
101: }
102:
103: public void writeByte(int v) throws IOException {
104: content.writeByte(v);
105: }
106:
107: public void writeShort(int v) throws IOException {
108: content.writeShort(v);
109: }
110:
111: public void writeChar(int v) throws IOException {
112: content.writeChar(v);
113: }
114:
115: public void writeInt(int v) throws IOException {
116: content.writeInt(v);
117: }
118:
119: public void writeLong(long v) throws IOException {
120: content.writeLong(v);
121: }
122:
123: public void writeFloat(float v) throws IOException {
124: content.writeFloat(v);
125: }
126:
127: public void writeDouble(double v) throws IOException {
128: content.writeDouble(v);
129: }
130:
131: public void writeBytes(String s) throws IOException {
132: content.writeBytes(s);
133: }
134:
135: public void writeChars(String s) throws IOException {
136: content.writeChars(s);
137: }
138:
139: public void writeUTF(String str) throws IOException {
140: content.writeUTF(str);
141: }
142:
143: public void readFully(byte[] b) throws IOException {
144: content.readFully(b);
145: }
146:
147: public void readFully(byte[] b, int off, int len)
148: throws IOException {
149: content.readFully(b, off, len);
150: }
151:
152: public int skipBytes(int n) throws IOException {
153: return content.skipBytes(n);
154: }
155:
156: public boolean readBoolean() throws IOException {
157: return content.readBoolean();
158: }
159:
160: public byte readByte() throws IOException {
161: return content.readByte();
162: }
163:
164: public int readUnsignedByte() throws IOException {
165: return content.readUnsignedByte();
166: }
167:
168: public short readShort() throws IOException {
169: return content.readShort();
170: }
171:
172: public int readUnsignedShort() throws IOException {
173: return content.readUnsignedShort();
174: }
175:
176: public char readChar() throws IOException {
177: return content.readChar();
178: }
179:
180: public int readInt() throws IOException {
181: return content.readInt();
182: }
183:
184: public long readLong() throws IOException {
185: return content.readLong();
186: }
187:
188: public float readFloat() throws IOException {
189: return content.readFloat();
190: }
191:
192: public double readDouble() throws IOException {
193: return content.readDouble();
194: }
195:
196: public String readLine() throws IOException {
197: return content.readLine();
198: }
199:
200: public String readUTF() throws IOException {
201: return content.readUTF();
202: }
203:
204: public InputStream getInputStream() throws IOException {
205: return content.getInputStream();
206: }
207: }
|