[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