You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/09/08 18:09:45 UTC
svn commit: r812570 [20/24] - in /jackrabbit/sandbox/JCR-1456: ./
jackrabbit-api/ jackrabbit-api/src/main/appended-resources/
jackrabbit-api/src/main/appended-resources/META-INF/
jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/ jackrabb...
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/QueryResultNodeIteratorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/QueryResultNodeIteratorTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/QueryResultNodeIteratorTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/QueryResultNodeIteratorTest.java Tue Sep 8 16:09:28 2009
@@ -71,7 +71,7 @@
/**
* Tests the method <code>NodeIterator.getPosition()</code>.
*/
- public void testGetPosition() throws RepositoryException {
+ public void testGetPosition() throws RepositoryException, NotExecutableException {
QueryResult rs = execute(xpathRoot + "//*", Query.XPATH);
// getPosition initially returns 0
@@ -89,8 +89,9 @@
/**
* Tests the method <code>NodeIterator.getPosition()</code> on an empty
* <code>NodeIterator</code>.
+ * @throws NotExecutableException
*/
- public void testGetPositionEmptyIterator() throws RepositoryException {
+ public void testGetPositionEmptyIterator() throws RepositoryException, NotExecutableException {
QueryResult rs = execute(xpathRoot + "/" + nodeName4, Query.XPATH);
NodeIterator it = rs.getNodes();
@@ -103,8 +104,9 @@
* Tests if a {@link java.util.NoSuchElementException} is thrown when {@link
* javax.jcr.NodeIterator#nextNode()} is called and there are no more nodes
* available.
+ * @throws NotExecutableException
*/
- public void testNoSuchElementException() throws RepositoryException {
+ public void testNoSuchElementException() throws RepositoryException, NotExecutableException {
NodeIterator it = execute(xpathRoot + "//*", Query.XPATH).getNodes();
while (it.hasNext()) {
it.nextNode();
@@ -119,8 +121,9 @@
/**
* Tests if {@link javax.jcr.NodeIterator#skip(long)} works correctly.
+ * @throws NotExecutableException
*/
- public void testSkip() throws RepositoryException {
+ public void testSkip() throws RepositoryException, NotExecutableException {
String query = xpathRoot + "//*";
QueryResult rs = execute(query, Query.XPATH);
NodeIterator it = rs.getNodes();
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJcrPathTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJcrPathTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJcrPathTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJcrPathTest.java Tue Sep 8 16:09:28 2009
@@ -66,7 +66,7 @@
String queryStatement = "select * from " + nodeTypeName;
// execute the search query
- Query query = session.getWorkspace().getQueryManager().createQuery(queryStatement, Query.SQL);
+ Query query = super.createQuery(queryStatement, Query.SQL);
QueryResult result = query.execute();
assertTrue("jcr:path must be present in query result row",
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java Tue Sep 8 16:09:28 2009
@@ -110,7 +110,8 @@
throws RepositoryException, NotExecutableException {
Node n1 = testRootNode.addNode(nodeName1, testNodeType);
ensureMixinType(n1, mixReferenceable);
- Node n2 = testRootNode.addNode(nodeName2, ntBase);
+ String nodetype = testNodeTypeNoChildren == null ? ntBase : testNodeTypeNoChildren;
+ Node n2 = testRootNode.addNode(nodeName2, nodetype);
ensureMixinType(n2, mixReferenceable);
testRootNode.save();
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLPathTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLPathTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLPathTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLPathTest.java Tue Sep 8 16:09:28 2009
@@ -21,6 +21,9 @@
import javax.jcr.NodeIterator;
import javax.jcr.Session;
import javax.jcr.util.TraversingItemVisitor;
+
+import org.apache.jackrabbit.test.NotExecutableException;
+
import java.util.ArrayList;
import java.util.List;
@@ -66,8 +69,9 @@
/**
* Tests if <somepath>/% returns the descendants of <somepath>.
+ * @throws NotExecutableException
*/
- public void testDescendantTestRoot() throws RepositoryException {
+ public void testDescendantTestRoot() throws RepositoryException, NotExecutableException {
String sql = getStatement(testRoot + "/%");
executeSqlQuery(session, sql, getDescendants(testRootNode));
}
@@ -75,8 +79,9 @@
/**
* Tests if <somepath>/% returns no nodes if node at <somepath>
* is a leaf.
+ * @throws NotExecutableException
*/
- public void testDescendantLeaf() throws RepositoryException {
+ public void testDescendantLeaf() throws RepositoryException, NotExecutableException {
// find leaf
Node leaf = testRootNode;
while (leaf.hasNodes()) {
@@ -90,8 +95,9 @@
* Tests if <somepath>/%/<nodename> OR <somepath>/<nodename>
* returns nodes with name <nodename> which are descendants of
* node at <code>testroot</code>.
+ * @throws NotExecutableException
*/
- public void testDescendantSelfTestRoot() throws RepositoryException {
+ public void testDescendantSelfTestRoot() throws RepositoryException, NotExecutableException {
// get first node which is two levels deeper than node at testroot
Node n = null;
for (NodeIterator it = testRootNode.getNodes(); it.hasNext();) {
@@ -118,8 +124,9 @@
/**
* Tests if /% AND NOT /%/% returns the child nodes of the root node.
+ * @throws NotExecutableException
*/
- public void testChildAxisRoot() throws RepositoryException {
+ public void testChildAxisRoot() throws RepositoryException, NotExecutableException {
String sql = getStatement("/%");
sql += " AND NOT " + jcrPath + " LIKE '/%/%'";
Node[] nodes = toArray(session.getRootNode().getNodes());
@@ -129,8 +136,9 @@
/**
* Tests if <somepath>/% AND NOT <somepath>/%/% returns the child
* nodes of node at <somepath>.
+ * @throws NotExecutableException
*/
- public void testChildAxisTestRoot() throws RepositoryException {
+ public void testChildAxisTestRoot() throws RepositoryException, NotExecutableException {
String sql = getStatement(testRoot + "/%");
sql += " AND NOT " + jcrPath + " LIKE '" + testRoot + "/%/%'";
Node[] nodes = toArray(testRootNode.getNodes());
@@ -140,8 +148,9 @@
/**
* Tests if <somepath>/% AND NOT <somepath>/%/% returns no nodes
* if the node at <somepath> is a leaf.
+ * @throws NotExecutableException
*/
- public void testChildAxisLeaf() throws RepositoryException {
+ public void testChildAxisLeaf() throws RepositoryException, NotExecutableException {
// find leaf
Node leaf = testRootNode;
while (leaf.hasNodes()) {
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/TextNodeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/TextNodeTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/TextNodeTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/TextNodeTest.java Tue Sep 8 16:09:28 2009
@@ -59,8 +59,9 @@
/**
* Tests if text() node test is equivalent with jcr:xmltext.
+ * @throws NotExecutableException
*/
- public void testTextNodeTest() throws RepositoryException {
+ public void testTextNodeTest() throws RepositoryException, NotExecutableException {
Node text1 = testRootNode.addNode(jcrXMLText);
text1.setProperty(jcrXMLCharacters, "foo");
testRootNode.save();
@@ -71,8 +72,9 @@
/**
* Tests if text() node test is equivalent with jcr:xmltext and will select
* multiple nodes with name jcr:xmltext.
+ * @throws NotExecutableException
*/
- public void testTextNodeTestMultiNodes() throws RepositoryException {
+ public void testTextNodeTestMultiNodes() throws RepositoryException, NotExecutableException {
Node text1 = testRootNode.addNode(jcrXMLText);
text1.setProperty(jcrXMLCharacters, "foo");
Node text2 = testRootNode.addNode(nodeName1, testNodeType).addNode(jcrXMLText);
@@ -85,8 +87,9 @@
/**
* Tests if text() node test is equivalent with jcr:xmltext and jcr:contains
* matches content in jcr:xmlcharacters property.
+ * @throws NotExecutableException
*/
- public void testTextNodeTestContains() throws RepositoryException {
+ public void testTextNodeTestContains() throws RepositoryException, NotExecutableException {
Node text1 = testRootNode.addNode(jcrXMLText);
text1.setProperty(jcrXMLCharacters, "the quick brown fox jumps over the lazy dog.");
Node text2 = testRootNode.addNode(nodeName1, testNodeType).addNode(jcrXMLText);
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java Tue Sep 8 16:09:28 2009
@@ -144,7 +144,7 @@
}
try {
String stmt = "SELECT * FROM [" + testNodeType + "] AS s " +
- "WHERE NAME(s) = " + literal.getString();
+ "WHERE NAME(s) = CAST(" + literal.getString() + " AS LONG)";
qm.createQuery(stmt, Query.JCR_SQL2).execute();
fail("NAME() comparison with LONG must fail with InvalidQueryException");
} catch (InvalidQueryException e) {
@@ -162,7 +162,7 @@
}
try {
String stmt = "SELECT * FROM [" + testNodeType + "] AS s " +
- "WHERE NAME(s) = " + literal.getString();
+ "WHERE NAME(s) = CAST(" + literal.getString() + " AS BOOLEAN)";
qm.createQuery(stmt, Query.JCR_SQL2).execute();
fail("NAME() comparison with BOOLEAN must fail with InvalidQueryException");
} catch (InvalidQueryException e) {
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/retention/AbstractRetentionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/retention/AbstractRetentionTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/retention/AbstractRetentionTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/retention/AbstractRetentionTest.java Tue Sep 8 16:09:28 2009
@@ -40,7 +40,12 @@
super.setUp();
- retentionMgr = getRetentionManager(superuser);
+ try {
+ retentionMgr = getRetentionManager(superuser);
+ } catch (NotExecutableException e) {
+ cleanUp();
+ throw e;
+ }
testNodePath = testRootNode.getPath();
}
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AbstractAccessControlTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AbstractAccessControlTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AbstractAccessControlTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AbstractAccessControlTest.java Tue Sep 8 16:09:28 2009
@@ -37,7 +37,12 @@
checkSupportedOption(Repository.OPTION_ACCESS_CONTROL_SUPPORTED);
super.setUp();
- acMgr = getAccessControlManager(superuser);
+ try {
+ acMgr = getAccessControlManager(superuser);
+ } catch (NotExecutableException e) {
+ cleanUp();
+ throw e;
+ }
}
protected static AccessControlManager getAccessControlManager(Session s) throws RepositoryException, NotExecutableException {
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/AbstractVersionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/AbstractVersionTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/AbstractVersionTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/AbstractVersionTest.java Tue Sep 8 16:09:28 2009
@@ -98,7 +98,9 @@
protected void tearDown() throws Exception {
// remove versionable nodes
try {
- versionableNode.remove();
+ if (versionableNode != null) {
+ versionableNode.remove();
+ }
testRootNode.getSession().save();
} catch (Exception e) {
log.println("Exception in tearDown: " + e.toString());
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/ActivitiesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/ActivitiesTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/ActivitiesTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/ActivitiesTest.java Tue Sep 8 16:09:28 2009
@@ -20,6 +20,7 @@
import javax.jcr.Property;
import javax.jcr.PropertyType;
import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NodeType;
import javax.jcr.version.VersionManager;
@@ -106,8 +107,13 @@
assertTrue("path for activity must be below " + PREFIX + ", but was " + an.getPath(), an.getPath().startsWith(PREFIX));
Node activities = superuser.getNode(PREFIX);
-
- assertFalse(activities.getPrimaryNodeType().canAddChildNode("foobar"));
+
+ try {
+ activities.addNode("foobar");
+ fail("/jcr:system/jcr:activities must be protected.");
+ } catch (RepositoryException e) {
+ // ok
+ }
}
finally {
if (an != null) {
@@ -147,6 +153,6 @@
}
}
}
-
+
}
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/RestoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/RestoreTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/RestoreTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/RestoreTest.java Tue Sep 8 16:09:28 2009
@@ -30,6 +30,7 @@
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.ItemExistsException;
import javax.jcr.NodeIterator;
+import javax.jcr.Session;
/**
* <code>RestoreTest</code> covers tests related to the restore methods available
@@ -150,7 +151,7 @@
*/
public void testRestoreOnCheckedInNodeJcr2_2() throws RepositoryException {
versionManager.checkin(versionableNode.getPath());
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
}
/**
@@ -197,7 +198,7 @@
* @throws RepositoryException
*/
public void testRestoreOnCheckedOutNodeJcr2_2() throws RepositoryException {
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
}
/**
@@ -244,7 +245,7 @@
* @throws RepositoryException
*/
public void testRestoreSetsIsCheckedOutToFalseJcr2_2() throws RepositoryException {
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
assertFalse("Restoring a node sets the jcr:isCheckedOut property to false", versionManager.isCheckedOut(versionableNode.getPath()));
}
@@ -296,7 +297,7 @@
* @throws RepositoryException
*/
public void testRestoreCorrectPropertyJcr2_2() throws RepositoryException {
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
String value = versionableNode.getProperty(propertyName1).getString();
assertEquals("Restoring a node must set the correct property.", propertyValue1, value);
}
@@ -351,7 +352,7 @@
* @throws javax.jcr.RepositoryException
*/
public void testRestoreSetsBaseVersionJcr2_2() throws RepositoryException {
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
Version baseV = versionManager.getBaseVersion(versionableNode.getPath());
assertTrue("Restoring a node must set node's base version in order to point to the restored version.", version.isSame(baseV));
}
@@ -421,7 +422,7 @@
// modify node without calling save()
try {
versionableNode.setProperty(propertyName1, propertyValue);
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
fail("InvalidItemStateException must be thrown on attempt to restore a node having any unsaved changes pending.");
} catch (InvalidItemStateException e) {
@@ -570,21 +571,6 @@
* @throws RepositoryException
* @see Node#restore(String, boolean)
*/
- public void testRestoreNonVersionableNodeJcr2() throws RepositoryException {
- try {
- versionManager.restore(nonVersionableNode.getPath(), version, true);
- fail("trying to restore on a non versionable node must throw UnsupportedRepositoryOperationException");
- } catch (UnsupportedRepositoryOperationException e) {
- //success
- }
- }
-
- /**
- * Test restoring on a non-versionable node.
- *
- * @throws RepositoryException
- * @see Node#restore(String, boolean)
- */
public void testRestoreNonVersionableNodeJcr2_2() throws RepositoryException {
try {
versionManager.restore(nonVersionableNode.getPath(), "foo", true);
@@ -632,21 +618,6 @@
* @throws RepositoryException
* @see Node#restore(Version, boolean)
*/
- public void testRestoreNonVersionableNode3Jcr2() throws RepositoryException {
- try {
- versionManager.restore(nonVersionableNode.getPath(), version, true);
- fail("Node.restore(Version, boolean) on a non versionable node must throw UnsupportedRepositoryOperationException");
- } catch (UnsupportedRepositoryOperationException e) {
- //success
- }
- }
-
- /**
- * Test restoring on a non-versionable node.
- *
- * @throws RepositoryException
- * @see Node#restore(Version, boolean)
- */
public void testRestoreNonVersionableNode3Jcr2_2() throws RepositoryException {
try {
versionManager.restore(nonVersionableNode.getPath(), version.getName(), true);
@@ -753,7 +724,7 @@
versionManager.checkout(versionableNode.getPath());
superuser.move(naa.getPath(), versionableNode2.getPath() + "/" + naa.getName());
superuser.save();
- versionManager.restore(versionableNode.getPath(), v, false);
+ versionManager.restore(v, false);
fail("Node.restore( Version, boolean ): An ItemExistsException must be thrown if the node to be restored already exsits and removeExisting was set to false.");
} catch (ItemExistsException e) {
@@ -831,6 +802,37 @@
}
}
+ public void testRestoreRemoved() throws RepositoryException {
+ Node parent = versionableNode.getParent();
+ String oldName = versionableNode.getName();
+ Version v1 = versionableNode.checkin();
+ versionableNode.remove();
+ versionableNode = null;
+ parent.getSession().save();
+
+ parent.restore(v1, oldName, true);
+
+ versionableNode = parent.getNode(oldName);
+
+ String value = versionableNode.getProperty(propertyName1).getString();
+ assertEquals("Restoring a node must set the correct property.", propertyValue2, value);
+ }
+
+ public void testRestoreRemovedJcr2() throws RepositoryException {
+ String path = versionableNode.getPath();
+ Version v1 = versionManager.checkin(path);
+ versionableNode.remove();
+ versionableNode = null;
+ superuser.save();
+
+ versionManager.restore(path, v1, true);
+
+ versionableNode = superuser.getNode(path);
+
+ String value = versionableNode.getProperty(propertyName1).getString();
+ assertEquals("Restoring a node must set the correct property.", propertyValue2, value);
+ }
+
public void testRestoreChild1Jcr2() throws RepositoryException {
versionableNode.addNode("child1");
versionableNode.getSession().save();
@@ -858,14 +860,14 @@
versionManager.checkout(versionableNode.getPath());
Version v2 = versionManager.checkin(versionableNode.getPath());
- versionManager.restore(versionableNode.getPath(), v1, true);
+ versionManager.restore(v1, true);
assertTrue("Node.restore('1.2') must not remove child node.", versionableNode.hasNode("child1"));
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
assertFalse("Node.restore('1.0') must remove child node.", versionableNode.hasNode("child1"));
try {
- versionManager.restore(versionableNode.getPath(), v2, true);
+ versionManager.restore(v2, true);
} catch (RepositoryException e) {
fail("Node.restore('1.3') must fail.");
}
@@ -973,10 +975,21 @@
child1 = versionableNode.getNode(nodeName4);
assertEquals("Node.restore('test') must restore child node version 1.0.", v1Child.getName(), child1.getBaseVersion().getName());
+ // JSR283 is more clear about restoring versionable OPV=VERSION nodes
+ // and states that an existing one is not restored when the parent
+ // is restored (see 15.7.5 Chained Versions on Restore)
+
+ // Old JSR170 version:
// restore V2 via name. child should be 1.1
+ // versionableNode.restore(v2, true);
+ // child1 = versionableNode.getNode(nodeName4);
+ // assertEquals("Node.restore('foo') must restore child node version 1.1.", v11Child.getName(), child1.getBaseVersion().getName());
+
+ // New JSR283 version:
+ // restore V2 via name. child should still be be 1.0
versionableNode.restore(v2, true);
child1 = versionableNode.getNode(nodeName4);
- assertEquals("Node.restore('foo') must restore child node version 1.1.", v11Child.getName(), child1.getBaseVersion().getName());
+ assertEquals("Node.restore('foo') must not restore child node and keep version 1.0.", v1Child.getName(), child1.getBaseVersion().getName());
}
/**
@@ -1129,7 +1142,7 @@
versionManager.checkout(testRoot.getPath());
// restore version 1.0
- versionManager.restore(testRoot.getPath(), v1, true);
+ versionManager.restore(v1, true);
// check order
NodeIterator iter = testRoot.getNodes();
@@ -1334,7 +1347,7 @@
versionManager.checkin(testRoot.getPath());
// restore version 1.0
- versionManager.restore(testRoot.getPath(), v1, true);
+ versionManager.restore(v1, true);
// check order
NodeIterator iter = testRoot.getNodes();
@@ -1375,7 +1388,7 @@
versionManager.checkin(testRoot.getPath());
// restore version 1.0
- versionManager.restore(testRoot.getPath(), v1, true);
+ versionManager.restore(v1, true);
// check order
NodeIterator iter = testRoot.getNodes();
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/TestAll.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/TestAll.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/TestAll.java Tue Sep 8 16:09:28 2009
@@ -64,12 +64,15 @@
suite.addTestSuite(MergeDoneMergeTest.class);
suite.addTestSuite(MergeNodeIteratorTest.class);
suite.addTestSuite(MergeNodeTest.class);
+ suite.addTestSuite(MergeShallowTest.class);
+ suite.addTestSuite(MergeActivityTest.class);
suite.addTestSuite(MergeNonVersionableSubNodeTest.class);
suite.addTestSuite(MergeSubNodeTest.class);
// JCR 2.0
suite.addTestSuite(ActivitiesTest.class);
+ suite.addTestSuite(ConfigurationsTest.class);
return suite;
}
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/VersionHistoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/VersionHistoryTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/VersionHistoryTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/VersionHistoryTest.java Tue Sep 8 16:09:28 2009
@@ -999,11 +999,6 @@
fail("VersionHistory.restore(String,boolean) did not throw an UnsupportedRepositoryOperationException");
} catch (UnsupportedRepositoryOperationException success) {
}
- try {
- versionManager.restore(vHistory.getPath(), version, true);
- fail("VersionHistory.restore(Version,boolean) did not throw an UnsupportedRepositoryOperationException");
- } catch (UnsupportedRepositoryOperationException success) {
- }
}
/**
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/VersionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/VersionTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/VersionTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/VersionTest.java Tue Sep 8 16:09:28 2009
@@ -747,11 +747,6 @@
fail("Version.restore(String,boolean) did not throw an UnsupportedRepositoryOperationException");
} catch (UnsupportedRepositoryOperationException success) {
}
- try {
- versionManager.restore(version.getPath(), version2, true);
- fail("Version.restore(Version,boolean) did not throw an UnsupportedRepositoryOperationException");
- } catch (UnsupportedRepositoryOperationException success) {
- }
}
/**
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckinTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckinTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckinTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckinTest.java Tue Sep 8 16:09:28 2009
@@ -36,9 +36,14 @@
protected void setUp() throws Exception {
super.setUp();
- VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
- String path = versionableNode.getPath();
- versionManager.checkout(path);
+ try {
+ VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
+ String path = versionableNode.getPath();
+ versionManager.checkout(path);
+ } catch (RepositoryException e) {
+ cleanUp();
+ throw e;
+ }
}
/**
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckoutTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckoutTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckoutTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckoutTest.java Tue Sep 8 16:09:28 2009
@@ -45,8 +45,13 @@
if (!versionableNode.isCheckedOut()) {
fail("A versionable node must be checked-out after persistent creation.");
}
- versionManager.checkin(path);
- }
+ try {
+ versionManager.checkin(path);
+ } catch (RepositoryException e) {
+ cleanUp();
+ throw e;
+ }
+ }
/**
* Test if Node.isCheckedOut() returns true, if the versionable node has
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/FrozenNodeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/FrozenNodeTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/FrozenNodeTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/FrozenNodeTest.java Tue Sep 8 16:09:28 2009
@@ -37,9 +37,14 @@
protected void setUp() throws Exception {
super.setUp();
- VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
- String path = versionableNode.getPath();
- versionManager.checkout(path);
+ try {
+ VersionManager versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
+ String path = versionableNode.getPath();
+ versionManager.checkout(path);
+ } catch (RepositoryException e) {
+ cleanUp();
+ throw e;
+ }
}
/**
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java Tue Sep 8 16:09:28 2009
@@ -60,19 +60,24 @@
protected void setUp() throws Exception {
super.setUp();
- versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
- String path = versionableNode.getPath();
- propertyValue1 = getProperty("propertyValue1");
- propertyValue2 = getProperty("propertyValue2");
- versionableNode.setProperty(propertyName1, propertyValue1);
- versionableNode.getSession().save();
- version = versionManager.checkin(path);
- versionManager.checkout(path);
- versionableNode.setProperty(propertyName1, propertyValue2);
- versionableNode.getSession().save();
- version2 = versionManager.checkin(path);
- versionManager.checkout(path);
- rootVersion = versionManager.getVersionHistory(path).getRootVersion();
+ try {
+ versionManager = versionableNode.getSession().getWorkspace().getVersionManager();
+ String path = versionableNode.getPath();
+ propertyValue1 = getProperty("propertyValue1");
+ propertyValue2 = getProperty("propertyValue2");
+ versionableNode.setProperty(propertyName1, propertyValue1);
+ versionableNode.getSession().save();
+ version = versionManager.checkin(path);
+ versionManager.checkout(path);
+ versionableNode.setProperty(propertyName1, propertyValue2);
+ versionableNode.getSession().save();
+ version2 = versionManager.checkin(path);
+ versionManager.checkout(path);
+ rootVersion = versionManager.getVersionHistory(path).getRootVersion();
+ } catch (RepositoryException e) {
+ cleanUp();
+ fail("Failed to setup test: " + e.getMessage());
+ }
// build a second versionable node below the testroot
try {
@@ -150,7 +155,13 @@
*/
public void testRestoreOnCheckedInNodeJcr2_2() throws RepositoryException {
versionManager.checkin(versionableNode.getPath());
- versionManager.restore(versionableNode.getPath(), version, true);
+ try {
+ versionManager.restore(versionableNode.getPath(), version, true);
+ fail("VersionManager.restore(String, Version, boolean) must fail on existing nodes.");
+ } catch (RepositoryException e) {
+ // ok
+ }
+ versionManager.restore(version, true);
}
/**
@@ -197,7 +208,13 @@
* @throws RepositoryException
*/
public void testRestoreOnCheckedOutNodeJcr2_2() throws RepositoryException {
- versionManager.restore(versionableNode.getPath(), version, true);
+ try {
+ versionManager.restore(versionableNode.getPath(), version, true);
+ fail("VersionManager.restore(String, Version, boolean) must fail on existing nodes.");
+ } catch (RepositoryException e) {
+ // ok
+ }
+ versionManager.restore(version, true);
}
/**
@@ -244,7 +261,13 @@
* @throws RepositoryException
*/
public void testRestoreSetsIsCheckedOutToFalseJcr2_2() throws RepositoryException {
- versionManager.restore(versionableNode.getPath(), version, true);
+ try {
+ versionManager.restore(versionableNode.getPath(), version, true);
+ fail("VersionManager.restore(String, Version, boolean) must fail on existing nodes.");
+ } catch (RepositoryException e) {
+ // ok
+ }
+ versionManager.restore(version, true);
assertFalse("Restoring a node sets the jcr:isCheckedOut property to false", versionManager.isCheckedOut(versionableNode.getPath()));
}
@@ -296,7 +319,13 @@
* @throws RepositoryException
*/
public void testRestoreCorrectPropertyJcr2_2() throws RepositoryException {
- versionManager.restore(versionableNode.getPath(), version, true);
+ try {
+ versionManager.restore(versionableNode.getPath(), version, true);
+ fail("VersionManager.restore(String, Version, boolean) must fail on existing nodes.");
+ } catch (RepositoryException e) {
+ // ok
+ }
+ versionManager.restore(version, true);
String value = versionableNode.getProperty(propertyName1).getString();
assertEquals("Restoring a node must set the correct property.", propertyValue1, value);
}
@@ -366,7 +395,7 @@
// modify node without calling save()
try {
versionableNode.setProperty(propertyName1, propertyValue);
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
fail("InvalidItemStateException must be thrown on attempt to restore a node having any unsaved changes pending.");
} catch (InvalidItemStateException e) {
@@ -515,21 +544,6 @@
* @throws RepositoryException
* @see Node#restore(String, boolean)
*/
- public void testRestoreNonVersionableNodeJcr2() throws RepositoryException {
- try {
- versionManager.restore(nonVersionableNode.getPath(), version, true);
- fail("trying to restore on a non versionable node must throw UnsupportedRepositoryOperationException");
- } catch (UnsupportedRepositoryOperationException e) {
- //success
- }
- }
-
- /**
- * Test restoring on a non-versionable node.
- *
- * @throws RepositoryException
- * @see Node#restore(String, boolean)
- */
public void testRestoreNonVersionableNodeJcr2_2() throws RepositoryException {
try {
versionManager.restore(nonVersionableNode.getPath(), "foo", true);
@@ -577,21 +591,6 @@
* @throws RepositoryException
* @see Node#restore(Version, boolean)
*/
- public void testRestoreNonVersionableNode3Jcr2() throws RepositoryException {
- try {
- versionManager.restore(nonVersionableNode.getPath(), version, true);
- fail("Node.restore(Version, boolean) on a non versionable node must throw UnsupportedRepositoryOperationException");
- } catch (UnsupportedRepositoryOperationException e) {
- //success
- }
- }
-
- /**
- * Test restoring on a non-versionable node.
- *
- * @throws RepositoryException
- * @see Node#restore(Version, boolean)
- */
public void testRestoreNonVersionableNode3Jcr2_2() throws RepositoryException {
try {
versionManager.restore(nonVersionableNode.getPath(), version.getName(), true);
@@ -698,7 +697,7 @@
versionManager.checkout(versionableNode.getPath());
superuser.move(naa.getPath(), versionableNode2.getPath() + "/" + naa.getName());
superuser.save();
- versionManager.restore(versionableNode.getPath(), v, false);
+ versionManager.restore(v, false);
fail("Node.restore( Version, boolean ): An ItemExistsException must be thrown if the node to be restored already exsits and removeExisting was set to false.");
} catch (ItemExistsException e) {
@@ -803,14 +802,14 @@
versionManager.checkout(versionableNode.getPath());
Version v2 = versionManager.checkin(versionableNode.getPath());
- versionManager.restore(versionableNode.getPath(), v1, true);
+ versionManager.restore(v1, true);
assertTrue("Node.restore('1.2') must not remove child node.", versionableNode.hasNode("child1"));
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
assertFalse("Node.restore('1.0') must remove child node.", versionableNode.hasNode("child1"));
try {
- versionManager.restore(versionableNode.getPath(), v2, true);
+ versionManager.restore(v2, true);
} catch (RepositoryException e) {
fail("Node.restore('1.3') must fail.");
}
@@ -1074,7 +1073,7 @@
versionManager.checkout(testRoot.getPath());
// restore version 1.0
- versionManager.restore(testRoot.getPath(), v1, true);
+ versionManager.restore(v1, true);
// check order
NodeIterator iter = testRoot.getNodes();
@@ -1279,7 +1278,7 @@
versionManager.checkin(testRoot.getPath());
// restore version 1.0
- versionManager.restore(testRoot.getPath(), v1, true);
+ versionManager.restore(v1, true);
// check order
NodeIterator iter = testRoot.getNodes();
@@ -1320,7 +1319,7 @@
versionManager.checkin(testRoot.getPath());
// restore version 1.0
- versionManager.restore(testRoot.getPath(), v1, true);
+ versionManager.restore(v1, true);
// check order
NodeIterator iter = testRoot.getNodes();
@@ -1438,7 +1437,7 @@
expected.append(iter.nextVersion().getName()).append(",");
}
// restore version
- versionManager.restore(versionableNode.getPath(), version, true);
+ versionManager.restore(version, true);
// append new base version
expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(",");
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/resources/org/apache/jackrabbit/test/api/nodetype/spec/mix-versionable.txt
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/resources/org/apache/jackrabbit/test/api/nodetype/spec/mix-versionable.txt?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/resources/org/apache/jackrabbit/test/api/nodetype/spec/mix-versionable.txt (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/resources/org/apache/jackrabbit/test/api/nodetype/spec/mix-versionable.txt Tue Sep 8 16:09:28 2009
@@ -33,7 +33,7 @@
DefaultValues null
AutoCreated false
Mandatory false
- OnParentVersion COPY
+ OnParentVersion IGNORE
Protected true
Multiple false
PropertyDefinition
@@ -51,7 +51,7 @@
DefaultValues null
AutoCreated false
Mandatory true
- OnParentVersion COPY
+ OnParentVersion IGNORE
Protected true
Multiple true
PropertyDefinition
@@ -60,6 +60,6 @@
DefaultValues null
AutoCreated false
Mandatory true
- OnParentVersion COPY
+ OnParentVersion IGNORE
Protected true
Multiple false
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java Tue Sep 8 16:09:28 2009
@@ -16,30 +16,36 @@
*/
package org.apache.jackrabbit.jcr2spi;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.jackrabbit.jcr2spi.state.NodeState;
-import org.apache.jackrabbit.jcr2spi.version.VersionManager;
-import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
-import org.apache.jackrabbit.spi.commons.conversion.PathResolver;
-import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
+import java.util.Iterator;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionException;
-import javax.jcr.version.VersionHistory;
-import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.AccessDeniedException;
import javax.jcr.InvalidItemStateException;
-import javax.jcr.RepositoryException;
import javax.jcr.ItemExistsException;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.NodeIterator;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.AccessDeniedException;
+import javax.jcr.ItemNotFoundException;
import javax.jcr.MergeException;
+import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.Node;
-import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.NodeIterator;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.lock.LockException;
-import java.util.Iterator;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionException;
+import javax.jcr.version.VersionHistory;
+
+import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
+import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
+import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.jcr2spi.version.VersionManager;
+import org.apache.jackrabbit.spi.ItemId;
+import org.apache.jackrabbit.spi.NodeId;
+import org.apache.jackrabbit.spi.commons.conversion.PathResolver;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* <code>VersionManagerImpl</code>...
@@ -56,6 +62,12 @@
private final ItemManager itemManager;
private final PathResolver resolver;
+ /**
+ * The ID of the activity currently in effect for the session this
+ * manager has been created for.
+ */
+ private NodeId activityId;
+
protected JcrVersionManager(SessionImpl session) {
this.session = session;
vMgr = session.getVersionStateManager();
@@ -68,6 +80,8 @@
* @see javax.jcr.version.VersionManager#checkin(String)
*/
public Version checkin(String absPath) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
return n.checkin();
}
@@ -76,6 +90,8 @@
* @see javax.jcr.version.VersionManager#checkout(String)
*/
public void checkout(String absPath) throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
n.checkout();
}
@@ -85,6 +101,7 @@
*/
public Version checkpoint(String absPath) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException {
session.checkIsAlive();
+
NodeImpl n = (NodeImpl) itemManager.getNode(resolver.getQPath(absPath));
return n.checkpoint();
}
@@ -93,6 +110,8 @@
* @see javax.jcr.version.VersionManager#isCheckedOut(String)
*/
public boolean isCheckedOut(String absPath) throws RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
return n.isCheckedOut();
}
@@ -101,6 +120,8 @@
* @see javax.jcr.version.VersionManager#getVersionHistory(String)
*/
public VersionHistory getVersionHistory(String absPath) throws UnsupportedRepositoryOperationException, RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
return n.getVersionHistory();
}
@@ -109,6 +130,8 @@
* @see javax.jcr.version.VersionManager#getBaseVersion(String)
*/
public Version getBaseVersion(String absPath) throws UnsupportedRepositoryOperationException, RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
return n.getBaseVersion();
}
@@ -131,6 +154,8 @@
* @see javax.jcr.version.VersionManager#restore(String, String, boolean)
*/
public void restore(String absPath, String versionName, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
n.restore(versionName, removeExisting);
}
@@ -146,14 +171,21 @@
* @see javax.jcr.version.VersionManager#restore(String, Version, boolean)
*/
public void restore(String absPath, Version version, boolean removeExisting) throws PathNotFoundException, ItemExistsException, VersionException, ConstraintViolationException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException {
- Node n = itemManager.getNode(resolver.getQPath(absPath));
- n.restore(version, removeExisting);
+ session.checkIsAlive();
+ // get parent
+ int idx = absPath.lastIndexOf("/");
+ String parent = idx == 0 ? "/" : absPath.substring(0, idx);
+ String name = absPath.substring(idx + 1);
+ Node n = itemManager.getNode(resolver.getQPath(parent));
+ n.restore(version, name, removeExisting);
}
/**
* @see javax.jcr.version.VersionManager#restoreByLabel(String, String, boolean)
*/
public void restoreByLabel(String absPath, String versionLabel, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
n.restoreByLabel(versionLabel, removeExisting);
}
@@ -169,6 +201,8 @@
* @see javax.jcr.version.VersionManager#merge(String, String, boolean, boolean)
*/
public NodeIterator merge(String absPath, String srcWorkspace, boolean bestEffort, boolean isShallow) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException {
+ session.checkIsAlive();
+
NodeImpl n = (NodeImpl) itemManager.getNode(resolver.getQPath(absPath));
n.checkIsWritable();
session.checkHasPendingChanges();
@@ -188,6 +222,8 @@
* @see javax.jcr.version.VersionManager#doneMerge(String, Version)
*/
public void doneMerge(String absPath, Version version) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
n.doneMerge(version);
}
@@ -196,17 +232,20 @@
* @see javax.jcr.version.VersionManager#cancelMerge(String, Version)
*/
public void cancelMerge(String absPath, Version version) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException {
+ session.checkIsAlive();
+
Node n = itemManager.getNode(resolver.getQPath(absPath));
n.cancelMerge(version);
}
/**
- * @see javax.jcr.version.VersionManager#createConfiguration(String, Version)
+ * @see javax.jcr.version.VersionManager#createConfiguration(String)
*/
- public Node createConfiguration(String absPath, Version baseline) throws UnsupportedRepositoryOperationException, RepositoryException {
- // TODO: add validation
+ public Node createConfiguration(String absPath) throws UnsupportedRepositoryOperationException, RepositoryException {
+ session.checkIsAlive();
+
NodeImpl n = (NodeImpl) itemManager.getNode(resolver.getQPath(absPath));
- NodeEntry entry = vMgr.createConfiguration((NodeState) n.getItemState(), (NodeState) ((NodeImpl) baseline).getItemState());
+ NodeEntry entry = vMgr.createConfiguration((NodeState) n.getItemState());
return (Node) itemManager.getItem(entry);
}
@@ -214,23 +253,47 @@
* @see javax.jcr.version.VersionManager#setActivity(Node)
*/
public Node setActivity(Node activity) throws UnsupportedRepositoryOperationException, RepositoryException {
- // TODO
- throw new UnsupportedOperationException("JCR-2104: JSR 283 Versioning. Implementation missing");
+ session.checkIsAlive();
+ session.checkSupportedOption(Repository.OPTION_ACTIVITIES_SUPPORTED);
+
+
+ Node oldActivity = getActivity();
+ if (activity == null) {
+ activityId = null;
+ } else {
+ NodeImpl activityNode = getValidActivity(activity, "set");
+ activityId = (NodeId) activityNode.getItemState().getId();
+ }
+ return oldActivity;
}
/**
* @see javax.jcr.version.VersionManager#getActivity()
*/
public Node getActivity() throws UnsupportedRepositoryOperationException, RepositoryException {
- // TODO
- throw new UnsupportedOperationException("JCR-2104: JSR 283 Versioning. Implementation missing");
+ session.checkIsAlive();
+ session.checkSupportedOption(Repository.OPTION_ACTIVITIES_SUPPORTED);
+
+ if (activityId == null) {
+ return null;
+ } else {
+ try {
+ return (Node) itemManager.getItem(session.getHierarchyManager().getNodeEntry(activityId));
+ } catch (ItemNotFoundException e) {
+ // the activity doesn't exist any more.
+ log.warn("Activity node with id " + activityId + " doesn't exist any more.");
+ activityId = null;
+ return null;
+ }
+ }
}
/**
* @see javax.jcr.version.VersionManager#createActivity(String)
*/
public Node createActivity(String title) throws UnsupportedRepositoryOperationException, RepositoryException {
- // TODO: add validation
+ session.checkIsAlive();
+
NodeEntry entry = vMgr.createActivity(title);
return (Node) itemManager.getItem(entry);
}
@@ -239,16 +302,57 @@
* @see javax.jcr.version.VersionManager#removeActivity(Node)
*/
public void removeActivity(Node activityNode) throws UnsupportedRepositoryOperationException, RepositoryException {
- vMgr.removeActivity((NodeState) ((NodeImpl) activityNode).getItemState());
+ session.checkIsAlive();
+ NodeImpl activity = getValidActivity(activityNode, "remove");
+
+ NodeState nState = (NodeState) activity.getItemState();
+ ItemId removeId = nState.getId();
+ vMgr.removeActivity(nState);
+
+ // if the removal succeeded, make sure there is no current activity
+ // setting on this session, that points to the removed activity.
+ if (activityId != null && activityId.equals(removeId)) {
+ activityId = null;
+ }
}
/**
* @see javax.jcr.version.VersionManager#merge(Node)
*/
public NodeIterator merge(Node activityNode) throws VersionException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException {
- // TODO: add validation
- Iterator failedIds = vMgr.mergeActivity((NodeState) ((NodeImpl) activityNode).getItemState());
+ session.checkIsAlive();
+ NodeImpl activity = getValidActivity(activityNode, "merge");
+ Iterator failedIds = vMgr.mergeActivity((NodeState) activity.getItemState());
return new LazyItemIterator(itemManager, session.getHierarchyManager(), failedIds);
}
+ /**
+ * Assert that activity nodes passes to any of the activity methods have
+ * been obtained from the session this version manager has been created for.
+ * This is particularly important for workspace operations that are followed
+ * by internal updated of modified items: The hierarchy entries invalidated
+ * after successful completion of the operation must reside within scope
+ * defined by this session.
+ * <br>
+ * In addition this method varifies that the passed node is of type nt:activity.
+ *
+ * @param activityNode
+ * @param methodName
+ * @return
+ * @throws RepositoryException
+ */
+ private NodeImpl getValidActivity(Node activityNode, String methodName) throws UnsupportedRepositoryOperationException, RepositoryException {
+ NodeImpl activity;
+ if (session != activityNode.getSession()) {
+ String msg = "Attempt to " +methodName+ " an activity node that has been retrieved by another session.";
+ log.warn(msg);
+ activity = (NodeImpl) session.getNodeByIdentifier(activityNode.getIdentifier());
+ } else {
+ activity = (NodeImpl) activityNode;
+ }
+ if (!activity.isNodeType(NameConstants.NT_ACTIVITY)) {
+ throw new UnsupportedRepositoryOperationException("Given node is not an activity.");
+ }
+ return activity;
+ }
}
\ No newline at end of file
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Tue Sep 8 16:09:28 2009
@@ -42,6 +42,7 @@
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
+import javax.jcr.Repository;
import javax.jcr.lock.Lock;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
@@ -52,8 +53,6 @@
import javax.jcr.version.VersionException;
import javax.jcr.version.VersionHistory;
-import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
-import org.apache.jackrabbit.commons.iterator.PropertyIteratorAdapter;
import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
import org.apache.jackrabbit.jcr2spi.hierarchy.PropertyEntry;
import org.apache.jackrabbit.jcr2spi.lock.LockStateManager;
@@ -79,6 +78,7 @@
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.PropertyId;
+import org.apache.jackrabbit.spi.NodeId;
import org.apache.jackrabbit.spi.commons.conversion.NameException;
import org.apache.jackrabbit.spi.commons.name.NameConstants;
import org.apache.jackrabbit.spi.commons.value.ValueFormat;
@@ -447,10 +447,8 @@
*/
public NodeIterator getNodes(String namePattern) throws RepositoryException {
checkStatus();
- ArrayList nodes = new ArrayList();
- // traverse children using a special filtering item visitor
- accept(new ChildrenCollectorFilter(namePattern, nodes, true, false, 1));
- return new NodeIteratorAdapter(nodes);
+
+ return ChildrenCollectorFilter.collectChildNodes(this, namePattern);
}
/**
@@ -458,10 +456,8 @@
*/
public NodeIterator getNodes(String[] nameGlobs) throws RepositoryException {
checkStatus();
- List nodes = new ArrayList();
- // traverse child nodes using a filtering item visitor
- accept(new ChildrenCollectorFilter(nameGlobs, nodes, true, false, 1));
- return new NodeIteratorAdapter(nodes);
+
+ return ChildrenCollectorFilter.collectChildNodes(this, nameGlobs);
}
/**
@@ -505,10 +501,8 @@
*/
public PropertyIterator getProperties(String namePattern) throws RepositoryException {
checkStatus();
- ArrayList properties = new ArrayList();
- // traverse children using a filtering item visitor
- accept(new ChildrenCollectorFilter(namePattern, properties, false, true, 1));
- return new PropertyIteratorAdapter(properties);
+
+ return ChildrenCollectorFilter.collectProperties(this, namePattern);
}
/**
@@ -517,10 +511,8 @@
public PropertyIterator getProperties(String[] nameGlobs)
throws RepositoryException {
checkStatus();
- List properties = new ArrayList();
- // traverse child properties using a filtering item visitor
- accept(new ChildrenCollectorFilter(nameGlobs, properties, false, true, 1));
- return new PropertyIteratorAdapter(properties);
+
+ return ChildrenCollectorFilter.collectProperties(this, nameGlobs);
}
/**
@@ -886,7 +878,13 @@
checkIsVersionable();
checkIsLocked();
if (!isCheckedOut()) {
- session.getVersionStateManager().checkout(getNodeState());
+ if (session.isSupportedOption(Repository.OPTION_ACTIVITIES_SUPPORTED)) {
+ NodeImpl activity = (NodeImpl) session.getWorkspace().getVersionManager().getActivity();
+ NodeId activityId = (activity == null) ? null : activity.getNodeState().getNodeId();
+ session.getVersionStateManager().checkout(getNodeState(), activityId);
+ } else {
+ session.getVersionStateManager().checkout(getNodeState());
+ }
} else {
// nothing to do
log.debug("Node " + safeGetJCRPath() + " is already checked out.");
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java Tue Sep 8 16:09:28 2009
@@ -19,6 +19,7 @@
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Map;
+import java.util.HashMap;
import javax.jcr.Credentials;
import javax.jcr.LoginException;
@@ -27,6 +28,8 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+import javax.jcr.NamespaceException;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingException;
@@ -40,20 +43,52 @@
import org.apache.jackrabbit.jcr2spi.config.RepositoryConfig;
import org.apache.jackrabbit.spi.SessionInfo;
import org.apache.jackrabbit.spi.XASessionInfo;
+import org.apache.jackrabbit.spi.QValue;
+import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
+import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
+import org.apache.jackrabbit.spi.commons.value.ValueFormat;
+import org.apache.jackrabbit.value.ValueFactoryImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* <code>RepositoryImpl</code>...
*/
public class RepositoryImpl extends AbstractRepository implements Referenceable {
+ private static Logger log = LoggerFactory.getLogger(RepositoryImpl.class);
+
// configuration of the repository
private final RepositoryConfig config;
- private final Map descriptors;
+ private final Map<String, Value[]> descriptors;
private Reference reference = null;
private RepositoryImpl(RepositoryConfig config) throws RepositoryException {
this.config = config;
- descriptors = config.getRepositoryService().getRepositoryDescriptors();
+
+ // dummy value factory and dummy resolver as descriptors are not
+ // expected contain Name or Path values.
+ ValueFactory vf = ValueFactoryImpl.getInstance();
+ NamePathResolver resolver = new DefaultNamePathResolver(new NamespaceResolver() {
+ public String getURI(String prefix) throws NamespaceException {
+ return prefix;
+ }
+ public String getPrefix(String uri) throws NamespaceException {
+ return uri;
+ }
+ });
+
+ Map<String, QValue[]> descr = config.getRepositoryService().getRepositoryDescriptors();
+ descriptors = new HashMap(descr.size());
+ for (String key : descr.keySet()) {
+ QValue[] qvs = descr.get(key);
+ Value[] vs = new Value[qvs.length];
+ for (int i = 0; i < qvs.length; i++) {
+ vs[i] = ValueFormat.getJCRValue(qvs[i], resolver, vf);
+ }
+ descriptors.put(key, vs);
+ }
}
public static Repository create(RepositoryConfig config) throws RepositoryException {
@@ -65,39 +100,39 @@
* @see Repository#getDescriptorKeys()
*/
public String[] getDescriptorKeys() {
- String[] keys = (String[]) descriptors.keySet().toArray(new String[descriptors.keySet().size()]);
- return keys;
+ return descriptors.keySet().toArray(new String[descriptors.keySet().size()]);
}
/**
* @see Repository#getDescriptor(String)
*/
- public String getDescriptor(String descriptorKey) {
- return (String) descriptors.get(descriptorKey);
+ public String getDescriptor(String key) {
+ Value v = getDescriptorValue(key);
+ try {
+ return (v == null) ? null : v.getString();
+ } catch (RepositoryException e) {
+ log.error("corrupt descriptor value: " + key, e);
+ return null;
+ }
}
/**
* @see Repository#getDescriptorValue(String)
*/
public Value getDescriptorValue(String key) {
- String value = getDescriptor(key);
- if (value != null) {
- // TODO implementation missing
- throw new UnsupportedOperationException("not implemented yet - see JCR-2062");
- } else {
- return null;
- }
+ Value[] vs = getDescriptorValues(key);
+ return (vs == null || vs.length != 1) ? null : vs[0];
}
/**
* @see Repository#getDescriptorValues(String)
*/
public Value[] getDescriptorValues(String key) {
- Value value = getDescriptorValue(key);
- if (value != null) {
- return new Value[] { value };
- } else {
+ if (!descriptors.containsKey(key)) {
return null;
+ } else {
+ return descriptors.get(key);
+
}
}
@@ -105,7 +140,8 @@
* @see Repository#isSingleValueDescriptor(String)
*/
public boolean isSingleValueDescriptor(String key) {
- return descriptors.containsKey(key);
+ Value[] vs = descriptors.get(key);
+ return (vs != null && vs.length == 1);
}
/**
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java Tue Sep 8 16:09:28 2009
@@ -537,10 +537,10 @@
/**
* @see Session#hasCapability(String, Object, Map)
*/
- public boolean hasCapability(String methodName, Object target, Map arguments)
+ public boolean hasCapability(String methodName, Object target, Object[] arguments)
throws RepositoryException {
- // TODO: implementation missing
- throw new UnsupportedRepositoryOperationException("JCR-1104");
+ // most trivial implementation allowed by the specification.
+ return true;
}
/**
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Tue Sep 8 16:09:28 2009
@@ -18,7 +18,6 @@
import org.apache.jackrabbit.jcr2spi.nodetype.NodeTypeRegistryImpl;
import org.apache.jackrabbit.jcr2spi.nodetype.NodeTypeRegistry;
-import org.apache.jackrabbit.jcr2spi.nodetype.NodeTypeStorage;
import org.apache.jackrabbit.jcr2spi.nodetype.ItemDefinitionProvider;
import org.apache.jackrabbit.jcr2spi.nodetype.ItemDefinitionProviderImpl;
import org.apache.jackrabbit.jcr2spi.nodetype.EffectiveNodeTypeProvider;
@@ -86,6 +85,7 @@
import org.apache.jackrabbit.spi.NameFactory;
import org.apache.jackrabbit.spi.PathFactory;
import org.apache.jackrabbit.spi.Subscription;
+import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeStorage;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
@@ -154,6 +154,11 @@
private final Thread changeFeed;
/**
+ * Flag that indicates that the changeFeed thread should be disposed.
+ */
+ private volatile boolean disposeChangeFeed = false;
+
+ /**
* List of event listener that are set on this WorkspaceManager to get
* notifications about local and external changes.
*/
@@ -592,7 +597,9 @@
try {
updateSync.acquire();
if (changeFeed != null) {
+ disposeChangeFeed = true;
changeFeed.interrupt();
+ changeFeed.join();
}
hierarchyManager.dispose();
if (subscription != null) {
@@ -956,7 +963,11 @@
* @see OperationVisitor#visit(Checkout)
*/
public void visit(Checkout operation) throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
- service.checkout(sessionInfo, operation.getNodeId());
+ if (operation.supportsActivity()) {
+ service.checkout(sessionInfo, operation.getNodeId(), operation.getActivityId());
+ } else {
+ service.checkout(sessionInfo, operation.getNodeId());
+ }
}
/**
@@ -1106,7 +1117,7 @@
* @see OperationVisitor#visit(CreateConfiguration)
*/
public void visit(CreateConfiguration operation) throws RepositoryException {
- NodeId configId = service.createConfiguration(sessionInfo, operation.getNodeId(), operation.getBaselineId());
+ NodeId configId = service.createConfiguration(sessionInfo, operation.getNodeId());
operation.setNewConfigurationId(configId);
}
}
@@ -1132,7 +1143,7 @@
}
public void run() {
- while (!Thread.interrupted()) {
+ while (!Thread.interrupted() && !disposeChangeFeed) {
try {
InternalEventListener[] iel;
Subscription subscr;
@@ -1151,7 +1162,7 @@
sessionInfo.getWorkspaceName());
// check if thread had been interrupted while
// getting events
- if (Thread.interrupted()) {
+ if (Thread.interrupted() || disposeChangeFeed) {
log.debug("Thread interrupted, terminating...");
break;
}
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java Tue Sep 8 16:09:28 2009
@@ -23,16 +23,12 @@
import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.spi.PathFactory;
import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* <code>EntryFactory</code>...
*/
public class EntryFactory {
- private static Logger log = LoggerFactory.getLogger(EntryFactory.class);
-
/**
* IdFactory to create an ItemId based on the parent NodeId.
*/
@@ -43,7 +39,7 @@
private final NodeEntry rootEntry;
/**
- *
+ * Listener to creation and uid-changes of node entries.
*/
private final NodeEntryListener listener;
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java Tue Sep 8 16:09:28 2009
@@ -116,7 +116,7 @@
private RevertInfo revertInfo;
/**
- * Information regarding the invalidation status of the underyling {@link ItemState}
+ * Information regarding the invalidation status of the underlying {@link ItemState}
* of this entry. The semantics depend on the {@link EntryFactory.InvalidationStrategy}.
*/
private long invalidationStatus;
@@ -297,34 +297,48 @@
* @see NodeEntry#getId()
*/
public NodeId getId() throws InvalidItemStateException, RepositoryException {
- IdFactory idFactory = getIdFactory();
- if (uniqueID != null) {
- return idFactory.createNodeId(uniqueID);
- } else {
- PathFactory pf = getPathFactory();
- if (parent == null) {
- // root node
- return idFactory.createNodeId((String) null, pf.getRootPath());
- } else {
- Path p = pf.create(getName(), getIndex());
- return idFactory.createNodeId(parent.getId(), p);
- }
- }
+ return getId(false);
}
/**
* @see NodeEntry#getWorkspaceId()
*/
public NodeId getWorkspaceId() throws InvalidItemStateException, RepositoryException {
- if (uniqueID != null || parent == null) {
- // uniqueID and root-node -> internal id is always the same as getId().
- return getId();
- } else {
- NodeId parentId = (revertInfo != null)
- ? revertInfo.oldParent.getWorkspaceId()
- : parent.getWorkspaceId();
- return getIdFactory().createNodeId(parentId,
- getPathFactory().create(getName(true), getIndex(true)));
+ return getId(true);
+ }
+
+ private NodeId getId(boolean wspId) throws RepositoryException {
+ if (parent == null) { // shortcut for root
+ return getIdFactory().createNodeId((String) null, getPathFactory().getRootPath());
+ }
+ else if (uniqueID != null) { // shortcut for uniqueID based IDs
+ return getIdFactory().createNodeId(uniqueID);
+ }
+ else {
+ return buildNodeId(this, getPathFactory(), getIdFactory(), wspId);
+ }
+ }
+
+ private static NodeId buildNodeId(NodeEntryImpl entry, PathFactory pathFactory, IdFactory idFactory,
+ boolean wspId) throws RepositoryException {
+
+ PathBuilder pathBuilder = new PathBuilder(pathFactory);
+ while (entry.getParent() != null && entry.getUniqueID() == null) {
+ pathBuilder.addFirst(entry.getName(wspId), entry.getIndex(wspId));
+ entry = (wspId && entry.revertInfo != null)
+ ? entry.revertInfo.oldParent
+ : entry.parent;
+ }
+
+ // We either walked up to an entry below root or up to an uniqueID. In the former
+ // case we construct an NodeId with an absolute path. In the latter case we construct
+ // a NodeId from an uuid and a relative path.
+ if (entry.getParent() == null) {
+ pathBuilder.addRoot();
+ return idFactory.createNodeId((String) null, pathBuilder.getPath());
+ }
+ else {
+ return idFactory.createNodeId(entry.getUniqueID(), pathBuilder.getPath());
}
}
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java Tue Sep 8 16:09:28 2009
@@ -496,7 +496,7 @@
if (lockHoldingState == nodeState) {
return true;
} else {
- return lockInfo.isDeep();
+ return lockInfo != null && lockInfo.isDeep();
}
}
}
@@ -691,14 +691,20 @@
* @see Lock#getLockOwner()
*/
public String getLockOwner() {
- return getLockInfo().getOwner();
+ LockInfo info = getLockInfo();
+ if (info != null) {
+ return info.getOwner();
+ } else {
+ return null;
+ }
}
/**
* @see Lock#isDeep()
*/
public boolean isDeep() {
- return getLockInfo().isDeep();
+ LockInfo info = getLockInfo();
+ return info != null && info.isDeep();
}
/**
@@ -719,7 +725,12 @@
}
updateLockInfo();
- return getLockInfo().getLockToken();
+ LockInfo info = getLockInfo();
+ if (info != null) {
+ return info.getLockToken();
+ } else {
+ return null;
+ }
}
/**
@@ -734,7 +745,8 @@
* @see Lock#isSessionScoped()
*/
public boolean isSessionScoped() {
- return getLockInfo().isSessionScoped();
+ LockInfo info = getLockInfo();
+ return info != null && info.isSessionScoped();
}
/**
@@ -766,7 +778,8 @@
* @see javax.jcr.lock.Lock#isLockOwningSession()
*/
public boolean isLockOwningSession(){
- return lockState.lockInfo.isLockOwner();
+ LockInfo info = getLockInfo();
+ return info != null && info.isLockOwner();
}
//----------------------------------------------< LockTokenListener >---
Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeCache.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeCache.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeCache.java Tue Sep 8 16:09:28 2009
@@ -20,6 +20,7 @@
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.QNodeTypeDefinition;
import org.apache.jackrabbit.spi.RepositoryService;
+import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeStorage;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NoSuchNodeTypeException;