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 ju...@apache.org on 2013/04/17 14:09:07 UTC
svn commit: r1468860 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
plugins/commit/ plugins/memory/ spi/state/
Author: jukka
Date: Wed Apr 17 12:09:07 2013
New Revision: 1468860
URL: http://svn.apache.org/r1468860
Log:
OAK-776: NodeState convenience accessors
Add getName() and getNames() to NodeState/Builder
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/AnnotatingConflictHandler.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/AnnotatingConflictHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/AnnotatingConflictHandler.java?rev=1468860&r1=1468859&r2=1468860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/AnnotatingConflictHandler.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/AnnotatingConflictHandler.java Wed Apr 17 12:09:07 2013
@@ -18,12 +18,15 @@ package org.apache.jackrabbit.oak.plugin
import java.util.List;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import static com.google.common.collect.Iterables.addAll;
+import static com.google.common.collect.Lists.newArrayList;
import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
import static org.apache.jackrabbit.oak.api.Type.NAMES;
import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.ADD_EXISTING;
@@ -117,19 +120,21 @@ public class AnnotatingConflictHandler i
}
private static NodeBuilder addConflictMarker(NodeBuilder parent) {
- PropertyState jcrMixin = parent.getProperty(JCR_MIXINTYPES);
- List<String> mixins;
- if (jcrMixin == null) {
- mixins = Lists.newArrayList();
+ List<String> mixins = newArrayList();;
+ boolean hasConflictType = false;
+ Iterable<String> types = parent.getNames(JCR_MIXINTYPES);
+ if (types != null) {
+ for (String type : types) {
+ mixins.add(type);
+ if (MIX_REP_MERGE_CONFLICT.equals(type)) {
+ hasConflictType = true;
+ }
+ }
}
- else {
- mixins = Lists.newArrayList(jcrMixin.getValue(NAMES));
- }
- if (!mixins.contains(MIX_REP_MERGE_CONFLICT)) {
+ if (!hasConflictType) {
mixins.add(MIX_REP_MERGE_CONFLICT);
parent.setProperty(JCR_MIXINTYPES, mixins, NAMES);
}
-
return parent.child(REP_OURS);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java?rev=1468860&r1=1468859&r2=1468860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java Wed Apr 17 12:09:07 2013
@@ -71,6 +71,16 @@ public final class EmptyNodeState implem
return false;
}
+ @Override @CheckForNull
+ public String getName(@Nonnull String name) {
+ return null;
+ }
+
+ @Override @CheckForNull
+ public Iterable<String> getNames(@Nonnull String name) {
+ return null;
+ }
+
@Override @Nonnull
public Iterable<? extends PropertyState> getProperties() {
return Collections.emptyList();
@@ -132,10 +142,18 @@ public final class EmptyNodeState implem
}
}
+ public static boolean isEmptyState(NodeState state) {
+ return state == EMPTY_NODE || state == MISSING_NODE;
+ }
+
//------------------------------------------------------------< Object >--
public String toString() {
- return "{ }";
+ if (exists) {
+ return "{ }";
+ } else {
+ return "{N/A}";
+ }
}
public boolean equals(Object object) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java?rev=1468860&r1=1468859&r2=1468860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java Wed Apr 17 12:09:07 2013
@@ -20,6 +20,7 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
+import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.PropertyState;
@@ -33,6 +34,9 @@ import org.apache.jackrabbit.oak.spi.sta
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.Maps.newHashMap;
+import static org.apache.jackrabbit.oak.api.Type.BOOLEAN;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.api.Type.NAMES;
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
import static org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState.with;
import static org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState.withNodes;
@@ -425,6 +429,34 @@ public class MemoryNodeBuilder implement
return read().getProperty(name);
}
+ @Override
+ public boolean getBoolean(String name) {
+ PropertyState property = getProperty(name);
+ return property != null
+ && property.getType() == BOOLEAN
+ && property.getValue(BOOLEAN);
+ }
+
+ @Override @CheckForNull
+ public String getName(@Nonnull String name) {
+ PropertyState property = getProperty(name);
+ if (property != null && property.getType() == NAME) {
+ return property.getValue(NAME);
+ } else {
+ return null;
+ }
+ }
+
+ @Override @CheckForNull
+ public Iterable<String> getNames(@Nonnull String name) {
+ PropertyState property = getProperty(name);
+ if (property != null && property.getType() == NAMES) {
+ return property.getValue(NAMES);
+ } else {
+ return null;
+ }
+ }
+
@Override @Nonnull
public NodeBuilder removeProperty(String name) {
write();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java?rev=1468860&r1=1468859&r2=1468860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java Wed Apr 17 12:09:07 2013
@@ -17,11 +17,16 @@
package org.apache.jackrabbit.oak.spi.state;
import static org.apache.jackrabbit.oak.api.Type.BOOLEAN;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.api.Type.NAMES;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
@@ -54,6 +59,27 @@ public abstract class AbstractNodeState
&& property.getType() == BOOLEAN
&& property.getValue(BOOLEAN);
}
+
+ @Override @CheckForNull
+ public String getName(@Nonnull String name) {
+ PropertyState property = getProperty(name);
+ if (property != null && property.getType() == NAME) {
+ return property.getValue(NAME);
+ } else {
+ return null;
+ }
+ }
+
+ @Override @CheckForNull
+ public Iterable<String> getNames(@Nonnull String name) {
+ PropertyState property = getProperty(name);
+ if (property != null && property.getType() == NAMES) {
+ return property.getValue(NAMES);
+ } else {
+ return null;
+ }
+ }
+
@Override
public PropertyState getProperty(String name) {
for (PropertyState property : getProperties()) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java?rev=1468860&r1=1468859&r2=1468860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java Wed Apr 17 12:09:07 2013
@@ -164,6 +164,57 @@ public interface NodeBuilder {
PropertyState getProperty(String name);
/**
+ * Returns the boolean value of the named property. The implementation
+ * is equivalent to the following code, but may be optimized.
+ * <pre>
+ * PropertyState property = builder.getProperty(name);
+ * return property != null
+ * && property.getType() == Type.BOOLEAN
+ * && property.getValue(Type.BOOLEAN);
+ * </pre>
+ *
+ * @param name property name
+ * @return boolean value of the named property, or {@code false}
+ */
+ boolean getBoolean(@Nonnull String name);
+
+ /**
+ * Returns the name value of the named property. The implementation
+ * is equivalent to the following code, but may be optimized.
+ * <pre>
+ * PropertyState property = builder.getProperty(name);
+ * if (property != null && property.getType() == Type.NAME) {
+ * return property.getValue(Type.NAME);
+ * } else {
+ * return null;
+ * }
+ * </pre>
+ *
+ * @param name property name
+ * @return name value of the named property, or {@code null}
+ */
+ @CheckForNull
+ String getName(@Nonnull String name);
+
+ /**
+ * Returns the name values of the named property. The implementation
+ * is equivalent to the following code, but may be optimized.
+ * <pre>
+ * PropertyState property = builder.getProperty(name);
+ * if (property != null && property.getType() == Type.NAMES) {
+ * return property.getValue(Type.NAMES);
+ * } else {
+ * return null;
+ * }
+ * </pre>
+ *
+ * @param name property name
+ * @return name values of the named property, or {@code null}
+ */
+ @CheckForNull
+ Iterable<String> getNames(@Nonnull String name);
+
+ /**
* Set a property state
* @param property The property state to set
* @return this builder
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java?rev=1468860&r1=1468859&r2=1468860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java Wed Apr 17 12:09:07 2013
@@ -169,6 +169,42 @@ public interface NodeState {
boolean getBoolean(@Nonnull String name);
/**
+ * Returns the name value of the named property. The implementation
+ * is equivalent to the following code, but may be optimized.
+ * <pre>
+ * PropertyState property = state.getProperty(name);
+ * if (property != null && property.getType() == Type.NAME) {
+ * return property.getValue(Type.NAME);
+ * } else {
+ * return null;
+ * }
+ * </pre>
+ *
+ * @param name property name
+ * @return name value of the named property, or {@code null}
+ */
+ @CheckForNull
+ String getName(@Nonnull String name);
+
+ /**
+ * Returns the name values of the named property. The implementation
+ * is equivalent to the following code, but may be optimized.
+ * <pre>
+ * PropertyState property = state.getProperty(name);
+ * if (property != null && property.getType() == Type.NAMES) {
+ * return property.getValue(Type.NAMES);
+ * } else {
+ * return null;
+ * }
+ * </pre>
+ *
+ * @param name property name
+ * @return name values of the named property, or {@code null}
+ */
+ @CheckForNull
+ Iterable<String> getNames(@Nonnull String name);
+
+ /**
* Returns the number of properties of this node.
*
* @return number of properties
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java?rev=1468860&r1=1468859&r2=1468860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java Wed Apr 17 12:09:07 2013
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.spi.state;
+import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.PropertyState;
@@ -112,6 +113,21 @@ public class ReadOnlyBuilder implements
return state.getProperty(name);
}
+ @Override
+ public boolean getBoolean(String name) {
+ return state.getBoolean(name);
+ }
+
+ @Override @CheckForNull
+ public String getName(@Nonnull String name) {
+ return state.getName(name);
+ }
+
+ @Override @CheckForNull
+ public Iterable<String> getNames(@Nonnull String name) {
+ return state.getNames(name);
+ }
+
@Override @Nonnull
public NodeBuilder removeProperty(String name) {
throw unsupported();