You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/04/12 11:47:07 UTC
svn commit: r1325174 - in /jackrabbit/oak/trunk/oak-jcr/src:
main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
Author: mduerig
Date: Thu Apr 12 09:47:06 2012
New Revision: 1325174
URL: http://svn.apache.org/viewvc?rev=1325174&view=rev
Log:
OAK-63: Implement workspace copy and move
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java?rev=1325174&r1=1325173&r2=1325174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java Thu Apr 12 09:47:06 2012
@@ -16,6 +16,9 @@
*/
package org.apache.jackrabbit.oak.jcr;
+import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.Connection;
+import org.apache.jackrabbit.oak.api.NodeStateEditor;
import org.apache.jackrabbit.oak.jcr.query.QueryManagerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -74,8 +77,19 @@ public class WorkspaceImpl implements Wo
getSessionImpl().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
getSessionImpl().checkIsAlive();
- // TODO -> SPI
+ try {
+ Connection connection = sessionContext.getConnection();
+ NodeStateEditor editor = connection.getNodeStateEditor(connection.getCurrentRoot());
+
+ String srcPath = Paths.relativize("/", srcAbsPath);
+ String destPath = Paths.relativize("/", destAbsPath);
+ editor.copy(srcPath, destPath);
+ connection.commit(editor);
+ }
+ catch (CommitFailedException e) {
+ throw new RepositoryException(e);
+ }
}
@SuppressWarnings("deprecation")
@@ -94,8 +108,19 @@ public class WorkspaceImpl implements Wo
getSessionImpl().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
getSessionImpl().checkIsAlive();
- // TODO -> SPI
+ try {
+ Connection connection = sessionContext.getConnection();
+ NodeStateEditor editor = connection.getNodeStateEditor(connection.getCurrentRoot());
+
+ String srcPath = Paths.relativize("/", srcAbsPath);
+ String destPath = Paths.relativize("/", destAbsPath);
+ editor.move(srcPath, destPath);
+ connection.commit(editor);
+ }
+ catch (CommitFailedException e) {
+ throw new RepositoryException(e);
+ }
}
@Override
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java?rev=1325174&r1=1325173&r2=1325174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java Thu Apr 12 09:47:06 2012
@@ -1212,6 +1212,51 @@ public class RepositoryTest extends Abst
assertTrue(node.hasNode("target/moved"));
}
+ @Test
+ public void workspaceMove() throws RepositoryException {
+ Session session = getSession();
+
+ Node node = getNode(TEST_PATH);
+ node.addNode("source").addNode("node");
+ node.addNode("target");
+ session.save();
+
+ session.getWorkspace().move(TEST_PATH + "/source/node", TEST_PATH + "/target/moved");
+
+ // Move must not be visible in session
+ assertTrue(node.hasNode("source/node"));
+ assertFalse(node.hasNode("target/moved"));
+
+ session.refresh(false);
+
+ // Move must be visible in session after refresh
+ assertFalse(node.hasNode("source/node"));
+ assertTrue(node.hasNode("source"));
+ assertTrue(node.hasNode("target/moved"));
+ }
+
+ @Test
+ public void workspaceCopy() throws RepositoryException {
+ Session session = getSession();
+
+ Node node = getNode(TEST_PATH);
+ node.addNode("source").addNode("node");
+ node.addNode("target");
+ session.save();
+
+ session.getWorkspace().copy(TEST_PATH + "/source/node", TEST_PATH + "/target/copied");
+
+ // Copy must not be visible in session
+ assertTrue(node.hasNode("source/node"));
+ assertFalse(node.hasNode("target/copied"));
+
+ session.refresh(false);
+
+ // Copy must be visible in session after refresh
+ assertTrue(node.hasNode("source/node"));
+ assertTrue(node.hasNode("target/copied"));
+ }
+
@Ignore // TODO implement node type support
@Test
public void setPrimaryType() throws RepositoryException {