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/17 14:25:30 UTC

svn commit: r122642 - /incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java /incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/PropDef.java

Author: stefan
Date: Fri Dec 17 05:25:26 2004
New Revision: 122642

URL: http://svn.apache.org/viewcvs?view=rev&rev=122642
Log:
allow re-registering node type definition if change is trivial
Modified:
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/PropDef.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java
Url: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java?view=diff&rev=122642&p1=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java&r1=122641&p2=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java&r2=122642
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java	Fri Dec 17 05:25:26 2004
@@ -346,7 +346,7 @@
         }
         registeredNTDefs.put(name, ntd);
 
-        // store poperty & child node definitions of new node type by id
+        // store property & child node definitions of new node type by id
         PropDef[] pda = ntd.getPropertyDefs();
         for (int i = 0; i < pda.length; i++) {
             PropDef def = pda[i];
@@ -374,8 +374,16 @@
 
         NodeTypeDef ntd = (NodeTypeDef) registeredNTDefs.get(name);
         registeredNTDefs.remove(name);
-        // remove all affected effective node types from aggregates cache
+        /**
+         * remove all affected effective node types from aggregates cache
+         * (collect keys first to prevent ConcurrentModificationException)
+         */
         Iterator iter = entCache.keys();
+        ArrayList keys = new ArrayList();
+        while (iter.hasNext()) {
+            keys.add(iter.next());
+        }
+        iter = keys.iterator();
         while (iter.hasNext()) {
             WeightedKey k = (WeightedKey) iter.next();
             EffectiveNodeType ent = (EffectiveNodeType) entCache.get(k);
@@ -384,7 +392,7 @@
             }
         }
 
-        // remove poperty & child node definitions
+        // remove property & child node definitions
         PropDef[] pda = ntd.getPropertyDefs();
         for (int i = 0; i < pda.length; i++) {
             PropDefId id = new PropDefId(pda[i]);
@@ -516,12 +524,6 @@
             throw new InvalidNodeTypeDefException(msg);
         }
 
-        if (registeredNTDefs.containsKey(name)) {
-            String msg = name + " already exists";
-            log.error(msg);
-            throw new InvalidNodeTypeDefException(msg);
-        }
-
         // validate supertypes
         QName[] supertypes = ntd.getSupertypes();
         if (supertypes != null && supertypes.length > 0) {
@@ -1292,6 +1294,9 @@
          */
         NodeTypeDef ntdOld = (NodeTypeDef) registeredNTDefs.get(name);
         NodeTypeDefDiff diff = NodeTypeDefDiff.create(ntdOld, ntd);
+        if (!diff.isModified()) {
+            throw new RepositoryException(name.toString() + ": not modified");
+        }
         if (diff.isTrivial()) {
             /**
              * the change is trivial and has no effect on current content

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/PropDef.java
Url: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/PropDef.java?view=diff&rev=122642&p1=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/PropDef.java&r1=122641&p2=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/PropDef.java&r2=122642
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/PropDef.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/PropDef.java	Fri Dec 17 05:25:26 2004
@@ -27,7 +27,7 @@
 
     private int requiredType = PropertyType.UNDEFINED;
     private ValueConstraint[] valueConstraints = new ValueConstraint[0];
-    private InternalValue[] defaultValues = null;
+    private InternalValue[] defaultValues = new InternalValue[0];
     private boolean multiple = false;
 
     /**
@@ -62,14 +62,16 @@
      * @param valueConstraints
      */
     public void setValueConstraints(ValueConstraint valueConstraints[]) {
-        this.valueConstraints = valueConstraints;
+        this.valueConstraints =
+                (valueConstraints == null) ? new ValueConstraint[0] : valueConstraints;
     }
 
     /**
      * @param defaultValues
      */
     public void setDefaultValues(InternalValue[] defaultValues) {
-        this.defaultValues = defaultValues;
+        this.defaultValues =
+                (defaultValues == null) ? new InternalValue[0] : defaultValues;
     }
 
     /**