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 re...@apache.org on 2012/05/24 14:23:43 UTC

svn commit: r1342222 - in /jackrabbit/oak/trunk: oak-it/jcr/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/

Author: reschke
Date: Thu May 24 12:23:42 2012
New Revision: 1342222

URL: http://svn.apache.org/viewvc?rev=1342222&view=rev
Log:
OAK-66: add a small hack that will lead to auto-creation of jcr:uuid properties (WIP)

Modified:
    jackrabbit/oak/trunk/oak-it/jcr/pom.xml
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java

Modified: jackrabbit/oak/trunk/oak-it/jcr/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/jcr/pom.xml?rev=1342222&r1=1342221&r2=1342222&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-it/jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-it/jcr/pom.xml Thu May 24 12:23:42 2012
@@ -44,8 +44,6 @@
             <property>
               <name>known.issues</name>
               <value>
-org.apache.jackrabbit.test.api.NodeReadMethodsTest#testGetUUID
-org.apache.jackrabbit.test.api.SessionReadMethodsTest#testGetNodeByUUID
 org.apache.jackrabbit.test.api.AddNodeTest#testConstraintViolation
 org.apache.jackrabbit.test.api.AddNodeTest#testRepositoryException
 org.apache.jackrabbit.test.api.ReferencesTest#testNonReferenceable

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java?rev=1342222&r1=1342221&r2=1342222&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java Thu May 24 12:23:42 2012
@@ -95,8 +95,13 @@ public class NodeDelegate extends ItemDe
     }
 
     public String getIdentifier() {
-        // TODO for now the identifier is the OAK path
-        return getPath();
+        PropertyDelegate pd = getProperty("jcr:uuid");
+        if (pd == null) {
+            return getPath();
+        }
+        else {
+            return pd.getValue().toString();
+        }
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1342222&r1=1342221&r2=1342222&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Thu May 24 12:23:42 2012
@@ -56,9 +56,12 @@ import javax.jcr.version.Version;
 import javax.jcr.version.VersionHistory;
 import java.io.InputStream;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.UUID;
 
 import static org.apache.jackrabbit.oak.util.Iterators.filter;
 
@@ -700,10 +703,30 @@ public class NodeImpl extends ItemImpl i
         checkStatus();
         // TODO: figure out the right place for this check
         NodeTypeManager ntm = sessionDelegate.getNodeTypeManager();
-        ntm.getNodeType(mixinName); // throws on not found
+        NodeType nt = ntm.getNodeType(mixinName); // throws on not found
+        
+        if (nt.isNodeType("mix:referenceable")) {
+            this.setProperty(Property.JCR_UUID, UUID.randomUUID().toString());
+        }
         // TODO: END
 
-        // todo implement addMixin
+        String jcrMixinTypes =
+                sessionDelegate.getOakPathOrThrow(Property.JCR_MIXIN_TYPES);
+        PropertyDelegate mixins = dlg.getProperty(jcrMixinTypes);
+
+        CoreValue cv = ValueConverter.toCoreValue(mixinName, PropertyType.NAME, sessionDelegate);
+        if (mixins == null) {
+            dlg.setProperty(jcrMixinTypes, Collections.singletonList(cv));
+        } else {
+            List<CoreValue> values = new ArrayList<CoreValue>();
+            values.add(cv);
+            for (CoreValue existingValue : mixins.getValues()) {
+                if (!values.contains(existingValue)) {
+                    values.add(existingValue);
+                }
+            }
+            dlg.setProperty(jcrMixinTypes, values);
+        }
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java?rev=1342222&r1=1342221&r2=1342222&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java Thu May 24 12:23:42 2012
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.jcr;
 import org.apache.jackrabbit.oak.api.AuthInfo;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.QueryEngine;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
@@ -119,9 +120,33 @@ public class SessionDelegate {
 
     @CheckForNull
     public NodeDelegate getNodeByIdentifier(String id) {
-        // TODO: for now the OAK path is the identifier
-        Tree tree = getTree(id);
-        return tree == null ? null : new NodeDelegate(this, tree);
+        if (id.startsWith("/")) {
+            Tree tree = getTree(id);
+            return tree == null ? null : new NodeDelegate(this, tree);
+        }
+        else {
+            // referenceable
+            return findByJcrUuid(getTree(""), id);
+        }
+    }
+
+    // TODO replace by query-based implementation
+    private NodeDelegate findByJcrUuid(Tree tree, String id) {
+
+       PropertyState p = tree.getProperty("jcr:uuid");
+        if (p != null && id.equals(p.getValue().getString())) {
+            return new NodeDelegate(this, tree);
+        }
+        else {
+            for (Tree c : tree.getChildren()) {
+                NodeDelegate found = findByJcrUuid(c, id);
+                if (found != null) {
+                    return found;
+                }
+            }
+        }
+
+        return null;
     }
 
     @Nonnull