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/23 15:39:55 UTC
svn commit: r1329231 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/
oak-jcr/src/test/java/org/apache/jackra...
Author: mduerig
Date: Mon Apr 23 13:39:54 2012
New Revision: 1329231
URL: http://svn.apache.org/viewvc?rev=1329231&view=rev
Log:
OAK-18: Define Oak API
- add getChildStatus(). getPropertyStatus() methods to ContentTree
- implement Item.isModified(), Item.isNew()
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentTree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelContentTree.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentTree.java?rev=1329231&r1=1329230&r2=1329231&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ContentTree.java Mon Apr 23 13:39:54 2012
@@ -42,6 +42,8 @@ import java.util.List;
*
*/
public interface ContentTree {
+ enum Status {EXISTING, NEW, MODIFIED, REMOVED}
+
/**
* @return the name of this {@code ContentTree} instance.
*/
@@ -65,6 +67,8 @@ public interface ContentTree {
*/
PropertyState getProperty(String name);
+ Status getPropertyStatus(String name);
+
/**
* Determine if a property state exists
* @param name name of the property state
@@ -96,6 +100,8 @@ public interface ContentTree {
*/
ContentTree getChild(String name);
+ Status getChildStatus(String name);
+
/**
* Determine if a child of this {@code ContentTree} instance exists.
* @param name name of the child
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelContentTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelContentTree.java?rev=1329231&r1=1329230&r2=1329231&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelContentTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelContentTree.java Mon Apr 23 13:39:54 2012
@@ -241,6 +241,27 @@ public class KernelContentTree implement
}
@Override
+ public Status getPropertyStatus(String name) {
+ if (addedProperties.containsKey(name)) {
+ if (persistentState.getProperty(name) == null) {
+ return Status.NEW;
+ }
+ else {
+ return Status.MODIFIED;
+ }
+ }
+ else if (removedProperties.contains(name)) {
+ return Status.REMOVED;
+ }
+ else if (persistentState.getProperty(name) == null) {
+ return null;
+ }
+ else {
+ return Status.EXISTING;
+ }
+ }
+
+ @Override
public boolean hasProperty(String name) {
return getProperty(name) != null;
}
@@ -269,6 +290,32 @@ public class KernelContentTree implement
}
@Override
+ public Status getChildStatus(String name) {
+ if (addedTrees.containsKey(name)) {
+ return Status.NEW;
+ }
+ else if (removedTrees.contains(name)) {
+ return Status.REMOVED;
+ }
+ else {
+ KernelContentTree child = getChild(name);
+ if (child == null) {
+ return null;
+ }
+ else if (child.addedTrees.isEmpty() &&
+ child.removedTrees.isEmpty() &&
+ child.addedProperties.isEmpty() &&
+ child.removedProperties.isEmpty()) {
+
+ return Status.EXISTING;
+ }
+ else {
+ return Status.MODIFIED;
+ }
+ }
+ }
+
+ @Override
public boolean hasChild(String name) {
return getChild(name) != null;
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1329231&r1=1329230&r2=1329231&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Mon Apr 23 13:39:54 2012
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.commons.ite
import org.apache.jackrabbit.commons.iterator.PropertyIteratorAdapter;
import org.apache.jackrabbit.oak.api.Branch;
import org.apache.jackrabbit.oak.api.ContentTree;
+import org.apache.jackrabbit.oak.api.ContentTree.Status;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.jcr.util.ItemNameMatcher;
import org.apache.jackrabbit.oak.jcr.util.LogUtil;
@@ -91,7 +92,7 @@ public class NodeImpl extends ItemImpl i
*/
@Override
public String getName() throws RepositoryException {
- return getContentTree().getName();
+ return name();
}
/**
@@ -144,8 +145,7 @@ public class NodeImpl extends ItemImpl i
*/
@Override
public boolean isNew() {
- // todo implement isNew
- return false;
+ return getContentTree().getParent().getChildStatus(name()) == Status.NEW;
}
/**
@@ -153,8 +153,7 @@ public class NodeImpl extends ItemImpl i
*/
@Override
public boolean isModified() {
- // todo implement isModified
- return false;
+ return getContentTree().getParent().getChildStatus(name()) == Status.MODIFIED;
}
/**
@@ -855,6 +854,10 @@ public class NodeImpl extends ItemImpl i
//------------------------------------------------------------< package >---
+ String name() {
+ return getContentTree().getName();
+ }
+
String path() {
return '/' + getContentTree().getPath();
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java?rev=1329231&r1=1329230&r2=1329231&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java Mon Apr 23 13:39:54 2012
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.jcr;
import org.apache.jackrabbit.oak.api.Branch;
import org.apache.jackrabbit.oak.api.ContentTree;
+import org.apache.jackrabbit.oak.api.ContentTree.Status;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.jcr.util.LogUtil;
import org.apache.jackrabbit.oak.jcr.util.ValueConverter;
@@ -77,7 +78,7 @@ public class PropertyImpl extends ItemIm
*/
@Override
public String getName() throws RepositoryException {
- return getStateName();
+ return name();
}
/**
@@ -85,7 +86,7 @@ public class PropertyImpl extends ItemIm
*/
@Override
public String getPath() throws RepositoryException {
- return '/' + getParentContentTree().getPath() + '/' + getStateName();
+ return path();
}
/**
@@ -121,8 +122,7 @@ public class PropertyImpl extends ItemIm
*/
@Override
public boolean isNew() {
- // todo implement isNew
- return false;
+ return getParentContentTree().getPropertyStatus(name()) == Status.NEW;
}
/**
@@ -130,8 +130,7 @@ public class PropertyImpl extends ItemIm
*/
@Override
public boolean isModified() {
- // todo implement isModified
- return false;
+ return getParentContentTree().getPropertyStatus(name()) == Status.MODIFIED;
}
/**
@@ -139,7 +138,7 @@ public class PropertyImpl extends ItemIm
*/
@Override
public void remove() throws RepositoryException {
- getParentContentTree().removeProperty(getStateName());
+ getParentContentTree().removeProperty(name());
}
/**
@@ -567,7 +566,7 @@ public class PropertyImpl extends ItemIm
remove();
}
else {
- getParentContentTree().setProperty(getStateName(), ValueConverter.toScalar(value));
+ getParentContentTree().setProperty(name(), ValueConverter.toScalar(value));
}
}
@@ -587,7 +586,7 @@ public class PropertyImpl extends ItemIm
remove();
}
else {
- getParentContentTree().setProperty(getStateName(), ValueConverter.toScalar(values));
+ getParentContentTree().setProperty(name(), ValueConverter.toScalar(values));
}
}
@@ -621,10 +620,14 @@ public class PropertyImpl extends ItemIm
return propertyState;
}
- private String getStateName() {
+ private String name() {
return getPropertyState().getName();
}
+ private String path() {
+ return '/' + getParentContentTree().getPath() + '/' + name();
+ }
+
private synchronized void resolve() {
parent = getBranch().getContentTree(parent.getPath());
String path = Paths.concat(parent.getPath(), propertyState.getName());
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=1329231&r1=1329230&r2=1329231&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 Mon Apr 23 13:39:54 2012
@@ -306,12 +306,19 @@ public class RepositoryTest extends Abst
assertFalse(session.nodeExists(newNode));
Node node = getNode(TEST_PATH);
- node.addNode("new");
+ Node added = node.addNode("new");
+ assertFalse(node.isNew());
+ assertTrue(node.isModified());
+ assertTrue(added.isNew());
+ assertFalse(added.isModified());
session.save();
Session session2 = getRepository().login();
try {
assertTrue(session2.nodeExists(newNode));
+ added = session2.getNode(newNode);
+ assertFalse(added.isNew());
+ assertFalse(added.isModified());
}
finally {
session2.logout();
@@ -882,6 +889,9 @@ public class RepositoryTest extends Abst
Property property = parentNode.getProperty("string");
property.setValue("new value");
+ assertTrue(parentNode.isModified());
+ assertTrue(property.isModified());
+ assertFalse(property.isNew());
property.getSession().save();
Session session2 = getRepository().login();
@@ -996,6 +1006,7 @@ public class RepositoryTest extends Abst
Session session2 = getRepository().login();
try {
session2.getNode(TEST_PATH + "/newNode").remove();
+ assertTrue(session2.getNode(TEST_PATH).isModified());
session2.save();
}
finally {
@@ -1005,6 +1016,7 @@ public class RepositoryTest extends Abst
Session session3 = getRepository().login();
try {
assertFalse(session3.nodeExists(TEST_PATH + "/newNode"));
+ assertFalse(session3.getNode(TEST_PATH).isModified());
}
finally {
session3.logout();
@@ -1630,7 +1642,10 @@ public class RepositoryTest extends Abst
String propertyPath = parentNode.getPath() + '/' + name;
assertFalse(getSession().propertyExists(propertyPath));
- parentNode.setProperty(name, value);
+ Property added = parentNode.setProperty(name, value);
+ assertTrue(parentNode.isModified());
+ assertFalse(added.isModified());
+ assertTrue(added.isNew());
getSession().save();
Session session2 = getRepository().login();