You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by im...@apache.org on 2005/02/16 20:25:35 UTC

svn commit: r154072 - in jakarta/commons/sandbox/vfs/trunk/src: java/org/apache/commons/vfs/ java/org/apache/commons/vfs/provider/ java/org/apache/commons/vfs/provider/ftp/ java/org/apache/commons/vfs/provider/http/ java/org/apache/commons/vfs/provider/local/ java/org/apache/commons/vfs/provider/smb/ java/org/apache/commons/vfs/util/ test/org/apache/commons/vfs/test/ test/org/apache/commons/vfs/util/

Author: imario
Date: Wed Feb 16 11:25:31 2005
New Revision: 154072

URL: http://svn.apache.org/viewcvs?view=rev&rev=154072
Log:
FtpRandomAccessContent aka restart filetransfer
bugfix HttpRandomAccessContent - extended testcase

Added:
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java
Modified:
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/RandomAccessContent.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractRandomAccessContent.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FTPClientWrapper.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClient.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileProvider.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileSystemConfigBuilder.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java
    jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/util/MonitorRandomAccessContent.java
    jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/test/ProviderRandomReadTests.java
    jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/util/DelegatingFileSystemOptionsBuilderTest.java

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/RandomAccessContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/RandomAccessContent.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/RandomAccessContent.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/RandomAccessContent.java Wed Feb 16 11:25:31 2005
@@ -18,12 +18,13 @@
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * Description
  * 
  * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
- * @version $Revision: 1.1 $ $Date: 2004/06/17 19:29:28 $
+ * @version $Revision: 1.1 $ $Date$
  */
 public interface RandomAccessContent extends DataOutput, DataInput
 {
@@ -43,6 +44,8 @@
      * of the file does not change the file length.  The file length will
      * change only by writing after the offset has been set beyond the end
      * of the file.
+     * <br/>
+     * <b>Notice: If you use {@link #getInputStream()} you have to reget the InputStream after calling {@link #seek(long)}</b>
      *
      * @param pos the offset position, measured in bytes from the
      *            beginning of the file, at which to set the file
@@ -72,4 +75,12 @@
      * @throws IOException if an I/O error occurs.
      */
     public void close() throws IOException;
+
+    /**
+     * get the inputstream interface
+     * <br/>
+     * <b>Notice: If you use {@link #seek(long)} you have to reget the InputStream</b>
+     * @return
+     */
+    public InputStream getInputStream();
 }

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractRandomAccessContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractRandomAccessContent.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractRandomAccessContent.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractRandomAccessContent.java Wed Feb 16 11:25:31 2005
@@ -26,7 +26,7 @@
  * (for read-only random access implementations)
  * 
  * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
- * @version $Revision: 1.1 $ $Date: 2004/06/17 19:29:28 $
+ * @version $Revision: 1.1 $ $Date$
  */
 public abstract class AbstractRandomAccessContent implements RandomAccessContent
 {

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FTPClientWrapper.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FTPClientWrapper.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FTPClientWrapper.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FTPClientWrapper.java Wed Feb 16 11:25:31 2005
@@ -160,7 +160,12 @@
 
     public boolean completePendingCommand() throws IOException
     {
-        return getFtpClient().completePendingCommand();
+        if (ftpClient != null)
+        {
+            return getFtpClient().completePendingCommand();
+        }
+
+        return true;
     }
 
     public InputStream retrieveFileStream(String relPath) throws IOException
@@ -176,6 +181,24 @@
         }
     }
 
+    public InputStream retrieveFileStream(String relPath, long restartOffset) throws IOException
+    {
+        try
+        {
+            FTPClient client = getFtpClient();
+            client.setRestartOffset(restartOffset);
+            return client.retrieveFileStream(relPath);
+        }
+        catch (FTPConnectionClosedException e)
+        {
+            disconnect();
+
+            FTPClient client = getFtpClient();
+            client.setRestartOffset(restartOffset);
+            return client.retrieveFileStream(relPath);
+        }
+    }
+
     public OutputStream appendFileStream(String relPath) throws IOException
     {
         try
@@ -200,5 +223,24 @@
             disconnect();
             return getFtpClient().storeFileStream(relPath);
         }
+    }
+
+    public boolean abort() throws IOException
+    {
+        try
+        {
+            // imario@apache.org: 2005-02-14
+            // it should be better to really "abort" the transfer, but
+            // currently I didnt manage to make it work - so lets "abort" the hard way.
+            // return getFtpClient().abort();
+            
+            disconnect();
+            return true;
+        }
+        catch (FTPConnectionClosedException e)
+        {
+            disconnect();
+        }
+        return true;
     }
 }

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClient.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClient.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClient.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpClient.java Wed Feb 16 11:25:31 2005
@@ -44,8 +44,11 @@
     boolean completePendingCommand() throws IOException;
 
     InputStream retrieveFileStream(String relPath) throws IOException;
+    InputStream retrieveFileStream(String relPath, long restartOffset) throws IOException;
 
     OutputStream appendFileStream(String relPath) throws IOException;
 
     OutputStream storeFileStream(String relPath) throws IOException;
+
+    public boolean abort() throws IOException;
 }

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java Wed Feb 16 11:25:31 2005
@@ -20,9 +20,11 @@
 import org.apache.commons.vfs.FileObject;
 import org.apache.commons.vfs.FileSystemException;
 import org.apache.commons.vfs.FileType;
+import org.apache.commons.vfs.RandomAccessContent;
 import org.apache.commons.vfs.provider.AbstractFileObject;
 import org.apache.commons.vfs.util.MonitorInputStream;
 import org.apache.commons.vfs.util.MonitorOutputStream;
+import org.apache.commons.vfs.util.RandomAccessMode;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -419,6 +421,11 @@
         return new FtpInputStream(client, instr);
     }
 
+    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
+    {
+        return new FtpRandomAccessContent(this, mode);
+    }
+
     /**
      * Creates an output stream to write the file content to.
      */
@@ -436,10 +443,22 @@
         }
     }
 
+    String getRelPath()
+    {
+        return relPath;
+    }
+
+    FtpInputStream getInputStream(long filePointer) throws IOException
+    {
+        final FtpClient client = ftpFs.getClient();
+        final InputStream instr = client.retrieveFileStream(relPath, filePointer);
+        return new FtpInputStream(client, instr);
+    }
+
     /**
      * An InputStream that monitors for end-of-file.
      */
-    private class FtpInputStream
+    class FtpInputStream
         extends MonitorInputStream
     {
         private final FtpClient client;
@@ -450,6 +469,11 @@
             this.client = client;
         }
 
+        void abort() throws IOException
+        {
+            client.abort();
+            close();
+        }
         /**
          * Called after the stream has been closed.
          */

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileProvider.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileProvider.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileProvider.java Wed Feb 16 11:25:31 2005
@@ -32,7 +32,7 @@
  * A provider for FTP file systems.
  *
  * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
- * @version $Revision: 1.12 $ $Date: 2005/01/11 16:14:46 $
+ * @version $Revision: 1.12 $ $Date$
  */
 public class FtpFileProvider
     extends AbstractOriginatingFileProvider
@@ -54,6 +54,7 @@
         Capability.URI,
         Capability.WRITE_CONTENT,
         Capability.APPEND_CONTENT,
+        Capability.RANDOM_ACCESS_READ,
     }));
 
     public FtpFileProvider()

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileSystemConfigBuilder.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileSystemConfigBuilder.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileSystemConfigBuilder.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileSystemConfigBuilder.java Wed Feb 16 11:25:31 2005
@@ -23,7 +23,7 @@
  * The config builder for various ftp configuration options
  *
  * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
- * @version $Revision: 1.9 $ $Date: 2004/12/21 21:55:41 $
+ * @version $Revision: 1.9 $ $Date$
  */
 public class FtpFileSystemConfigBuilder extends FileSystemConfigBuilder
 {
@@ -99,7 +99,7 @@
      */
     public void setPassiveMode(FileSystemOptions opts, boolean passiveMode)
     {
-        setParam(opts, PASSIVE_MODE, Boolean.valueOf(passiveMode));
+        setParam(opts, PASSIVE_MODE, passiveMode?Boolean.TRUE:Boolean.FALSE);
     }
 
     /**

Added: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java?view=auto&rev=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java (added)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java Wed Feb 16 11:25:31 2005
@@ -0,0 +1,241 @@
+/*
+ * Copyright 2002, 2003,2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.vfs.provider.ftp;
+
+import org.apache.commons.vfs.FileSystemException;
+import org.apache.commons.vfs.provider.AbstractRandomAccessContent;
+import org.apache.commons.vfs.util.MonitorInputStream;
+import org.apache.commons.vfs.util.RandomAccessMode;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.FilterInputStream;
+
+class FtpRandomAccessContent extends AbstractRandomAccessContent
+{
+    private final FtpFileObject fileObject;
+
+    protected long filePointer = 0;
+    private DataInputStream dis = null;
+    private FtpFileObject.FtpInputStream mis = null;
+
+    FtpRandomAccessContent(final FtpFileObject fileObject, RandomAccessMode mode)
+    {
+        super(mode);
+
+        this.fileObject = fileObject;
+        // fileSystem = (FtpFileSystem) this.fileObject.getFileSystem();
+    }
+
+    public long getFilePointer() throws IOException
+    {
+        return filePointer;
+    }
+
+    public void seek(long pos) throws IOException
+    {
+        if (pos == filePointer)
+        {
+            // no change
+            return;
+        }
+
+        if (pos < 0)
+        {
+            throw new FileSystemException("vfs.provider/random-access-invalid-position.error",
+                new Object[]
+                {
+                    new Long(pos)
+                });
+        }
+        if (dis != null)
+        {
+            close();
+        }
+
+        filePointer = pos;
+    }
+
+    private void createStream() throws IOException
+    {
+        if (dis != null)
+        {
+            return;
+        }
+
+        // FtpClient client = fileSystem.getClient();
+        mis = fileObject.getInputStream(filePointer);
+        dis = new DataInputStream(new FilterInputStream(mis)
+        {
+            public int read() throws IOException
+            {
+                int ret = super.read();
+                if (ret > -1)
+                {
+                    filePointer++;
+                }
+                return ret;
+            }
+
+            public int read(byte b[]) throws IOException
+            {
+                int ret = super.read(b);
+                if (ret > -1)
+                {
+                    filePointer+=ret;
+                }
+                return ret;
+            }
+
+            public int read(byte b[], int off, int len) throws IOException
+            {
+                int ret = super.read(b, off, len);
+                if (ret > -1)
+                {
+                    filePointer+=ret;
+                }
+                return ret;
+            }
+
+            public void close() throws IOException
+            {
+                FtpRandomAccessContent.this.close();
+            }
+        });
+    }
+
+
+    public void close() throws IOException
+    {
+        if (dis != null)
+        {
+            mis.abort();
+
+            // this is to avoid recursive close
+            DataInputStream oldDis = dis;
+            dis = null;
+            oldDis.close();
+            mis = null;
+        }
+    }
+
+    public long length() throws IOException
+    {
+        return fileObject.getContent().getSize();
+    }
+
+    public byte readByte() throws IOException
+    {
+        createStream();
+        byte data = dis.readByte();
+        return data;
+    }
+
+    public char readChar() throws IOException
+    {
+        createStream();
+        char data = dis.readChar();
+        return data;
+    }
+
+    public double readDouble() throws IOException
+    {
+        createStream();
+        double data = dis.readDouble();
+        return data;
+    }
+
+    public float readFloat() throws IOException
+    {
+        createStream();
+        float data = dis.readFloat();
+        return data;
+    }
+
+    public int readInt() throws IOException
+    {
+        createStream();
+        int data = dis.readInt();
+        return data;
+    }
+
+    public int readUnsignedByte() throws IOException
+    {
+        createStream();
+        int data = dis.readUnsignedByte();
+        return data;
+    }
+
+    public int readUnsignedShort() throws IOException
+    {
+        createStream();
+        int data = dis.readUnsignedShort();
+        return data;
+    }
+
+    public long readLong() throws IOException
+    {
+        createStream();
+        long data = dis.readLong();
+        return data;
+    }
+
+    public short readShort() throws IOException
+    {
+        createStream();
+        short data = dis.readShort();
+        return data;
+    }
+
+    public boolean readBoolean() throws IOException
+    {
+        createStream();
+        boolean data = dis.readBoolean();
+        return data;
+    }
+
+    public int skipBytes(int n) throws IOException
+    {
+        createStream();
+        int data = dis.skipBytes(n);
+        return data;
+    }
+
+    public void readFully(byte b[]) throws IOException
+    {
+        createStream();
+        dis.readFully(b);
+    }
+
+    public void readFully(byte b[], int off, int len) throws IOException
+    {
+        createStream();
+        dis.readFully(b, off, len);
+    }
+
+    public String readUTF() throws IOException
+    {
+        createStream();
+        String data = dis.readUTF();
+        return data;
+    }
+
+    public InputStream getInputStream()
+    {
+        return dis;
+    }
+}
\ No newline at end of file

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java Wed Feb 16 11:25:31 2005
@@ -23,6 +23,8 @@
 
 import java.io.DataInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.FilterInputStream;
 import java.net.HttpURLConnection;
 
 class HttpRandomAccesContent extends AbstractRandomAccessContent
@@ -49,7 +51,7 @@
 
     public void seek(long pos) throws IOException
     {
-        if (pos == 0)
+        if (pos == filePointer)
         {
             // no change
             return;
@@ -92,7 +94,38 @@
         }
 
         mis = new HttpFileObject.HttpInputStream(getMethod);
-        dis = new DataInputStream(mis);
+        dis = new DataInputStream(new FilterInputStream(mis)
+        {
+            public int read() throws IOException
+            {
+                int ret = super.read();
+                if (ret > -1)
+                {
+                    filePointer++;
+                }
+                return ret;
+            }
+
+            public int read(byte b[]) throws IOException
+            {
+                int ret = super.read(b);
+                if (ret > -1)
+                {
+                    filePointer+=ret;
+                }
+                return ret;
+            }
+
+            public int read(byte b[], int off, int len) throws IOException
+            {
+                int ret = super.read(b, off, len);
+                if (ret > -1)
+                {
+                    filePointer+=ret;
+                }
+                return ret;
+            }
+        });
     }
 
 
@@ -115,7 +148,6 @@
     {
         createStream();
         byte data = dis.readByte();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -123,7 +155,6 @@
     {
         createStream();
         char data = dis.readChar();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -131,7 +162,6 @@
     {
         createStream();
         double data = dis.readDouble();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -139,7 +169,6 @@
     {
         createStream();
         float data = dis.readFloat();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -147,7 +176,6 @@
     {
         createStream();
         int data = dis.readInt();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -155,7 +183,6 @@
     {
         createStream();
         int data = dis.readUnsignedByte();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -163,7 +190,6 @@
     {
         createStream();
         int data = dis.readUnsignedShort();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -171,7 +197,6 @@
     {
         createStream();
         long data = dis.readLong();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -179,7 +204,6 @@
     {
         createStream();
         short data = dis.readShort();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -187,7 +211,6 @@
     {
         createStream();
         boolean data = dis.readBoolean();
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -195,7 +218,6 @@
     {
         createStream();
         int data = dis.skipBytes(n);
-        filePointer += mis.getCount();
         return data;
     }
 
@@ -203,21 +225,23 @@
     {
         createStream();
         dis.readFully(b);
-        filePointer += mis.getCount();
     }
 
     public void readFully(byte b[], int off, int len) throws IOException
     {
         createStream();
         dis.readFully(b, off, len);
-        filePointer += mis.getCount();
     }
 
     public String readUTF() throws IOException
     {
         createStream();
         String data = dis.readUTF();
-        filePointer += mis.getCount();
         return data;
+    }
+
+    public InputStream getInputStream()
+    {
+        return dis;
     }
 }

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java Wed Feb 16 11:25:31 2005
@@ -23,17 +23,20 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.RandomAccessFile;
+import java.io.InputStream;
+import java.io.EOFException;
 
 /**
  * RandomAccess for local files
  * 
  * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
- * @version $Revision: 1.1 $ $Date: 2004/06/17 19:29:29 $
+ * @version $Revision: 1.1 $ $Date$
  */
 class LocalFileRandomAccessContent extends AbstractRandomAccessContent
 {
     // private final LocalFile localFile;
     final private RandomAccessFile raf;
+    final private InputStream rafis;
 
     LocalFileRandomAccessContent(final File localFile, final RandomAccessMode mode) throws FileSystemException
     {
@@ -52,6 +55,41 @@
         try
         {
             raf = new RandomAccessFile(localFile, modes.toString());
+            rafis = new InputStream()
+            {
+                public int read() throws IOException
+                {
+                    try
+                    {
+                        return raf.readByte();
+                    }
+                    catch (EOFException e)
+                    {
+                        return -1;
+                    }
+                }
+
+                public long skip(long n) throws IOException
+                {
+                    raf.seek(raf.getFilePointer() + n);
+                    return n;
+                }
+
+                public void close() throws IOException
+                {
+                    raf.close();
+                }
+
+                public int read(byte b[]) throws IOException
+                {
+                    return raf.read(b);
+                }
+
+                public int read(byte b[], int off, int len) throws IOException
+                {
+                    return raf.read(b, off, len);
+                }
+            };
         }
         catch (FileNotFoundException e)
         {
@@ -217,5 +255,10 @@
     public void writeUTF(String str) throws IOException
     {
         raf.writeUTF(str);
+    }
+
+    public InputStream getInputStream()
+    {
+        return rafis;
     }
 }

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileRandomAccessContent.java Wed Feb 16 11:25:31 2005
@@ -23,6 +23,7 @@
 import org.apache.commons.vfs.util.RandomAccessMode;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.UnknownHostException;
 
@@ -30,11 +31,12 @@
  * RandomAccess for smb files
  *
  * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
- * @version $Revision: 1.1 $ $Date: 2004/06/17 19:29:29 $
+ * @version $Revision: 1.1 $ $Date$
  */
 class SmbFileRandomAccessContent extends AbstractRandomAccessContent
 {
     private final SmbRandomAccessFile raf;
+    private final InputStream rafis;
 
     SmbFileRandomAccessContent(final SmbFile smbFile, final RandomAccessMode mode) throws FileSystemException
     {
@@ -53,6 +55,34 @@
         try
         {
             raf = new SmbRandomAccessFile(smbFile, modes.toString());
+            rafis = new InputStream()
+            {
+                public int read() throws IOException
+                {
+                    return raf.readByte();
+                }
+
+                public long skip(long n) throws IOException
+                {
+                    raf.seek(raf.getFilePointer() + n);
+                    return n;
+                }
+
+                public void close() throws IOException
+                {
+                    raf.close();
+                }
+
+                public int read(byte b[]) throws IOException
+                {
+                    return raf.read(b);
+                }
+
+                public int read(byte b[], int off, int len) throws IOException
+                {
+                    return raf.read(b, off, len);
+                }
+            };
         }
         catch (MalformedURLException e)
         {
@@ -226,5 +256,10 @@
     public void writeUTF(String str) throws IOException
     {
         raf.writeUTF(str);
+    }
+
+    public InputStream getInputStream()
+    {
+        return rafis;
     }
 }

Modified: jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/util/MonitorRandomAccessContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/util/MonitorRandomAccessContent.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/util/MonitorRandomAccessContent.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/java/org/apache/commons/vfs/util/MonitorRandomAccessContent.java Wed Feb 16 11:25:31 2005
@@ -18,12 +18,13 @@
 import org.apache.commons.vfs.RandomAccessContent;
 
 import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * An RandomAccessContent that provides end-of-stream monitoring.
  *
  * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
- * @version $Revision: 1.1 $ $Date: 2004/06/17 19:29:29 $
+ * @version $Revision: 1.1 $ $Date$
  */
 public class MonitorRandomAccessContent implements RandomAccessContent
 {
@@ -43,7 +44,7 @@
     }
 
     /**
-     * Closes this output stream.
+     * Closes this content.
      */
     public void close() throws IOException
     {
@@ -240,5 +241,10 @@
     public String readUTF() throws IOException
     {
         return content.readUTF();
+    }
+
+    public InputStream getInputStream()
+    {
+        return content.getInputStream();
     }
 }

Modified: jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/test/ProviderRandomReadTests.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/test/ProviderRandomReadTests.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/test/ProviderRandomReadTests.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/test/ProviderRandomReadTests.java Wed Feb 16 11:25:31 2005
@@ -24,7 +24,7 @@
  * RanomdRead-only test cases for file providers.
  *
  * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
- * @version $Revision: 1.1 $ $Date: 2004/06/17 19:29:29 $
+ * @version $Revision: 1.1 $ $Date$
  */
 public class ProviderRandomReadTests
     extends AbstractProviderTestCase
@@ -57,30 +57,37 @@
             // read first byte
             byte c = ra.readByte();
             assertEquals(c, TEST_DATA.charAt(0));
+            assertEquals("fp", ra.getFilePointer(), 1);
 
             // start at pos 4
             ra.seek(3);
             c = ra.readByte();
             assertEquals(c, TEST_DATA.charAt(3));
+            assertEquals("fp", ra.getFilePointer(), 4);
 
             c = ra.readByte();
             assertEquals(c, TEST_DATA.charAt(4));
+            assertEquals("fp", ra.getFilePointer(), 5);
 
             // restart at pos 4
             ra.seek(3);
             c = ra.readByte();
             assertEquals(c, TEST_DATA.charAt(3));
+            assertEquals("fp", ra.getFilePointer(), 4);
 
             c = ra.readByte();
             assertEquals(c, TEST_DATA.charAt(4));
+            assertEquals("fp", ra.getFilePointer(), 5);
 
             // advance to pos 11
             ra.seek(10);
             c = ra.readByte();
             assertEquals(c, TEST_DATA.charAt(10));
+            assertEquals("fp", ra.getFilePointer(), 11);
 
             c = ra.readByte();
             assertEquals(c, TEST_DATA.charAt(11));
+            assertEquals("fp", ra.getFilePointer(), 12);
         }
         finally
         {

Modified: jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/util/DelegatingFileSystemOptionsBuilderTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/util/DelegatingFileSystemOptionsBuilderTest.java?view=diff&r1=154071&r2=154072
==============================================================================
--- jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/util/DelegatingFileSystemOptionsBuilderTest.java (original)
+++ jakarta/commons/sandbox/vfs/trunk/src/test/org/apache/commons/vfs/util/DelegatingFileSystemOptionsBuilderTest.java Wed Feb 16 11:25:31 2005
@@ -30,7 +30,7 @@
  * Some tests for the DelegatingFileSystemOptionsBuilder
  * 
  * @author <a href="mailto:imario@apache.org">Mario Ivankovits</a>
- * @version $Revision: 1.1 $ $Date: 2004/06/28 19:47:05 $
+ * @version $Revision: 1.1 $ $Date$
  */
 public class DelegatingFileSystemOptionsBuilderTest extends TestCase
 {
@@ -100,7 +100,7 @@
         catch (FileSystemException e)
         {
             assertEquals(e.getCause().getClass(), InvocationTargetException.class);
-            assertEquals(e.getCause().getCause().getClass(), NumberFormatException.class);
+            assertEquals(((InvocationTargetException) e.getCause()).getTargetException().getClass(), NumberFormatException.class);
         }
 
         try



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org