You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2009/05/08 10:51:00 UTC
svn commit: r772892 - in /jackrabbit/trunk/jackrabbit-jcr2spi/src:
main/java/org/apache/jackrabbit/jcr2spi/operation/
main/java/org/apache/jackrabbit/jcr2spi/state/
test/java/org/apache/jackrabbit/jcr2spi/
Author: angela
Date: Fri May 8 08:51:00 2009
New Revision: 772892
URL: http://svn.apache.org/viewvc?rev=772892&view=rev
Log:
JCR-2005: JCR2SPI: Remove validation check for same-named Node and Property
Modified:
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTest.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/WorkspaceMoveTest.java
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java?rev=772892&r1=772891&r2=772892&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java Fri May 8 08:51:00 2009
@@ -182,10 +182,6 @@
if (sessionMove) {
NodeEntry destEntry = (NodeEntry) destParentState.getHierarchyEntry();
- if (destEntry.hasPropertyEntry(destName)) {
- // TODO: remove for 283
- throw new ItemExistsException("Move destination already exists (Property).");
- }
// force childnodeentries list to be present before the move is executed
// on the hierarchy entry.
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java?rev=772892&r1=772891&r2=772892&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java Fri May 8 08:51:00 2009
@@ -546,13 +546,12 @@
*/
private void checkCollision(NodeState parentState, Name propertyName) throws ItemExistsException, RepositoryException {
NodeEntry parentEntry = (NodeEntry) parentState.getHierarchyEntry();
- // check for name collisions with existing child nodes
- if (parentEntry.hasNodeEntry(propertyName)) {
- String msg = "Child node with name '" + propertyName + "' already exists.";
- log.debug(msg);
- throw new RepositoryException(msg);
- }
- // check for name collisions with existing properties
+ // NOTE: check for name collisions with existing child node has been
+ // removed as with JSR 283 having same-named node and property can be
+ // allowed. thus delegate the correspoding validation to the underlying
+ // SPI implementation.
+
+ // check for name collisions with an existing property
PropertyEntry pe = parentEntry.getPropertyEntry(propertyName);
if (pe != null) {
try {
@@ -575,13 +574,13 @@
* @throws NoSuchNodeTypeException
*/
private void checkCollision(NodeState parentState, Name nodeName, Name nodeTypeName) throws RepositoryException, ConstraintViolationException, NoSuchNodeTypeException {
- if (parentState.hasPropertyName(nodeName)) {
- // there's already a property with that name
- throw new ItemExistsException("cannot add child node '"
- + nodeName.getLocalName() + "' to " + safeGetJCRPath(parentState)
- + ": colliding with same-named existing property");
+ // NOTE: check for name collisions with existing child property has been
+ // removed as with JSR 283 having same-named node and property may be
+ // allowed. thus delegate the correspoding validation to the underlying
+ // SPI implementation.
- } else if (parentState.hasChildNodeEntry(nodeName, Path.INDEX_DEFAULT)) {
+ // check for conflict with existing same-name sibling node.
+ if (parentState.hasChildNodeEntry(nodeName, Path.INDEX_DEFAULT)) {
// retrieve the existing node state that ev. conflicts with the new one.
try {
NodeState conflictingState = parentState.getChildNodeState(nodeName, Path.INDEX_DEFAULT);
@@ -591,9 +590,9 @@
// check same-name sibling setting of both target and existing node
if (!(conflictDef.allowsSameNameSiblings() && newDef.allowsSameNameSiblings())) {
throw new ItemExistsException("Cannot add child node '"
- + nodeName.getLocalName() + "' to "
- + safeGetJCRPath(parentState)
- + ": colliding with same-named existing node.");
+ + nodeName.getLocalName() + "' to "
+ + safeGetJCRPath(parentState)
+ + ": colliding with same-named existing node.");
}
} catch (ItemNotFoundException e) {
// ignore: conflicting doesn't exist any more
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTest.java?rev=772892&r1=772891&r2=772892&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveTest.java Fri May 8 08:51:00 2009
@@ -27,6 +27,7 @@
import javax.jcr.Item;
import javax.jcr.Property;
import javax.jcr.ItemExistsException;
+import javax.jcr.Repository;
/**
* <code>MoveTest</code>...
@@ -232,10 +233,11 @@
/**
* Tries to move a node using <code>{@link javax.jcr.Session#move(String src, String dest)}
* </code> to a location where a property already exists with same name.
- * <br/> <br/>
- * This should throw an <code>{@link javax.jcr.ItemExistsException}</code>.
+ * <br/>
+ * With JCR 1.0 this should throw an <code>{@link javax.jcr.ItemExistsException}</code>.
+ * With JCR 2.0 this must succeed.
*/
- public void testMovePropertyExistsException() throws RepositoryException, NotExecutableException {
+ public void testMovePropertyExists() throws RepositoryException, NotExecutableException {
// try to create a property with the name of the node to be moved
// to the destination parent
Property destProperty;
@@ -245,12 +247,18 @@
throw new NotExecutableException("Cannot create property with name '" +nodeName2+ "' and value 'anyString' at move destination.");
}
- try {
- // move the node
+ if ("1.0".equals(helper.getRepository().getDescriptor(Repository.SPEC_VERSION_DESC))) {
+ try {
+ // move the node
+ doMove(moveNode.getPath(), destProperty.getPath());
+ fail("Moving a node to a location where a property exists must throw ItemExistsException");
+ } catch (ItemExistsException e) {
+ // ok, works as expected
+ }
+ } else {
+ // move the node: same name property and node must be supported
+ // see Issue 725
doMove(moveNode.getPath(), destProperty.getPath());
- fail("Moving a node to a location where a property exists must throw ItemExistsException");
- } catch (ItemExistsException e) {
- // ok, works as expected
}
}
}
\ No newline at end of file
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java?rev=772892&r1=772891&r2=772892&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java Fri May 8 08:51:00 2009
@@ -56,7 +56,7 @@
suite.addTestSuite(MoveTreeTest.class);
suite.addTestSuite(MoveNewTreeTest.class);
suite.addTestSuite(MoveMultipleTest.class);
- //suite.addTestSuite(WorkspaceMoveTest.class); // see JCR-1276
+ suite.addTestSuite(WorkspaceMoveTest.class);
suite.addTestSuite(RevertMoveTest.class);
suite.addTestSuite(MoveToNewTest.class);
suite.addTestSuite(MoveCombinedTest.class);
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/WorkspaceMoveTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/WorkspaceMoveTest.java?rev=772892&r1=772891&r2=772892&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/WorkspaceMoveTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/WorkspaceMoveTest.java Fri May 8 08:51:00 2009
@@ -21,6 +21,7 @@
import javax.jcr.RepositoryException;
import javax.jcr.Property;
import javax.jcr.ItemExistsException;
+import javax.jcr.Repository;
/**
* <code>WorkspaceMoveTest</code>...
@@ -40,9 +41,10 @@
* Tries to move a node using to a location where a property already exists
* with same name.
* <br/> <br/>
- * This should throw an <code>{@link javax.jcr.ItemExistsException}</code>.
+ * With JCR 1.0 this should throw an <code>{@link javax.jcr.ItemExistsException}</code>.
+ * With JCR 2.0 this must succeed.
*/
- public void testMovePropertyExistsException() throws RepositoryException, NotExecutableException {
+ public void testMovePropertyExists() throws RepositoryException, NotExecutableException {
// try to create a property with the name of the node to be moved
// to the destination parent
Property destProperty;
@@ -53,12 +55,17 @@
throw new NotExecutableException("Cannot create property with name '" +nodeName2+ "' and value 'anyString' at move destination.");
}
- try {
- // move the node
+ if ("1.0".equals(helper.getRepository().getDescriptor(Repository.SPEC_VERSION_DESC))) {
+ try {
+ // move the node
+ doMove(moveNode.getPath(), destProperty.getPath());
+ fail("Moving a node to a location where a property exists must throw ItemExistsException");
+ } catch (ItemExistsException e) {
+ // ok, works as expected
+ }
+ } else {
+ // JCR 2.0 move the node: same name property and node must be supported
doMove(moveNode.getPath(), destProperty.getPath());
- fail("Moving a node to a location where a property exists must throw ItemExistsException");
- } catch (ItemExistsException e) {
- // ok, works as expected
}
}
@@ -74,12 +81,17 @@
// workspace-move the node (must succeed)
doMove(moveNode.getPath(), destProperty.getPath());
- try {
- // saving transient new property must fail
- destParentNode.save();
- fail("Saving new transient property must fail");
- } catch (RepositoryException e) {
- // ok.
- }
+ if ("1.0".equals(helper.getRepository().getDescriptor(Repository.SPEC_VERSION_DESC))) {
+ try {
+ // saving transient new property must fail
+ destParentNode.save();
+ fail("Saving new transient property must fail");
+ } catch (RepositoryException e) {
+ // ok.
+ }
+ } else {
+ // JCR 2.0: saving must succeed.
+ destParentNode.save();
+ }
}
}
\ No newline at end of file