[exo-jcr-commits] exo-jcr SVN: r5264 - in jcr/trunk/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/api/nodetypes and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Dec 5 11:04:48 EST 2011


Author: tolusha
Date: 2011-12-05 11:04:47 -0500 (Mon, 05 Dec 2011)
New Revision: 5264

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/NodeTypeImpl.java
   jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/nodetypes/TestNodeDefinition.java
Log:
EXOJCR-1670: avoid NPE when try to check can set multi-valued property when property definition not found

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/NodeTypeImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/NodeTypeImpl.java	2011-12-05 12:47:30 UTC (rev 5263)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/NodeTypeImpl.java	2011-12-05 16:04:47 UTC (rev 5264)
@@ -206,37 +206,37 @@
          InternalQName pname = locationFactory.parseJCRName(propertyName).getInternalName();
 
          PropertyDefinitionDatas pdefs = nodeTypeDataManager.getPropertyDefinitions(pname, nodeTypeData.getName());
-         PropertyDefinitionData pd = pdefs.getDefinition(true);
-         if (pd != null)
+         if (pdefs != null)
          {
-            if (pd.isProtected())
+            PropertyDefinitionData pd = pdefs.getDefinition(true);
+            if (pd != null)
             {
-               // can set (edit)
-               return false;
-            }
-            else if (values != null)
-            {
-               // can set (add or edit)
-               int res = 0;
-               for (Value value : values)
+               if (pd.isProtected())
                {
-                  if (canSetPropertyForType(pd.getRequiredType(), value, pd.getValueConstraints()))
+                  // can set (edit)
+                  return false;
+               }
+               else if (values != null)
+               {
+                  // can set (add or edit)
+                  int res = 0;
+                  for (Value value : values)
                   {
-                     res++;
+                     if (canSetPropertyForType(pd.getRequiredType(), value, pd.getValueConstraints()))
+                     {
+                        res++;
+                     }
                   }
+                  return res == values.length;
                }
-               return res == values.length;
+               else
+               {
+                  // can remove
+                  return !pd.isMandatory();
+               }
             }
-            else
-            {
-               // can remove
-               return !pd.isMandatory();
-            }
          }
-         else
-         {
-            return false;
-         }
+         return false;
       }
       catch (RepositoryException e)
       {

Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/nodetypes/TestNodeDefinition.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/nodetypes/TestNodeDefinition.java	2011-12-05 12:47:30 UTC (rev 5263)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/nodetypes/TestNodeDefinition.java	2011-12-05 16:04:47 UTC (rev 5264)
@@ -24,6 +24,7 @@
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
+import javax.jcr.Value;
 import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.version.Version;
 
@@ -146,4 +147,16 @@
          // ok
       }
    }
+
+   /** 
+    * Testing method canSetProperty for class NodeType. 
+    * when we set the multivalue property....... 
+    * @throws Exception some exception that occurred in the test. 
+    */
+   public void testSetNotAllowedMultiValueProperty() throws Exception
+   {
+      Node n = session.getRootNode().addNode("abc", "nt:folder");
+      session.save();
+      assertFalse(n.getPrimaryNodeType().canSetProperty("test", (Value[])null));
+   }
 }



More information about the exo-jcr-commits mailing list