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 an...@apache.org on 2013/05/15 14:14:34 UTC

svn commit: r1482781 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java

Author: angela
Date: Wed May 15 12:14:34 2013
New Revision: 1482781

URL: http://svn.apache.org/r1482781
Log:
OAK-823 : Missing validation for jcr:uuid property

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java?rev=1482781&r1=1482780&r2=1482781&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java Wed May 15 12:14:34 2013
@@ -16,12 +16,32 @@
  */
 package org.apache.jackrabbit.oak.plugins.nodetype;
 
+import java.util.List;
+import java.util.Set;
+import javax.jcr.PropertyType;
+import javax.jcr.Value;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.core.IdentifierManager;
+import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.spi.commit.DefaultEditor;
+import org.apache.jackrabbit.oak.spi.commit.Editor;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Lists.newArrayList;
 import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN;
 import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
+import static org.apache.jackrabbit.JcrConstants.JCR_NAME;
 import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
 import static org.apache.jackrabbit.JcrConstants.JCR_REQUIREDTYPE;
+import static org.apache.jackrabbit.JcrConstants.JCR_UUID;
 import static org.apache.jackrabbit.JcrConstants.JCR_VALUECONSTRAINTS;
 import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED;
 import static org.apache.jackrabbit.oak.api.CommitFailedException.CONSTRAINT;
@@ -32,25 +52,6 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_ABSTRACT;
 import static org.apache.jackrabbit.oak.plugins.nodetype.constraint.Constraints.valueConstraint;
 
-import java.util.List;
-import java.util.Set;
-
-import javax.jcr.PropertyType;
-import javax.jcr.Value;
-
-import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
-import org.apache.jackrabbit.oak.spi.commit.DefaultEditor;
-import org.apache.jackrabbit.oak.spi.commit.Editor;
-import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Lists;
-
 /**
  * Validator implementation that check JCR node type constraints.
  *
@@ -152,6 +153,7 @@ class TypeEditor extends DefaultEditor {
             throw constraintViolation(
                     3, "No matching property definition found for " + after);
         }
+        checkUUIDCreation(definition, after);
         checkValueConstraints(definition, after);
     }
 
@@ -163,6 +165,7 @@ class TypeEditor extends DefaultEditor {
             throw constraintViolation(
                     4, "No matching property definition found for " + after);
         }
+        checkUUIDModification(definition, after);
         checkValueConstraints(definition, after);
     }
 
@@ -240,6 +243,22 @@ class TypeEditor extends DefaultEditor {
         throw constraintViolation(5, "Value constraint violation in " + property);
     }
 
+    private void checkUUIDCreation(NodeState definition, PropertyState property) throws CommitFailedException {
+        if (isJcrUuid(definition, property) && !IdentifierManager.isValidUUID(property.getValue(Type.STRING))) {
+            throw constraintViolation(12, "Invalid UUID in jcr:uuid property.");
+        }
+    }
+
+    private void checkUUIDModification(NodeState definition, PropertyState property) throws CommitFailedException {
+        if (isJcrUuid(definition, property)) {
+            throw constraintViolation(13, "jcr:uuid property cannot be modified.");
+        }
+    }
+
+    private static boolean isJcrUuid(NodeState definition, PropertyState property) {
+        return JCR_UUID.equals(property.getName()) && JCR_UUID.equals(definition.getName(JCR_NAME));
+    }
+
     /**
      * Collects the primary and mixin types and all related supertypes
      * of the given node and places them in the {@link #effective} list