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 md...@apache.org on 2012/09/10 14:27:38 UTC

svn commit: r1382793 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type: NodeTypeManagerImpl.java PropertyDefinitionImpl.java constraint/StringConstraint.java

Author: mduerig
Date: Mon Sep 10 12:27:38 2012
New Revision: 1382793

URL: http://svn.apache.org/viewvc?rev=1382793&view=rev
Log:
OAK-294: nt:propertyDefinition has incorrect value constraints for property types
 converting jcr:requiredType to upper case in propertyDefinitions in order to comply with nt:propertyDefinition

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/StringConstraint.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java?rev=1382793&r1=1382792&r2=1382793&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java Mon Sep 10 12:27:38 2012
@@ -292,7 +292,7 @@ public class NodeTypeManagerImpl extends
 
         node.setString(
                 JCR_REQUIREDTYPE,
-                PropertyType.nameFromValue(def.getRequiredType()));
+                PropertyType.nameFromValue(def.getRequiredType()).toUpperCase());
         node.setBoolean(JCR_MULTIPLE, def.isMultiple());
         node.setBoolean(JCR_IS_FULLTEXT_SEARCHABLE, def.isFullTextSearchable());
         node.setBoolean(JCR_IS_QUERY_ORDERABLE, def.isQueryOrderable());

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java?rev=1382793&r1=1382792&r2=1382793&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java Mon Sep 10 12:27:38 2012
@@ -16,7 +16,6 @@
  */
 package org.apache.jackrabbit.oak.plugins.type;
 
-import javax.jcr.PropertyType;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
 import javax.jcr.nodetype.NodeType;
@@ -27,6 +26,33 @@ import org.apache.jackrabbit.oak.util.No
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static javax.jcr.PropertyType.BINARY;
+import static javax.jcr.PropertyType.BOOLEAN;
+import static javax.jcr.PropertyType.DATE;
+import static javax.jcr.PropertyType.DECIMAL;
+import static javax.jcr.PropertyType.DOUBLE;
+import static javax.jcr.PropertyType.LONG;
+import static javax.jcr.PropertyType.NAME;
+import static javax.jcr.PropertyType.PATH;
+import static javax.jcr.PropertyType.REFERENCE;
+import static javax.jcr.PropertyType.STRING;
+import static javax.jcr.PropertyType.TYPENAME_BINARY;
+import static javax.jcr.PropertyType.TYPENAME_BOOLEAN;
+import static javax.jcr.PropertyType.TYPENAME_DATE;
+import static javax.jcr.PropertyType.TYPENAME_DECIMAL;
+import static javax.jcr.PropertyType.TYPENAME_DOUBLE;
+import static javax.jcr.PropertyType.TYPENAME_LONG;
+import static javax.jcr.PropertyType.TYPENAME_NAME;
+import static javax.jcr.PropertyType.TYPENAME_PATH;
+import static javax.jcr.PropertyType.TYPENAME_REFERENCE;
+import static javax.jcr.PropertyType.TYPENAME_STRING;
+import static javax.jcr.PropertyType.TYPENAME_UNDEFINED;
+import static javax.jcr.PropertyType.TYPENAME_URI;
+import static javax.jcr.PropertyType.TYPENAME_WEAKREFERENCE;
+import static javax.jcr.PropertyType.UNDEFINED;
+import static javax.jcr.PropertyType.URI;
+import static javax.jcr.PropertyType.WEAKREFERENCE;
+
 /**
  * <pre>
  * [nt:propertyDefinition]
@@ -56,14 +82,56 @@ class PropertyDefinitionImpl extends Ite
         this.factory = factory;
     }
 
+    /**
+     * Returns the numeric constant value of the type with the specified name.
+     *
+     * In contrast to {@link javax.jcr.PropertyType#valueFromName(String)} this method
+     * requires all type names to be all upper case.
+     * See also: OAK-294 and http://java.net/jira/browse/JSR_283-811
+     *
+     * @param name the name of the property type.
+     * @return the numeric constant value.
+     * @throws IllegalArgumentException if {@code name} is not a valid property type name.
+     */
+    public static int valueFromName(String name) {
+        if (name.equals(TYPENAME_STRING.toUpperCase())) {
+            return STRING;
+        } else if (name.equals(TYPENAME_BINARY.toUpperCase())) {
+            return BINARY;
+        } else if (name.equals(TYPENAME_BOOLEAN.toUpperCase())) {
+            return BOOLEAN;
+        } else if (name.equals(TYPENAME_LONG.toUpperCase())) {
+            return LONG;
+        } else if (name.equals(TYPENAME_DOUBLE.toUpperCase())) {
+            return DOUBLE;
+        } else if (name.equals(TYPENAME_DECIMAL.toUpperCase())) {
+            return DECIMAL;
+        } else if (name.equals(TYPENAME_DATE.toUpperCase())) {
+            return DATE;
+        } else if (name.equals(TYPENAME_NAME.toUpperCase())) {
+            return NAME;
+        } else if (name.equals(TYPENAME_PATH.toUpperCase())) {
+            return PATH;
+        } else if (name.equals(TYPENAME_REFERENCE.toUpperCase())) {
+            return REFERENCE;
+        } else if (name.equals(TYPENAME_WEAKREFERENCE.toUpperCase())) {
+            return WEAKREFERENCE;
+        } else if (name.equals(TYPENAME_URI.toUpperCase())) {
+            return URI;
+        } else if (name.equals(TYPENAME_UNDEFINED.toUpperCase())) {
+            return UNDEFINED;
+        } else {
+            throw new IllegalArgumentException("unknown type: " + name);
+        }
+    }
+
     @Override
     public int getRequiredType() {
         try {
-            return PropertyType.valueFromName(node.getString(
-                    "jcr:requiredType", PropertyType.TYPENAME_UNDEFINED));
+            return valueFromName(node.getString("jcr:requiredType", TYPENAME_UNDEFINED));
         } catch (IllegalArgumentException e) {
             log.warn("Unexpected jcr:requiredType value", e);
-            return PropertyType.UNDEFINED;
+            return UNDEFINED;
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/StringConstraint.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/StringConstraint.java?rev=1382793&r1=1382792&r2=1382793&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/StringConstraint.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/constraint/StringConstraint.java Mon Sep 10 12:27:38 2012
@@ -35,10 +35,7 @@ public class StringConstraint implements
     public StringConstraint(String definition) {
         Pattern p;
         try {
-            // FIXME matching case insensitive as a workaround for
-            // for OAK-294: nt:propertyDefinition has incorrect value constraints for property types
-            int ignoreCase = Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE;
-            p = Pattern.compile(definition, ignoreCase);
+            p = Pattern.compile(definition);
         }
         catch (PatternSyntaxException pse) {
             String msg = '\'' + definition + "' is not valid regular expression syntax";