[jboss-cvs] JBossAS SVN: r104741 - in projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual: plugins/vfs/helpers and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed May 12 16:26:27 EDT 2010
Author: miclark
Date: 2010-05-12 16:26:26 -0400 (Wed, 12 May 2010)
New Revision: 104741
Added:
projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/vfs/helpers/LazyInputStream.java
Modified:
projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/VFSInputSource.java
Log:
JBPAPP-4240 - back ported to the 2.1 branch from trunk.
Modified: projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/VFSInputSource.java
===================================================================
--- projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/VFSInputSource.java 2010-05-12 20:19:33 UTC (rev 104740)
+++ projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/VFSInputSource.java 2010-05-12 20:26:26 UTC (rev 104741)
@@ -22,10 +22,11 @@
package org.jboss.virtual;
import java.io.InputStream;
-import java.io.IOException;
-import java.io.Reader;
import java.io.InputStreamReader;
+import java.io.Reader;
+import org.jboss.virtual.plugins.vfs.helpers.LazyInputStream;
+
import org.xml.sax.InputSource;
/**
@@ -59,16 +60,8 @@
}
@Override
- public InputStream getByteStream()
- {
- try
- {
- return file.openStream();
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
+ public InputStream getByteStream() {
+ return new LazyInputStream(file);
}
@Override
Added: projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/vfs/helpers/LazyInputStream.java
===================================================================
--- projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/vfs/helpers/LazyInputStream.java (rev 0)
+++ projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/vfs/helpers/LazyInputStream.java 2010-05-12 20:26:26 UTC (rev 104741)
@@ -0,0 +1,137 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.virtual.plugins.vfs.helpers;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.jboss.virtual.VirtualFile;
+
+/**
+ * Lazy input stream.
+ *
+ * Delaying opening stream from underlying virtual file as long as possible.
+ * Won't be opened if not used at all.
+ *
+ * Synchronization is very simplistic, as it's highly unlikely
+ * there will be a lot of concurrent requests.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class LazyInputStream extends InputStream
+{
+ private VirtualFile file;
+ private InputStream stream;
+
+ public LazyInputStream(VirtualFile file)
+ {
+ if (file == null)
+ throw new IllegalArgumentException("Null file");
+ this.file = file;
+ }
+
+ /**
+ * Open stream.
+ *
+ * @return file's stream
+ * @throws IOException for any IO error
+ */
+ protected synchronized InputStream openStream() throws IOException
+ {
+ if (stream == null)
+ stream = file.openStream();
+ return stream;
+ }
+
+ @Override
+ public int read() throws IOException
+ {
+ return openStream().read();
+ }
+
+ @Override
+ public int read(byte[] b) throws IOException
+ {
+ return openStream().read(b);
+ }
+
+ @Override
+ public int read(byte[] b, int off, int len) throws IOException
+ {
+ return openStream().read(b, off, len);
+ }
+
+ @Override
+ public long skip(long n) throws IOException
+ {
+ return openStream().skip(n);
+ }
+
+ @Override
+ public int available() throws IOException
+ {
+ return openStream().available();
+ }
+
+ @Override
+ public synchronized void close() throws IOException
+ {
+ if (stream == null)
+ return;
+
+ openStream().close();
+ stream = null; // reset the stream
+ }
+
+ @Override
+ public void mark(int readlimit)
+ {
+ try
+ {
+ openStream().mark(readlimit);
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void reset() throws IOException
+ {
+ openStream().reset();
+ }
+
+ @Override
+ public boolean markSupported()
+ {
+ try
+ {
+ return openStream().markSupported();
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}
More information about the jboss-cvs-commits
mailing list