[exo-jcr-commits] exo-jcr SVN: r779 - in jcr/branches/1.12.0-JBC/component/core/src: test/java/org/exoplatform/services/jcr/impl/storage/jbosscache and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Nov 19 10:15:18 EST 2009


Author: pnedonosko
Date: 2009-11-19 10:15:17 -0500 (Thu, 19 Nov 2009)
New Revision: 779

Modified:
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
   jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnectionTest.java
Log:
EXOJCR-203: Item existence detecting in add/delete

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java	2009-11-19 14:55:06 UTC (rev 778)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java	2009-11-19 15:15:17 UTC (rev 779)
@@ -29,6 +29,7 @@
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.jboss.cache.Cache;
+import org.jboss.cache.Fqn;
 import org.jboss.cache.Node;
 
 import java.io.Serializable;
@@ -37,6 +38,7 @@
 import java.util.Set;
 
 import javax.jcr.InvalidItemStateException;
+import javax.jcr.ItemExistsException;
 import javax.jcr.RepositoryException;
 import javax.jcr.lock.LockException;
 
@@ -99,12 +101,21 @@
             throw new RepositoryException("Node parent doesn't exist " + data.getQPath().getAsString());
          }
 
-         // add child to Parent 
-         Node<Serializable, Object> childNode =
-            parent.addChild(makeChildNodeFqn(data.getQPath().getEntries()[data.getQPath().getEntries().length - 1]));
+         final Fqn<String> name =
+            makeChildNodeFqn(data.getQPath().getEntries()[data.getQPath().getEntries().length - 1]);
 
-         // set child id attr 
-         childNode.put(ITEM_ID, data.getIdentifier());
+         if (parent.hasChild(name))
+         {
+            throw new ItemExistsException("Node already exists " + data.getQPath().getAsString());
+         }
+         else
+         {
+            // add child to Parent 
+            Node<Serializable, Object> childNode = parent.addChild(name);
+
+            // set child id attr 
+            childNode.put(ITEM_ID, data.getIdentifier());
+         }
       }
 
       // add in NODES
@@ -124,11 +135,19 @@
       Node<Serializable, Object> parent = nodesRoot.getChild(makeNodeFqn(data.getParentIdentifier()));
       if (parent == null)
       {
-         throw new RepositoryException("Property parent doesn't exist " + data.getQPath().getAsString());
+         throw new RepositoryException("Property's parent doesn't exist " + data.getQPath().getAsString());
       }
 
       // add to parent's properties attr
-      parent.put(data.getQPath().getName().getAsString(), data.getIdentifier());
+      String propName = data.getQPath().getName().getAsString();
+      if (parent.get(propName) == null)
+      {
+         parent.put(propName, data.getIdentifier());
+      }
+      else
+      {
+         throw new ItemExistsException("Property already exists " + data.getQPath().getAsString());
+      }
 
       // add in PROPERTIES
       Node<Serializable, Object> prop = propsRoot.addChild(makePropFqn(data.getIdentifier()));
@@ -153,9 +172,12 @@
          }
 
          // remove child on Parent
-         // TODO validate does deleted
-         boolean removed =
-            parent.removeChild(makeChildNodeFqn(data.getQPath().getEntries()[data.getQPath().getEntries().length - 1]));
+         if (!parent
+            .removeChild(makeChildNodeFqn(data.getQPath().getEntries()[data.getQPath().getEntries().length - 1])))
+         {
+            throw new InvalidItemStateException("Node's doesn't exist or deleted by another Session "
+               + data.getQPath().getAsString());
+         }
       }
 
       // remove from NODES
@@ -179,7 +201,11 @@
 
       // remove from parent's properties attr
       // TODO validate does deleted
-      Object prev = parent.remove(data.getQPath().getName().getAsString());
+      if (parent.remove(data.getQPath().getName().getAsString()) == null)
+      {
+         throw new InvalidItemStateException("Property doesn't exist or deleted by another Session "
+            + data.getQPath().getAsString());
+      }
 
       // remove from PROPERTIES
       boolean removed = propsRoot.removeChild(makePropFqn(data.getIdentifier()));

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnectionTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnectionTest.java	2009-11-19 14:55:06 UTC (rev 778)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnectionTest.java	2009-11-19 15:15:17 UTC (rev 779)
@@ -640,6 +640,8 @@
          conn.add(new TransientNodeData(Constants.JCR_SYSTEM_PATH, Constants.SYSTEM_UUID, 1, Constants.NT_UNSTRUCTURED,
                   new InternalQName[0], 0, Constants.ROOT_UUID, new AccessControlList()));
          
+         conn.commit();
+         
          fail("The node jcr:system shouldnot be save");
       } catch (Exception e) {
          //ok



More information about the exo-jcr-commits mailing list