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/15 17:34:42 UTC
svn commit: r1468121 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/core/
main/java/org/apache/jackrabbit/oak/kernel/
main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/
main/java/org/apache/jackrabbit/oak/plugi...
Author: jukka
Date: Mon Apr 15 15:34:42 2013
New Revision: 1468121
URL: http://svn.apache.org/r1468121
Log:
OAK-776: NodeState convenience accessors
Add NodeState.hasProperty(String name)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.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/plugins/memory/MemoryNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefaultTypeEditor.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveType.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.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/NodeState.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java Mon Apr 15 15:34:42 2013
@@ -114,7 +114,7 @@ public class ReadOnlyTree implements Tre
@Override
public boolean hasProperty(String name) {
- return state.getProperty(name) != null;
+ return state.hasProperty(name);
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java Mon Apr 15 15:34:42 2013
@@ -231,6 +231,12 @@ public final class KernelNodeState exten
}
@Override
+ public boolean hasProperty(String name) {
+ init();
+ return properties.containsKey(name);
+ }
+
+ @Override
public PropertyState getProperty(String name) {
init();
return properties.get(name);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java Mon Apr 15 15:34:42 2013
@@ -374,7 +374,7 @@ public class ContentMirrorStoreStrategy
@Override
public void visit(NodeState state) {
- if (state.getProperty("match") != null) {
+ if (state.hasProperty("match")) {
count++;
depthTotal += depth;
}
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=1468121&r1=1468120&r2=1468121&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 Mon Apr 15 15:34:42 2013
@@ -56,6 +56,11 @@ public final class EmptyNodeState implem
return 0;
}
+ @Override
+ public boolean hasProperty(String name) {
+ return false;
+ }
+
@Override @CheckForNull
public PropertyState getProperty(String name) {
return null;
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=1468121&r1=1468120&r2=1468121&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 Mon Apr 15 15:34:42 2013
@@ -432,7 +432,7 @@ public class MemoryNodeBuilder implement
public NodeBuilder removeProperty(String name) {
write();
- if (writeState.base.getProperty(name) != null) {
+ if (writeState.base.hasProperty(name)) {
writeState.properties.put(name, null);
} else {
writeState.properties.remove(name);
@@ -560,6 +560,11 @@ public class MemoryNodeBuilder implement
}
@Override
+ public boolean hasProperty(String name) {
+ return withProperties(base, properties).hasProperty(name);
+ }
+
+ @Override
public PropertyState getProperty(String name) {
return withProperties(base, properties).getProperty(name);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeState.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeState.java Mon Apr 15 15:34:42 2013
@@ -64,6 +64,11 @@ class MemoryNodeState extends AbstractNo
}
@Override
+ public boolean hasProperty(String name) {
+ return properties.containsKey(name);
+ }
+
+ @Override
public PropertyState getProperty(String name) {
return properties.get(name);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java Mon Apr 15 15:34:42 2013
@@ -142,7 +142,7 @@ public class ModifiedNodeState extends A
long count = base.getPropertyCount();
for (Map.Entry<String, ? extends PropertyState> entry : properties.entrySet()) {
- if (base.getProperty(entry.getKey()) != null) {
+ if (base.hasProperty(entry.getKey())) {
count--;
}
if (entry.getValue() != null) {
@@ -154,6 +154,18 @@ public class ModifiedNodeState extends A
}
@Override
+ public boolean hasProperty(String name) {
+ PropertyState property = properties.get(name);
+ if (property != null) {
+ return true;
+ } else if (properties.containsKey(name)) {
+ return false; // removed
+ } else {
+ return base.hasProperty(name);
+ }
+ }
+
+ @Override
public PropertyState getProperty(String name) {
PropertyState property = properties.get(name);
if (property != null) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefaultTypeEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefaultTypeEditor.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefaultTypeEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefaultTypeEditor.java Mon Apr 15 15:34:42 2013
@@ -55,7 +55,7 @@ public class DefaultTypeEditor implement
public void childNodeAdded(String name, NodeState after) {
if (!NodeStateUtils.isHidden(name)) {
NodeBuilder childBuilder = builder.child(name);
- if (after.getProperty("jcr:primaryType") == null) {
+ if (!after.hasProperty("jcr:primaryType")) {
childBuilder.setProperty("jcr:primaryType", defaultType, Type.NAME);
}
DefaultTypeDiff childDiff =
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveType.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveType.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveType.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveType.java Mon Apr 15 15:34:42 2013
@@ -54,7 +54,7 @@ class EffectiveType {
PropertyState properties =
type.getProperty("oak:mandatoryProperties");
for (String name : properties.getValue(NAMES)) {
- if (node.getProperty(name) == null) {
+ if (!node.hasProperty(name)) {
builder.add(name);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java Mon Apr 15 15:34:42 2013
@@ -79,6 +79,12 @@ class SegmentNodeState extends AbstractN
return getTemplate().getPropertyCount();
}
+ @Override
+ public boolean hasProperty(String name) {
+ checkNotNull(name);
+ return getTemplate().hasProperty(name);
+ }
+
@Override @CheckForNull
public PropertyState getProperty(String name) {
checkNotNull(name);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Template.java Mon Apr 15 15:34:42 2013
@@ -19,6 +19,8 @@ package org.apache.jackrabbit.oak.plugin
import static com.google.common.base.Preconditions.checkElementIndex;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
+import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.MISSING_NODE;
import static org.apache.jackrabbit.oak.plugins.segment.Segment.RECORD_ID_BYTES;
@@ -177,11 +179,34 @@ class Template {
}
}
+ public boolean hasProperty(String name) {
+ if (JCR_PRIMARYTYPE.equals(name)) {
+ return primaryType != null;
+ } else if (JCR_MIXINTYPES.equals(name)) {
+ return mixinTypes != null;
+ } else {
+ int hash = name.hashCode();
+ int index = 0;
+ while (index < properties.length
+ && properties[index].getName().hashCode() < hash) {
+ index++;
+ }
+ while (index < properties.length
+ && properties[index].getName().hashCode() == hash) {
+ if (name.equals(properties[index].getName())) {
+ return true;
+ }
+ index++;
+ }
+ return false;
+ }
+ }
+
public PropertyState getProperty(
String name, SegmentStore store, RecordId recordId) {
- if ("jcr:primaryType".equals(name) && primaryType != null) {
+ if (JCR_PRIMARYTYPE.equals(name) && primaryType != null) {
return primaryType;
- } else if ("jcr:mixinTypes".equals(name) && mixinTypes != null) {
+ } else if (JCR_MIXINTYPES.equals(name) && mixinTypes != null) {
return mixinTypes;
} else {
int hash = name.hashCode();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java Mon Apr 15 15:34:42 2013
@@ -75,7 +75,7 @@ public class JcrAllCommitHook implements
// update the privilege bits of the jcr:all in case the new
// privilege isn't an aggregate
- if (after.getProperty(REP_AGGREGATES) == null) {
+ if (!after.hasProperty(REP_AGGREGATES)) {
PrivilegeBits bits = PrivilegeBits.getInstance(after.getProperty(REP_BITS));
PrivilegeBits all = PrivilegeBits.getInstance(jcrAll.getProperty(REP_BITS));
jcrAll.setProperty(PrivilegeBits.getInstance(all).add(bits).asPropertyState(REP_BITS));
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=1468121&r1=1468120&r2=1468121&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 Mon Apr 15 15:34:42 2013
@@ -40,6 +40,11 @@ import org.apache.jackrabbit.oak.api.Pro
public abstract class AbstractNodeState implements NodeState {
@Override
+ public boolean hasProperty(String name) {
+ return getProperty(name) != null;
+ }
+
+ @Override
public PropertyState getProperty(String name) {
for (PropertyState property : getProperties()) {
if (name.equals(property.getName())) {
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=1468121&r1=1468120&r2=1468121&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 Mon Apr 15 15:34:42 2013
@@ -128,6 +128,17 @@ public interface NodeState {
boolean exists();
/**
+ * Checks whether the named property exists. The implementation is
+ * equivalent to {@code getProperty(name) != null}, but may be optimized
+ * to avoid having to load the property value.
+ *
+ * @param name property name
+ * @return {@code true} if the named property exists,
+ * {@code false} otherwise
+ */
+ boolean hasProperty(@Nonnull String name);
+
+ /**
* Returns the named property. The name is an opaque string and
* is not parsed or otherwise interpreted by this method.
* <p>
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java Mon Apr 15 15:34:42 2013
@@ -364,20 +364,20 @@ public class TreeImplTest extends OakBas
public void testSetOrderableChildrenSetsProperty() throws Exception {
Tree tree = root.getTree("/").addChild("test");
tree.setOrderableChildren(true);
- assertNotNull(((TreeImpl) tree).getNodeState().getProperty(TreeImpl.OAK_CHILD_ORDER));
+ assertTrue(((TreeImpl) tree).getNodeState().hasProperty(TreeImpl.OAK_CHILD_ORDER));
tree.setOrderableChildren(false);
- assertNull(((TreeImpl) tree).getNodeState().getProperty(TreeImpl.OAK_CHILD_ORDER));
+ assertFalse(((TreeImpl) tree).getNodeState().hasProperty(TreeImpl.OAK_CHILD_ORDER));
tree.setOrderableChildren(true);
root.commit();
- assertNotNull(((TreeImpl) tree).getNodeState().getProperty(TreeImpl.OAK_CHILD_ORDER));
+ assertTrue(((TreeImpl) tree).getNodeState().hasProperty(TreeImpl.OAK_CHILD_ORDER));
tree.setOrderableChildren(false);
root.commit();
- assertNull(((TreeImpl) tree).getNodeState().getProperty(TreeImpl.OAK_CHILD_ORDER));
+ assertFalse(((TreeImpl) tree).getNodeState().hasProperty(TreeImpl.OAK_CHILD_ORDER));
}
@Test
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java?rev=1468121&r1=1468120&r2=1468121&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java Mon Apr 15 15:34:42 2013
@@ -83,6 +83,7 @@ public class KernelNodeStateTest {
assertEquals("c", state.getProperty("c").getName());
assertEquals(3, (long) state.getProperty("c").getValue(LONG));
assertNull(state.getProperty("x"));
+ assertFalse(state.hasProperty("x"));
}
@Test