You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2004/12/10 12:07:36 UTC

svn commit: r111495 - /incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java

Author: stefan
Date: Fri Dec 10 03:07:35 2004
New Revision: 111495

URL: http://svn.apache.org/viewcvs?view=rev&rev=111495
Log:
fixing JIRA issue JCR-27: ArrayIndexOutofBoundException while setting a reference property
http://nagoya.apache.org/jira/browse/JCR-27
Modified:
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java
Url: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java?view=diff&rev=111495&p1=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java&r1=111494&p2=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java&r2=111495
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java	Fri Dec 10 03:07:35 2004
@@ -466,8 +466,8 @@
          *
          * for every transient property:
          * - check the WRITE permission
-         * - check if the property value satisfies the value constraints specified
-         *   in the property's definition
+         * - check if the property value satisfies the value constraints
+         *   specified in the property's definition
          *
          * note that the protected flag is checked in Node.addNode/Node.remove
          * (for adding/removing child entries of a node), in
@@ -487,17 +487,21 @@
                 NodeImpl node = (NodeImpl) itemMgr.getItem(id);
                 NodeDef def = node.getDefinition();
                 NodeTypeImpl nt = (NodeTypeImpl) node.getPrimaryNodeType();
-                // if the transient node was added (i.e. if it is 'new'),
-                // check its node's node type against the required node type
-                // in its definition
+                /**
+                 * if the transient node was added (i.e. if it is 'new'),
+                 * check its node's node type against the required node type
+                 * in its definition
+                 */
                 NodeType[] nta = def.getRequiredPrimaryTypes();
                 for (int i = 0; i < nta.length; i++) {
                     NodeTypeImpl ntReq = (NodeTypeImpl) nta[i];
                     if (nodeState.getStatus() == ItemState.STATUS_NEW
                             && !(nt.getQName().equals(ntReq.getQName())
                             || nt.isDerivedFrom(ntReq.getQName()))) {
-                        // the transient node's node type does not satisfy the
-                        // 'required primary types' constraint
+                        /**
+                         * the transient node's node type does not satisfy the
+                         * 'required primary types' constraint
+                         */
                         String msg = node.safeGetJCRPath() + " must be of node type " + ntReq.getName();
                         log.warn(msg);
                         throw new ConstraintViolationException(msg);
@@ -513,8 +517,10 @@
                         throw new AccessDeniedException(msg);
                     }
 
-                    // no need to check the protected flag
-                    // as this is checked in NodeImpl.remove(String)
+                    /**
+                     * no need to check the protected flag as this is checked
+                     * in NodeImpl.remove(String)
+                     */
                 }
 
                 // check child additions
@@ -578,10 +584,12 @@
                     }
                 }
 
-                // check value constraints
-                // (no need to check value constraints of protected properties
-                // as those are set by the implementation only, i.e. they
-                // cannot be set by the user through the api)
+                /**
+                 * check value constraints
+                 * (no need to check value constraints of protected properties
+                 * as those are set by the implementation only, i.e. they
+                 * cannot be set by the user through the api)
+                 */
                 if (!def.isProtected()) {
                     String[] constraints = def.getValueConstraints();
                     if (constraints != null) {
@@ -595,21 +603,28 @@
                             throw new ConstraintViolationException(msg);
                         }
 
-                        // need to manually check REFERENCE value constraints
-                        // as this requires a session (target node needs to
-                        // be checked)
-                        if (def.getRequiredType() == PropertyType.REFERENCE) {
+                        /**
+                         * need to manually check REFERENCE value constraints
+                         * as this requires a session (target node needs to
+                         * be checked)
+                         */
+                        if (constraints.length > 0
+                                && def.getRequiredType() == PropertyType.REFERENCE) {
                             for (int i = 0; i < values.length; i++) {
                                 boolean satisfied = false;
                                 try {
                                     UUID targetUUID = (UUID) values[i].internalValue();
                                     Node targetNode = session.getNodeByUUID(targetUUID.toString());
-                                    // constraints are OR-ed, i.e. at least one
-                                    // has to be satisfied
+                                    /**
+                                     * constraints are OR-ed, i.e. at least one
+                                     * has to be satisfied
+                                     */
                                     for (int j = 0; j < constraints.length; j++) {
-                                        // a REFERENCE value constraint specifies
-                                        // the name of the required node type of
-                                        // the target node
+                                        /**
+                                         * a REFERENCE value constraint specifies
+                                         * the name of the required node type of
+                                         * the target node
+                                         */
                                         String ntName = constraints[j];
                                         if (targetNode.isNodeType(ntName)) {
                                             satisfied = true;
@@ -634,8 +649,10 @@
                     }
                 }
 
-                // no need to check the protected flag
-                // as this is checked in PropertyImpl.setValue(Value)
+                /**
+                 * no need to check the protected flag* as this is checked
+                 * in PropertyImpl.setValue(Value)
+                 */
             }
         }
     }
@@ -1220,9 +1237,12 @@
                     itemStateMgr.disposeTransientItemState(transientState);
                 }
 
-                // all changes are persisted, now dispatch events
-                // forward this to the session to let it decide on the right time for those
-                // events to be dispatched in case of transactional support
+                /**
+                 * all changes are persisted, now dispatch events;
+                 * forward this to the session to let it decide on the right
+                 * time for those events to be dispatched in case of
+                 * transactional support
+                 */
                 session.dispatch(events);
             } finally {
                 // turn off temporary path caching