You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2011/06/09 14:37:30 UTC

svn commit: r1133831 - in /jackrabbit/sandbox/spi2microkernel/src: main/java/org/apache/jackrabbit/spi2microkernel/util/Json.java test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java

Author: thomasm
Date: Thu Jun  9 12:37:30 2011
New Revision: 1133831

URL: http://svn.apache.org/viewvc?rev=1133831&view=rev
Log:
Support multi-value properties

Modified:
    jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/util/Json.java
    jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java

Modified: jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/util/Json.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/util/Json.java?rev=1133831&r1=1133830&r2=1133831&view=diff
==============================================================================
--- jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/util/Json.java (original)
+++ jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/util/Json.java Thu Jun  9 12:37:30 2011
@@ -35,6 +35,7 @@ import org.json.simple.parser.ParseExcep
 
 import javax.jcr.RepositoryException;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedList;
 
@@ -146,7 +147,9 @@ public final class Json {
 
         private String currentKey;
         private boolean isObjectEmpty;
+        private boolean isArray;
         private NodeInfoBuilder nodeInfoBuilder;
+        private ArrayList<Object> values;
 
         public JsonHandler(Path parent, InfoListener infoListener) {
             this.infoListener = infoListener;
@@ -197,6 +200,15 @@ public final class Json {
 
         @Override
         public boolean primitive(Object value) throws ParseException, IOException {
+            if (isArray) {
+                values.add(value);
+                return true;
+            } else {
+                return handleValue(value, null);
+            }
+        }
+
+        private boolean handleValue(Object value, ArrayList<Object> values) throws ParseException {
             if (":name".equals(currentKey)) {
                 Name name = Paths.translateName((String) value);
                 nodeInfoBuilder.setName(name);
@@ -211,7 +223,14 @@ public final class Json {
                 PropertyInfoBuilder propertyInfoBuilder = nodeInfoBuilder.createPropertyInfo();
                 Name name = Paths.translateName(currentKey);
                 propertyInfoBuilder.setName(name);
-                propertyInfoBuilder.addValue(Values.create(value));
+                if (value != null) {
+                    propertyInfoBuilder.addValue(Values.create(value));
+                } else {
+                    propertyInfoBuilder.setMultivalued(true);
+                    for (Object o : values) {
+                        propertyInfoBuilder.addValue(Values.create(o));
+                    }
+                }
                 propertyInfoBuilder.build();
                 return !infoListener.done();
             }
@@ -220,6 +239,21 @@ public final class Json {
             }
         }
 
+        @Override
+        public boolean startArray() throws ParseException, IOException {
+            isArray = true;
+            values = new ArrayList<Object>();
+            return true;
+        }
+
+        @Override
+        public boolean endArray() throws ParseException, IOException {
+            boolean result = handleValue(null, values);
+            isArray = false;
+            values = null;
+            return result;
+        }
+
     }
 
 }
\ No newline at end of file

Modified: jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java?rev=1133831&r1=1133830&r2=1133831&view=diff
==============================================================================
--- jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java (original)
+++ jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java Thu Jun  9 12:37:30 2011
@@ -261,7 +261,6 @@ public class RepositoryTest {
         addProperty(parentNode, "decimal", getSession().getValueFactory().createValue(BigDecimal.valueOf(21)));
     }
 
-    @Ignore  // todo fix in microkernel
     @Test
     public void addMultiValuedProperty() throws RepositoryException {
         Node parentNode = getNode(testPath);
@@ -305,7 +304,6 @@ public class RepositoryTest {
         }
     }
 
-    @Ignore  // todo fix in microkernel
     @Test
     public void setMultiValuedProperty() throws RepositoryException {
         Node parentNode = getNode(testPath);