Author: nzamosenchuk
Date: 2011-04-27 07:42:23 -0400 (Wed, 27 Apr 2011)
New Revision: 4308
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/lock/TestLock.java
Log:
JCR-1615: When calling checkIn on child with locked parent, need to check is child is
locked, but not the parent. Test added also.
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2011-04-27
07:54:11 UTC (rev 4307)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2011-04-27
11:42:23 UTC (rev 4308)
@@ -480,7 +480,7 @@
throw new VersionException("Node has jcr:mergeFailed " + getPath());
}
- if (!parent().checkLocking())
+ if (!checkLocking())
{
throw new LockException("Node " + parent().getPath() + " is
locked ");
}
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/lock/TestLock.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/lock/TestLock.java 2011-04-27
07:54:11 UTC (rev 4307)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/lock/TestLock.java 2011-04-27
11:42:23 UTC (rev 4308)
@@ -50,17 +50,21 @@
super.setUp();
if (lockedNode == null)
+ {
try
{
lockedNode = root.addNode("locked node");
if (lockedNode.canAddMixin("mix:lockable"))
+ {
lockedNode.addMixin("mix:lockable");
+ }
root.save();
}
catch (RepositoryException e)
{
fail("Child node must be accessible and readable. But error occurs:
" + e);
}
+ }
}
/**
@@ -223,7 +227,9 @@
Session session1 = repository.login(new CredentialsImpl("admin",
"admin".toCharArray()), "ws");
Node nodeToLockSession1 =
session1.getRootNode().addNode("nodeToLockSession1");
if (nodeToLockSession1.canAddMixin("mix:lockable"))
+ {
nodeToLockSession1.addMixin("mix:lockable");
+ }
session1.save();
Lock lock = nodeToLockSession1.lock(true, false);// boolean isSessionScoped
// in ECM we are using lock(true, true) without saving lockToken
@@ -317,7 +323,9 @@
Session session1 = repository.login(new CredentialsImpl("admin",
"admin".toCharArray()), "ws");
Node nodeToCopyLock =
session1.getRootNode().addNode("node2testCopyLockedNode");
if (nodeToCopyLock.canAddMixin("mix:lockable"))
+ {
nodeToCopyLock.addMixin("mix:lockable");
+ }
session1.save();
Lock lock = nodeToCopyLock.lock(true, false);// boolean isSessionScoped
// in ECM we are using lock(true, true) without saving lockToken
@@ -502,5 +510,37 @@
}
}
}
-
+
+ public void testCheckInWhenParentLocked() throws RepositoryException
+ {
+ // creating node that is going to be locked, adding a child also.
+
+ Session session1 = repository.login(new CredentialsImpl("root",
"exo".toCharArray()), "ws");
+ Node parentLockedNodeSession1 =
session1.getRootNode().addNode("testCheckInWhenParentLocked");
+ parentLockedNodeSession1.addMixin("mix:lockable");
+ parentLockedNodeSession1.addMixin("mix:versionable");
+ Node childNodeSession1 = parentLockedNodeSession1.addNode("child");
+ childNodeSession1.addMixin("mix:versionable");
+ childNodeSession1.setProperty("property", "value");
+ session1.save();
+ // locking it
+ parentLockedNodeSession1.lock(false, false);
+ session1.save();
+ assertTrue(parentLockedNodeSession1.isLocked());
+
+ Node parentLockedNode =
session.getRootNode().getNode("testCheckInWhenParentLocked");
+ Node childNode = parentLockedNode.getNode("child");
+
+ try
+ {
+ childNode.checkin();
+ }
+ catch (LockException e)
+ {
+ fail("CheckIn shouldn't throw a lockException if parent node locked
with isDeep=false");
+ }
+
+ session1.logout();
+
+ }
}
Show replies by date