You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/10/08 15:35:56 UTC

svn commit: r1005816 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/value/InternalValue.java test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java

Author: jukka
Date: Fri Oct  8 13:35:56 2010
New Revision: 1005816

URL: http://svn.apache.org/viewvc?rev=1005816&view=rev
Log:
JCR-2762: Optimize bundle serialization

Increase test coverage

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java?rev=1005816&r1=1005815&r2=1005816&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java Fri Oct  8 13:35:56 2010
@@ -309,7 +309,7 @@ public class InternalValue extends Abstr
      * @param value
      * @return the created value
      */
-    static InternalValue create(URI value) {
+    public static InternalValue create(URI value) {
         return new InternalValue(value);
     }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java?rev=1005816&r1=1005815&r2=1005816&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java Fri Oct  8 13:35:56 2010
@@ -18,6 +18,8 @@ package org.apache.jackrabbit.core.persi
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.math.BigDecimal;
+import java.net.URI;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collections;
@@ -31,7 +33,12 @@ import org.apache.jackrabbit.core.persis
 import org.apache.jackrabbit.core.util.StringIndex;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.NameFactory;
+import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.PathFactory;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
+import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
 
 import junit.framework.TestCase;
 
@@ -46,7 +53,20 @@ public class BundleBindingTest extends T
                 "http://www.jcp.org/jcr/mix/1.0", 
                 "unstructured",
                 "created", 
-                "createdBy" 
+                "createdBy",
+                "",
+                "binary",
+                "boolean",
+                "date",
+                "decimal",
+                "double",
+                "long",
+                "name",
+                "path",
+                "reference",
+                "string",
+                "uri",
+                "weakreference"
         };
         StringIndex index = new StringIndex() {
             public int stringToIndex(String string) {
@@ -79,6 +99,9 @@ public class BundleBindingTest extends T
                 0, 0, 0, 0, 0 });
     }
 
+    /**
+     * Tests serialization of a complex bundle.
+     */
     public void testComplexBundle() throws Exception {
         NodeId id = new NodeId(1, 2);
         NodePropBundle bundle = new NodePropBundle(id);
@@ -90,45 +113,172 @@ public class BundleBindingTest extends T
         bundle.setSharedSet(new HashSet<NodeId>(Arrays.asList(
                 new NodeId(5, 6), new NodeId(7, 8), new NodeId(9, 10))));
 
-        PropertyEntry created = new PropertyEntry(
+        NameFactory factory = NameFactoryImpl.getInstance();
+        PropertyEntry property;
+
+        property = new PropertyEntry(
                 new PropertyId(id, NameConstants.JCR_CREATED));
-        created.setType(PropertyType.DATE);
-        created.setMultiValued(false);
+        property.setType(PropertyType.DATE);
+        property.setMultiValued(false);
         Calendar date = Calendar.getInstance();
         date.setTimeInMillis(1234567890);
-        created.setValues(new InternalValue[] { InternalValue.create(date) });
-        bundle.addProperty(created);
+        property.setValues(new InternalValue[] { InternalValue.create(date) });
+        bundle.addProperty(property);
 
-        PropertyEntry createdby = new PropertyEntry(
+        property = new PropertyEntry(
                 new PropertyId(id, NameConstants.JCR_CREATEDBY));
-        createdby.setType(PropertyType.STRING);
-        createdby.setMultiValued(false);
-        createdby.setValues(new InternalValue[] {
+        property.setType(PropertyType.STRING);
+        property.setMultiValued(false);
+        property.setValues(
+                new InternalValue[] { InternalValue.create("test") });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "binary")));
+        property.setType(PropertyType.BINARY);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] { InternalValue.create(
+                new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "boolean")));
+        property.setType(PropertyType.BOOLEAN);
+        property.setMultiValued(true);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(true), InternalValue.create(false) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "date")));
+        property.setType(PropertyType.DATE);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] { InternalValue.create(date) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "decimal")));
+        property.setType(PropertyType.DECIMAL);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(new BigDecimal("1234567890.0987654321")) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "double")));
+        property.setType(PropertyType.DOUBLE);
+        property.setMultiValued(true);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(1.0), InternalValue.create(Math.PI) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "long")));
+        property.setType(PropertyType.LONG);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(1234567890) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "name")));
+        property.setType(PropertyType.NAME);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(NameConstants.JCR_MIMETYPE) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "path")));
+        property.setType(PropertyType.PATH);
+        property.setMultiValued(true);
+        PathFactory pathFactory = PathFactoryImpl.getInstance();
+        Path root = pathFactory.getRootPath();
+        Path path = pathFactory.create(root, NameConstants.JCR_SYSTEM, false);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(root), InternalValue.create(path) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "reference")));
+        property.setType(PropertyType.REFERENCE);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(new NodeId(11, 12)) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "string")));
+        property.setType(PropertyType.STRING);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] {
                 InternalValue.create("test") });
-        bundle.addProperty(createdby);
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "uri")));
+        property.setType(PropertyType.URI);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(new URI("http://jackrabbit.apache.org/")) });
+        bundle.addProperty(property);
+
+        property = new PropertyEntry(
+                new PropertyId(id, factory.create("", "weakreference")));
+        property.setType(PropertyType.WEAKREFERENCE);
+        property.setMultiValued(false);
+        property.setValues(new InternalValue[] {
+                InternalValue.create(new NodeId(13, 14), true) });
+        bundle.addProperty(property);
 
         bundle.addChildNodeEntry(
-                NameConstants.JCR_SYSTEM, new NodeId(11, 12));
+                NameConstants.JCR_SYSTEM, new NodeId(15, 16));
         bundle.addChildNodeEntry(
-                NameConstants.JCR_VERSIONSTORAGE, new NodeId(13, 14));
+                NameConstants.JCR_VERSIONSTORAGE, new NodeId(17, 18));
 
         assertBundleRoundtrip(bundle);
 
         assertBundleSerialization(bundle, new byte[] {
                 2, 0, 0, 1, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
                 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, -1, -1, -1, -1,
-                0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
-                0, 0, 4, 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
-                0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 29, 49, 57, 55, 48, 45,
-                48, 49, 45, 49, 53, 84, 48, 55, 58, 53, 54, 58, 48, 55, 46,
-                56, 57, 48, 43, 48, 49, 58, 48, 48, -1, -1, -1, -1, 1, 1, 0,
-                0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0,
-                6, 115, 121, 115, 116, 101, 109, 1, 0, 0, 0, 0, 0, 0, 0, 13,
-                0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 14, 118, 101, 114,
-                115, 105, 111, 110, 83, 116, 111, 114, 97, 103, 101, 0, 0, 0,
-                1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 1, 0, 0,
-                0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0,
-                0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0 });
+                0, 0, 0, 6, 0, 0, 0, 12, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0,
+                0, 0, 0, 73, -106, 2, -46, 0, 0, 0, 6, 0, 0, 0, 16, 0, 0, 0,
+                1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 116, 101, 115, 116, 0, 0,
+                0, 6, 0, 0, 0, 8, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 2, 1, 0, 0,
+                0, 0, 6, 0, 0, 0, 13, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+                0, 0, 0, 8, 109, 105, 109, 101, 84, 121, 112, 101, 0, 0, 0, 6,
+                0, 0, 0, 15, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
+                0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 18,
+                0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 13,
+                0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 6, 0, 0, 0, 9, 0, 0, 0, 5,
+                0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 29, 49, 57, 55, 48, 45, 48, 49,
+                45, 49, 53, 84, 48, 55, 58, 53, 54, 58, 48, 55, 46, 56, 57,
+                48, 43, 48, 49, 58, 48, 48, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0,
+                2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 0, 1, 2, 3, 4, 5, 6, 7,
+                8, 9, 0, 0, 0, 6, 0, 0, 0, 17, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0,
+                1, 0, 0, 0, 29, 104, 116, 116, 112, 58, 47, 47, 106, 97, 99,
+                107, 114, 97, 98, 98, 105, 116, 46, 97, 112, 97, 99, 104, 101,
+                46, 111, 114, 103, 47, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0,
+                0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 116, 101, 115, 116, 0, 0, 0, 6,
+                0, 0, 0, 11, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 2, 63, -16, 0, 0,
+                0, 0, 0, 0, 64, 9, 33, -5, 84, 68, 45, 24, 0, 0, 0, 0, 0, 0,
+                0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 29, 49, 57,
+                55, 48, 45, 48, 49, 45, 49, 53, 84, 48, 55, 58, 53, 54, 58,
+                48, 55, 46, 56, 57, 48, 43, 48, 49, 58, 48, 48, 0, 0, 0, 6,
+                0, 0, 0, 10, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 1, 1, 0, 21, 49,
+                50, 51, 52, 53, 54, 55, 56, 57, 48, 46, 48, 57, 56, 55, 54,
+                53, 52, 51, 50, 49, 0, 0, 0, 6, 0, 0, 0, 14, 0, 0, 0, 8, 1,
+                0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 123, 125, 0, 0, 0, 37, 123,
+                125, 9, 123, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119,
+                46, 106, 99, 112, 46, 111, 114, 103, 47, 106, 99, 114, 47,
+                49, 46, 48, 125, 115, 121, 115, 116, 101, 109, -1, -1, -1,
+                -1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16,
+                0, 0, 0, 0, 0, 6, 115, 121, 115, 116, 101, 109, 1, 0, 0, 0,
+                0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 14,
+                118, 101, 114, 115, 105, 111, 110, 83, 116, 111, 114, 97,
+                103, 101, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,
+                0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
+                10, 1, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0 });
     }
 
     private void assertBundleRoundtrip(NodePropBundle bundle)