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 2013/11/27 10:42:50 UTC
svn commit: r1545978 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core:
AbstractTree.java MutableTree.java
Author: mduerig
Date: Wed Nov 27 09:42:50 2013
New Revision: 1545978
URL: http://svn.apache.org/r1545978
Log:
OAK-1232 Improve implementation of Tree.get(Property)Status
Simplify (Property)Status calculation and add default implementation in AbstractTree
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java?rev=1545978&r1=1545977&r2=1545978&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java Wed Nov 27 09:42:50 2013
@@ -19,7 +19,18 @@
package org.apache.jackrabbit.oak.core;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.size;
+import static com.google.common.collect.Iterables.transform;
+import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
+import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
+import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
+
import java.util.Iterator;
+
import javax.annotation.Nonnull;
import com.google.common.base.Function;
@@ -32,16 +43,6 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.size;
-import static com.google.common.collect.Iterables.transform;
-import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
-import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
-import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
-
/**
* {@code AbstractTree} provides default implementations for most
* read methods of {@code Tree}. Furthermore it handles the
@@ -101,12 +102,16 @@ public abstract class AbstractTree imple
/**
* @return {@code true} iff {@code getStatus() == Status.NEW}
*/
- protected abstract boolean isNew();
+ protected boolean isNew() {
+ return nodeBuilder.isNew();
+ }
/**
* @return {@code true} iff {@code getStatus() == Status.MODIFIED}
*/
- protected abstract boolean isModified();
+ protected boolean isModified() {
+ return nodeBuilder.isModified();
+ }
/**
* @return {@code true} if this tree has orderable children;
@@ -186,9 +191,9 @@ public abstract class AbstractTree imple
@Override
public Status getStatus() {
- if (isNew()) {
+ if (nodeBuilder.isNew()) {
return NEW;
- } else if (isModified()) {
+ } else if (nodeBuilder.isModified()) {
return MODIFIED;
} else {
return EXISTING;
@@ -221,6 +226,19 @@ public abstract class AbstractTree imple
}
@Override
+ public Status getPropertyStatus(@Nonnull String name) {
+ if (!hasProperty(name)) {
+ return null;
+ } else if (nodeBuilder.isNew(name)) {
+ return NEW;
+ } else if (nodeBuilder.isReplaced(name)) {
+ return MODIFIED;
+ } else {
+ return EXISTING;
+ }
+ }
+
+ @Override
public Iterable<? extends PropertyState> getProperties() {
return filter(nodeBuilder.getProperties(),
new Predicate<PropertyState>() {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java?rev=1545978&r1=1545977&r2=1545978&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java Wed Nov 27 09:42:50 2013
@@ -85,16 +85,6 @@ public class MutableTree extends Abstrac
return new MutableTree(root, this, name, pendingMoves);
}
- @Override
- protected boolean isNew() {
- return nodeBuilder.isNew();
- }
-
- @Override
- protected boolean isModified() {
- return nodeBuilder.isModified();
- }
-
//------------------------------------------------------------< Tree >---
@Override
@@ -150,19 +140,12 @@ public class MutableTree extends Abstrac
public Status getPropertyStatus(String name) {
beforeRead();
- // make sure we don't expose information about a non-accessible property
- if (!hasProperty(name)) {
- return null;
- }
-
- // get status of this tree without checking for it's existence
- Status nodeStatus = super.getStatus();
- if (nodeStatus == NEW) {
- return (super.hasProperty(name)) ? NEW : null;
- }
PropertyState head = super.getProperty(name);
if (head == null) {
+ // make sure we don't expose information about a non-accessible property
return null;
+ } else if (super.getStatus() == NEW) {
+ return NEW;
}
PropertyState base = getSecureBase().getProperty(name);