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 2008/06/09 21:48:18 UTC
svn commit: r665851 - in /jackrabbit/sandbox/jackrabbit-ngp/src:
main/java/org/apache/jackrabbit/ngp/SessionImpl.java
main/java/org/apache/jackrabbit/ngp/state/TransientNodeState.java
test/java/org/apache/jackrabbit/ngp/RepositoryTest.java
Author: jukka
Date: Mon Jun 9 12:48:18 2008
New Revision: 665851
URL: http://svn.apache.org/viewvc?rev=665851&view=rev
Log:
NGP: More work on Session.refresh(true), plus lock tokens
Modified:
jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/SessionImpl.java
jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/state/TransientNodeState.java
jackrabbit/sandbox/jackrabbit-ngp/src/test/java/org/apache/jackrabbit/ngp/RepositoryTest.java
Modified: jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/SessionImpl.java?rev=665851&r1=665850&r2=665851&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/SessionImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/SessionImpl.java Mon Jun 9 12:48:18 2008
@@ -16,7 +16,9 @@
*/
package org.apache.jackrabbit.ngp;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import javax.jcr.Credentials;
import javax.jcr.ItemNotFoundException;
@@ -43,6 +45,11 @@
private final NamespaceRegistry registry;
+ /**
+ * Lock tokens associated with this session.
+ */
+ private final Set<String> tokens = new HashSet<String>();
+
private NodeState root;
private boolean live = true;
@@ -144,9 +151,8 @@
throws RepositoryException {
if (!keepChanges || !root.isModified()) {
root = repository.getRoot();
- } else if (
- ((TransientNodeState) root).getBase() != repository.getRoot()) {
- throw new UnsupportedRepositoryOperationException();
+ } else {
+ root = ((TransientNodeState) root).merge(repository.getRoot());
}
}
@@ -189,4 +195,18 @@
}
}
+ //-------------------------------------------------------< Lock tokens >--
+
+ public String[] getLockTokens() {
+ return (String[]) tokens.toArray(new String[tokens.size()]);
+ }
+
+ public void addLockToken(String lt) {
+ tokens.add(lt);
+ }
+
+ public void removeLockToken(String lt) {
+ tokens.remove(lt);
+ }
+
}
Modified: jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/state/TransientNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/state/TransientNodeState.java?rev=665851&r1=665850&r2=665851&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/state/TransientNodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-ngp/src/main/java/org/apache/jackrabbit/ngp/state/TransientNodeState.java Mon Jun 9 12:48:18 2008
@@ -139,4 +139,24 @@
}
}
+ public TransientNodeState merge(PersistentNodeState rebase) {
+ if (base.equals(rebase)) {
+ return this;
+ } else {
+ TransientNodeState result = new TransientNodeState(rebase);
+ for (Map.Entry<String, PropertyState> entry : properties.entrySet()) {
+ result.setProperty(entry.getKey(), entry.getValue());
+ }
+ for (Map.Entry<String, NodeState> entry : nodes.entrySet()) {
+ NodeState child = entry.getValue();
+ if (child instanceof TransientNodeState) {
+ child = ((TransientNodeState) child).merge(
+ (PersistentNodeState) rebase.getNodes().get(entry.getKey()));
+ }
+ result.setNode(entry.getKey(), child);
+ }
+ return result;
+ }
+ }
+
}
Modified: jackrabbit/sandbox/jackrabbit-ngp/src/test/java/org/apache/jackrabbit/ngp/RepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-ngp/src/test/java/org/apache/jackrabbit/ngp/RepositoryTest.java?rev=665851&r1=665850&r2=665851&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-ngp/src/test/java/org/apache/jackrabbit/ngp/RepositoryTest.java (original)
+++ jackrabbit/sandbox/jackrabbit-ngp/src/test/java/org/apache/jackrabbit/ngp/RepositoryTest.java Mon Jun 9 12:48:18 2008
@@ -85,4 +85,45 @@
}
}
+ @Test
+ public void testRefreshWithoutChanges() throws Exception {
+ Session sessionA = repository.login();
+ try {
+ Session sessionB = repository.login();
+ try {
+ assertFalse(sessionB.getRootNode().hasNode("test"));
+ sessionA.getRootNode().addNode("test");
+ sessionA.save();
+ assertFalse(sessionB.getRootNode().hasNode("test"));
+ sessionB.refresh(false);
+ assertTrue(sessionB.getRootNode().hasNode("test"));
+ } finally {
+ sessionB.logout();
+ }
+ } finally {
+ sessionA.logout();
+ }
+ }
+
+ @Test
+ public void testRefreshWithChanges() throws Exception {
+ Session sessionA = repository.login();
+ try {
+ Session sessionB = repository.login();
+ try {
+ sessionB.getRootNode().addNode("foo");
+ assertFalse(sessionB.getRootNode().hasNode("test"));
+ sessionA.getRootNode().addNode("test");
+ sessionA.save();
+ assertFalse(sessionB.getRootNode().hasNode("test"));
+ sessionB.refresh(true);
+ assertTrue(sessionB.getRootNode().hasNode("test"));
+ } finally {
+ sessionB.logout();
+ }
+ } finally {
+ sessionA.logout();
+ }
+ }
+
}