You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2005/04/06 10:24:45 UTC

svn commit: r160265 - incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/BLOBFileValue.java

Author: stefan
Date: Wed Apr  6 01:24:43 2005
New Revision: 160265

URL: http://svn.apache.org/viewcvs?view=rev&rev=160265
Log:
BLOBFileValue: fixed equals() plus minor corrections of javadoc & inline comments

Modified:
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/BLOBFileValue.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/BLOBFileValue.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/BLOBFileValue.java?view=diff&r1=160264&r2=160265
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/BLOBFileValue.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/BLOBFileValue.java Wed Apr  6 01:24:43 2005
@@ -24,6 +24,7 @@
 import javax.jcr.Value;
 import javax.jcr.ValueFormatException;
 import javax.jcr.util.ISO8601;
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -33,7 +34,6 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
-import java.io.ByteArrayInputStream;
 import java.util.Calendar;
 
 /**
@@ -44,37 +44,55 @@
  */
 public class BLOBFileValue implements Value {
 
-    /** the property type */
+    /**
+     * the property type
+     */
     public static final int TYPE = PropertyType.BINARY;
 
-    /** the default encoding */
+    /**
+     * the default encoding
+     */
     protected static final String DEFAULT_ENCODING = "UTF-8";
 
-    /** empty array */
+    /**
+     * empty array
+     */
     private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
 
-    /** max size for keeping tmp data in memory */
+    /**
+     * max size for keeping tmp data in memory
+     */
     private static final int MAX_BUFFER_SIZE = 0x10000;
 
-    /** underlaying file */
+    /**
+     * underlying file
+     */
     private final File file;
 
-    /** flag indicating if file is a temp file */
+    /**
+     * flag indicating if this instance is backed by a temp file
+     */
     private final boolean tmpFile;
 
-    /** buffer for small data */
+    /**
+     * buffer for small-sized data
+     */
     private byte[] buffer = EMPTY_BYTE_ARRAY;
 
-    /** underlaying file system resource */
+    /**
+     * underlying file system resource
+     */
     private final FileSystemResource fsResource;
 
-    /** converted text */
+    /**
+     * converted text
+     */
     private String text = null;
 
     /**
      * Creates a new <code>BLOBFileValue</code> instance from an
      * <code>InputStream</code>. The contents of the stream is spooled
-     * to a temporary file or to a byte buffer, if smaller than
+     * to a temporary file or to a byte buffer if its size is smaller than
      * {@link #MAX_BUFFER_SIZE}.
      *
      * @param in stream to be represented as a <code>BLOBFileValue</code> instance
@@ -90,10 +108,12 @@
         try {
             while ((read = in.read(spoolBuffer)) > 0) {
                 if (out != null) {
+                    // spool to temp file
                     out.write(spoolBuffer, 0, read);
                     len += read;
                 } else if (len + read > MAX_BUFFER_SIZE) {
-                    // create temp file
+                    // threshold for keeping data in memory exceeded;
+                    // create temp file and spool buffer contents
                     spoolFile = File.createTempFile("bin", null);
                     spoolFile.deleteOnExit();
                     out = new FileOutputStream(spoolFile);
@@ -101,8 +121,9 @@
                     out.write(spoolBuffer, 0, read);
                     buffer = null;
                     len += read;
-                } else if (len + read > buffer.length) {
-                    byte[] newBuffer = new byte[len+read];
+                } else {
+                    // reallocate new buffer and spool old buffer contents
+                    byte[] newBuffer = new byte[len + read];
                     System.arraycopy(buffer, 0, newBuffer, 0, len);
                     System.arraycopy(spoolBuffer, 0, newBuffer, len, read);
                     buffer = newBuffer;
@@ -153,10 +174,12 @@
     public BLOBFileValue(FileSystemResource fsResource) throws IOException {
         try {
             if (!fsResource.exists()) {
-                throw new IOException(fsResource.getPath() + ": the specified resource does not exist");
+                throw new IOException(fsResource.getPath()
+                        + ": the specified resource does not exist");
             }
         } catch (FileSystemException fse) {
-            throw new IOException(fsResource.getPath() + ": the specified resource does not exist");
+            throw new IOException(fsResource.getPath()
+                    + ": the specified resource does not exist");
         }
         // this instance is backed by a resource in the virtual file system
         this.fsResource = fsResource;
@@ -176,7 +199,8 @@
         if (obj instanceof BLOBFileValue) {
             BLOBFileValue other = (BLOBFileValue) obj;
             return ((file == null ? other.file == null : file.equals(other.file))
-                    && (fsResource == null ? other.fsResource == null : fsResource.equals(other.fsResource)));
+                    && (fsResource == null ? other.fsResource == null : fsResource.equals(other.fsResource))
+                    && buffer.equals(other.buffer));
         }
         return false;
     }
@@ -203,6 +227,7 @@
                 return -1;
             }
         } else {
+            // this instance is backed by a in-memory buffer
             return buffer.length;
         }
     }
@@ -229,8 +254,8 @@
     /**
      * Deletes the file backing this <code>BLOBFileValue</code>.
      *
-     * @param pruneEmptyParentDirs if <code>true</code>, empty parent directories will
-     *                             automatically be deleted
+     * @param pruneEmptyParentDirs if <code>true</code>, empty parent directories
+     *                             will automatically be deleted
      */
     public void delete(boolean pruneEmptyParentDirs) {
         if (file != null) {
@@ -251,6 +276,7 @@
                 // ignore
             }
         } else {
+            // this instance is backed by a in-memory buffer
             buffer = EMPTY_BYTE_ARRAY;
         }
     }
@@ -271,20 +297,23 @@
             try {
                 in = new FileInputStream(file);
             } catch (FileNotFoundException fnfe) {
-                throw new RepositoryException("file backing binary value not found", fnfe);
+                throw new RepositoryException("file backing binary value not found",
+                        fnfe);
             }
         } else if (fsResource != null) {
             // this instance is backed by a resource in the virtual file system
             try {
                 in = fsResource.getInputStream();
             } catch (FileSystemException fse) {
-                throw new RepositoryException(fsResource.getPath() + ": the specified resource does not exist", fse);
+                throw new RepositoryException(fsResource.getPath()
+                        + ": the specified resource does not exist", fse);
             }
         } else {
+            // this instance is backed by a in-memory buffer
             in = new ByteArrayInputStream(buffer);
         }
         try {
-            byte[] buffer = new byte[8192];
+            byte[] buffer = new byte[0x2000];
             int read;
             while ((read = in.read(buffer)) > 0) {
                 out.write(buffer, 0, read);
@@ -292,12 +321,12 @@
         } finally {
             try {
                 in.close();
-            } catch (IOException ioe) {
+            } catch (IOException ignore) {
             }
         }
     }
 
-    //-----------------------------------------< java.lang.Object overrides >---
+    //-------------------------------------------< java.lang.Object overrides >
     /**
      * Returns the path string of the backing file.
      *
@@ -311,12 +340,12 @@
             // this instance is backed by a resource in the virtual file system
             return fsResource.toString();
         } else {
-            // this instance is backed to a byte buffer
+            // this instance is backed by a in-memory buffer
             return buffer.toString();
         }
     }
 
-    //--------------------------------------------------------------< Value >---
+    //----------------------------------------------------------------< Value >
     /**
      * {@inheritDoc}
      */
@@ -327,7 +356,9 @@
     /**
      * {@inheritDoc}
      */
-    public String getString() throws ValueFormatException, IllegalStateException, RepositoryException {
+    public String getString()
+            throws ValueFormatException, IllegalStateException,
+            RepositoryException {
         if (text == null) {
             ByteArrayOutputStream out = new ByteArrayOutputStream();
             try {
@@ -335,7 +366,8 @@
                 byte[] data = out.toByteArray();
                 text = new String(data, DEFAULT_ENCODING);
             } catch (UnsupportedEncodingException e) {
-                throw new RepositoryException(DEFAULT_ENCODING + " not supported on this platform", e);
+                throw new RepositoryException(DEFAULT_ENCODING
+                        + " not supported on this platform", e);
             } catch (IOException e) {
                 throw new ValueFormatException("conversion from stream to string failed", e);
             } finally {
@@ -352,21 +384,25 @@
     /**
      * {@inheritDoc}
      */
-    public InputStream getStream() throws ValueFormatException, IllegalStateException, RepositoryException {
+    public InputStream getStream()
+            throws ValueFormatException, IllegalStateException,
+            RepositoryException {
         // always return a 'fresh' stream
         if (file != null) {
             // this instance is backed by a 'real' file
             try {
                 return new FileInputStream(file);
             } catch (FileNotFoundException fnfe) {
-                throw new RepositoryException("file backing binary value not found", fnfe);
+                throw new RepositoryException("file backing binary value not found",
+                        fnfe);
             }
         } else if (fsResource != null) {
             // this instance is backed by a resource in the virtual file system
             try {
                 return fsResource.getInputStream();
             } catch (FileSystemException fse) {
-                throw new RepositoryException(fsResource.getPath() + ": the specified resource does not exist", fse);
+                throw new RepositoryException(fsResource.getPath()
+                        + ": the specified resource does not exist", fse);
             }
         } else {
             return new ByteArrayInputStream(buffer);
@@ -376,7 +412,9 @@
     /**
      * {@inheritDoc}
      */
-    public double getDouble() throws ValueFormatException, IllegalStateException, RepositoryException {
+    public double getDouble()
+            throws ValueFormatException, IllegalStateException,
+            RepositoryException {
         try {
             return Double.parseDouble(getString());
         } catch (NumberFormatException e) {
@@ -387,7 +425,9 @@
     /**
      * {@inheritDoc}
      */
-    public Calendar getDate() throws ValueFormatException, IllegalStateException, RepositoryException {
+    public Calendar getDate()
+            throws ValueFormatException, IllegalStateException,
+            RepositoryException {
         Calendar cal = ISO8601.parse(getString());
         if (cal != null) {
             return cal;
@@ -399,7 +439,9 @@
     /**
      * {@inheritDoc}
      */
-    public long getLong() throws ValueFormatException, IllegalStateException, RepositoryException {
+    public long getLong()
+            throws ValueFormatException, IllegalStateException,
+            RepositoryException {
         try {
             return Long.parseLong(getString());
         } catch (NumberFormatException e) {
@@ -410,7 +452,9 @@
     /**
      * {@inheritDoc}
      */
-    public boolean getBoolean() throws ValueFormatException, IllegalStateException, RepositoryException {
+    public boolean getBoolean()
+            throws ValueFormatException, IllegalStateException,
+            RepositoryException {
         return Boolean.valueOf(getString()).booleanValue();
     }
 }