Author: imario
Date: Sun Nov 12 01:09:12 2006
New Revision: 473909
URL: http://svn.apache.org/viewvc?view=rev&rev=473909
Log:
fixed: providers.xml to point to our local compress
fixed: implemented InputStream.available() where missing
finished: implementation of SharedRandomContentInputStream
finished: use SharedRandomContentInputStream for resource conserving parsing of
mails
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/impl/providers.xml
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/bzip2/CBZip2InputStream.java
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ram/RamFileRandomAccessContent.java
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/impl/providers.xml
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/impl/providers.xml?view=diff&rev=473909&r1=473908&r2=473909
==============================================================================
---
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/impl/providers.xml
(original)
+++
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/impl/providers.xml
Sun Nov 12 01:09:12 2006
@@ -9,12 +9,12 @@
</provider>
<provider class-name="org.apache.commons.vfs.provider.tar.TarFileProvider">
<scheme name="tar"/>
- <if-available
class-name="org.apache.commons.compress.tar.TarInputStream"/>
+ <if-available
class-name="org.apache.commons.vfs.provider.tar.TarInputStream"/>
</provider>
<provider
class-name="org.apache.commons.vfs.provider.bzip2.Bzip2FileProvider">
<scheme name="bz2"/>
- <if-available
class-name="org.apache.commons.compress.bzip2.CBZip2InputStream"/>
+ <if-available
class-name="org.apache.commons.vfs.provider.bzip2.CBZip2InputStream"/>
</provider>
<provider
class-name="org.apache.commons.vfs.provider.gzip.GzipFileProvider">
<scheme name="gz"/>
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/bzip2/CBZip2InputStream.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/bzip2/CBZip2InputStream.java?view=diff&rev=473909&r1=473908&r2=473909
==============================================================================
---
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/bzip2/CBZip2InputStream.java
(original)
+++
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/bzip2/CBZip2InputStream.java
Sun Nov 12 01:09:12 2006
@@ -141,7 +141,22 @@
cadvise();
}
- public int read()
+ /**
+ * a fake <code>available</code> which always returns 1 as long as the
stream is not at end.
+ * This is required to make this stream work if wrapped in an
BufferedInputStream.
+ *
+ * @author [EMAIL PROTECTED]
+ */
+ public int available() throws IOException
+ {
+ if (!m_streamEnd)
+ {
+ return 1;
+ }
+ return 0;
+ }
+
+ public int read()
{
if( m_streamEnd )
{
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java?view=diff&rev=473909&r1=473908&r2=473909
==============================================================================
---
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java
(original)
+++
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java
Sun Nov 12 01:09:12 2006
@@ -89,7 +89,18 @@
{
return raf.read(b, off, len);
}
- };
+
+ public int available() throws IOException
+ {
+ long available = raf.length() -
raf.getFilePointer();
+ if (available > Integer.MAX_VALUE)
+ {
+ return Integer.MAX_VALUE;
+ }
+
+ return (int) available;
+ }
+ };
}
catch (FileNotFoundException e)
{
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ram/RamFileRandomAccessContent.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ram/RamFileRandomAccessContent.java?view=diff&rev=473909&r1=473908&r2=473909
==============================================================================
---
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ram/RamFileRandomAccessContent.java
(original)
+++
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ram/RamFileRandomAccessContent.java
Sun Nov 12 01:09:12 2006
@@ -114,7 +114,14 @@
public int read(byte b[], int off, int len) throws
IOException
{
- return read(b, off, len);
+ int retLen = Math.min(len, getLeftBytes());
+ RamFileRandomAccessContent.this.readFully(b,
off, retLen);
+ return retLen;
+ }
+
+ public int available() throws IOException
+ {
+ return getLeftBytes();
}
};
}
Modified:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java?view=diff&rev=473909&r1=473908&r2=473909
==============================================================================
(empty)
Modified:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java?view=diff&rev=473909&r1=473908&r2=473909
==============================================================================
---
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java
(original)
+++
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java
Sun Nov 12 01:09:12 2006
@@ -82,6 +82,17 @@
{
return raf.read(b, off, len);
}
+
+ public int available() throws IOException
+ {
+ long available = raf.length() -
raf.getFilePointer();
+ if (available > Integer.MAX_VALUE)
+ {
+ return Integer.MAX_VALUE;
+ }
+
+ return (int) available;
+ }
};
}
catch (MalformedURLException e)
Modified:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java?view=diff&rev=473909&r1=473908&r2=473909
==============================================================================
---
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java
(original)
+++
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java
Sun Nov 12 01:09:12 2006
@@ -35,13 +35,12 @@
{
private final FileObject fo;
private final long fileStart;
- private final long start;
- private final long end;
-
+ private final long fileEnd;
+
private long pos;
private long resetCount;
- private SharedRandomContentInputStream(final FileObject fo, final long
fileStart, final long start, final long end, final InputStream is) throws
FileSystemException
+ private SharedRandomContentInputStream(final FileObject fo, final long
fileStart, final long fileEnd, final InputStream is) throws FileSystemException
{
super(is);
@@ -52,13 +51,12 @@
this.fo = fo;
this.fileStart = fileStart;
- this.start = start;
- this.end = end;
+ this.fileEnd = fileEnd;
}
public SharedRandomContentInputStream(final FileObject fo) throws
FileSystemException
{
- this(fo, 0, 0, -1, fo.getContent().getInputStream());
+ this(fo, 0, -1, fo.getContent().getInputStream());
}
@@ -81,6 +79,12 @@
return -1;
}
+ if (fileEnd > -1 && calcFilePosition(len) > fileEnd)
+ {
+ // we can not read past our end
+ len = (int) (fileEnd - getFilePosition());
+ }
+
int nread = super.read(b, off, len);
pos+=nread;
resetCount+=nread;
@@ -94,15 +98,55 @@
return -1;
}
+ if (fileEnd > -1 && calcFilePosition(n) > fileEnd)
+ {
+ // we can not skip past our end
+ n = fileEnd - getFilePosition();
+ }
+
long nskip = super.skip(n);
pos+=nskip;
resetCount+=nskip;
return nskip;
}
+ /*
+ public synchronized int available() throws IOException
+ {
+ long realFileEnd = fileEnd;
+ if (realFileEnd < 0)
+ {
+ realFileEnd = fo.getContent().getSize();
+ }
+ if (realFileEnd < 0)
+ {
+ // we cant determine if there is really something
available
+ return 8192;
+ }
+
+ long available = realFileEnd - (fileStart + pos);
+ if (available > Integer.MAX_VALUE)
+ {
+ return Integer.MAX_VALUE;
+ }
+
+ return (int) available;
+ }
+ */
+
private boolean checkEnd()
{
- return end > -1 && (start + pos) >= end;
+ return fileEnd > -1 && (getFilePosition() >= fileEnd);
+ }
+
+ protected long getFilePosition()
+ {
+ return fileStart + pos;
+ }
+
+ protected long calcFilePosition(long nadd)
+ {
+ return getFilePosition()+nadd;
}
public synchronized void mark(int readlimit)
@@ -127,9 +171,16 @@
{
try
{
+ long newFileStart = this.fileStart+start;
+ long newFileEnd = end<0?this.fileEnd:this.fileStart+end;
+
RandomAccessContent rac =
fo.getContent().getRandomAccessContent(RandomAccessMode.READ);
- rac.seek(this.fileStart+start);
- return new SharedRandomContentInputStream(fo,
this.fileStart+start, start, end, rac.getInputStream());
+ rac.seek(newFileStart);
+ return new SharedRandomContentInputStream(
+ fo,
+ newFileStart,
+ newFileEnd,
+ rac.getInputStream());
}
catch (IOException e)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]