[dna-commits] DNA SVN: r1046 - trunk/dna-jcr/src/main/java/org/jboss/dna/jcr.

dna-commits at lists.jboss.org dna-commits at lists.jboss.org
Thu Jun 11 17:23:34 EDT 2009


Author: bcarothers
Date: 2009-06-11 17:23:33 -0400 (Thu, 11 Jun 2009)
New Revision: 1046

Modified:
   trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/SessionCache.java
Log:
DNA-459 Mandatory Child Nodes Can Be Removed

Applied patch that conservatively inspects every changed node (and its parent) to determine if node type definitions are violated.

As an aside, by spec, DNA has to let mandatory child nodes be removed, it just cannot allow their parents to be saved if no replacement child node was re-added.

Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/SessionCache.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/SessionCache.java	2009-06-11 15:52:24 UTC (rev 1045)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/SessionCache.java	2009-06-11 21:23:33 UTC (rev 1046)
@@ -386,6 +386,12 @@
                                               boolean checkSns )
         throws ConstraintViolationException, ItemExistsException, RepositoryException {
 
+        assert nodeUuid != null;
+        
+        if (this.deletedNodes.containsKey(nodeUuid)) {
+            nodeUuid = this.deletedNodes.get(nodeUuid).getParent();
+        }
+        
         NodeInfo nodeInfo = findNodeInfo(nodeUuid);
         AbstractJcrNode node = findJcrNode(nodeUuid);
 
@@ -631,9 +637,9 @@
      */
     public void save() throws RepositoryException {
         if (operations.isExecuteRequired()) {
-            for (UUID changedUuid : changedNodes.keySet()) {
-                checkAgainstTypeDefinitions(changedUuid, false);
-            }
+			for (UUID changedUuid : this.changedNodes.keySet()) {
+            	checkAgainstTypeDefinitions(changedUuid, false);
+	        }
 
             // Execute the batched operations ...
             try {
@@ -726,6 +732,11 @@
              */
             Set<UUID> uuidsUnderBranch = new HashSet<UUID>();
             LinkedList<UUID> peersToCheck = new LinkedList<UUID>();
+         
+         	for (UUID changedUuid : branchUuids) {
+         		checkAgainstTypeDefinitions(changedUuid, false);
+	        }
+
             for (UUID branchUuid : branchUuids) {
                 uuidsUnderBranch.add(branchUuid);
                 ChangedNodeInfo changedNode = changedNodes.get(branchUuid);
@@ -749,12 +760,6 @@
                 }
             }
 
-            for (UUID changedUuid : uuidsUnderBranch) {
-                if (!this.deletedNodes.containsKey(changedUuid)) {
-                    checkAgainstTypeDefinitions(changedUuid, false);
-                }
-            }
-
             // Now execute the branch ...
             Graph.Batch branchBatch = store.batch(new BatchRequestBuilder(branchRequests));
             try {




More information about the dna-commits mailing list