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]

Reply via email to