You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2012/05/22 16:56:38 UTC

svn commit: r1341504 - /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java

Author: thomasm
Date: Tue May 22 14:56:37 2012
New Revision: 1341504

URL: http://svn.apache.org/viewvc?rev=1341504&view=rev
Log:
OAK-16 Proper ValueFactory implementation and Value handling - don't use the (old) stream for getString()

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java?rev=1341504&r1=1341503&r2=1341504&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueImpl.java Tue May 22 14:56:37 2012
@@ -180,9 +180,13 @@ class ValueImpl implements Value {
                     return namePathMapper.getJcrPath(value.toString());
                 }
             case PropertyType.BINARY:
-                InputStream stream = getStream();
+                if (stream != null) {
+                    throw new IllegalStateException("getStream has previously been called on this Value instance. " +
+                            "In this case a new Value instance must be acquired in order to successfully call this method.");
+                }
+                InputStream in = getNewStream();
                 try {
-                    return IOUtils.toString(stream, "UTF-8");
+                    return IOUtils.toString(in, "UTF-8");
                 } catch (IOException e) {
                     throw new RepositoryException("conversion from stream to string failed", e);
                 } finally {
@@ -199,23 +203,24 @@ class ValueImpl implements Value {
     @Override
     public InputStream getStream() throws IllegalStateException, RepositoryException {
         if (stream == null) {
-            switch (getType()) {
-                case PropertyType.NAME:
-                case PropertyType.PATH:
-                    try {
-                        stream = new ByteArrayInputStream(getString().getBytes("UTF-8"));
-                    } catch (UnsupportedEncodingException ex) {
-                        throw new RepositoryException("UTF-8 is not supported", ex);
-                    }
-                    break;
-                default:
-                    stream = value.getNewStream();
-            }
+            stream = getNewStream();
         }
-
         return stream;
     }
 
+    private InputStream getNewStream() throws RepositoryException {
+        switch (getType()) {
+        case PropertyType.NAME:
+        case PropertyType.PATH:
+            try {
+                return new ByteArrayInputStream(getString().getBytes("UTF-8"));
+            } catch (UnsupportedEncodingException ex) {
+                throw new RepositoryException("UTF-8 is not supported", ex);
+            }
+        }
+        return value.getNewStream();
+    }
+
     /**
      * @see javax.jcr.Value#getBinary()
      */