Hi,
Regarding equals in the abstract base classes: I'd make the equals methods in the abstract base classes final. Overriding them in a concrete subclass will most likely break symmetry. Furthermore, since these classes are immutable, the result of equals can be cached safely.
Michael On 7.3.12 16:00, [email protected] wrote:
Author: jukka Date: Wed Mar 7 16:00:48 2012 New Revision: 1298002 URL: http://svn.apache.org/viewvc?rev=1298002&view=rev Log: OAK-3: Internal tree model Use the abstract base classes and add an optimized equals() implementation based on the content id Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/store/StoredNodeAsState.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/store/StoredNodeAsState.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/store/StoredNodeAsState.java?rev=1298002&r1=1298001&r2=1298002&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/store/StoredNodeAsState.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/store/StoredNodeAsState.java Wed Mar 7 16:00:48 2012 @@ -21,11 +21,14 @@ import java.util.Iterator; import java.util.Map; import org.apache.jackrabbit.mk.model.StoredNode; +import org.apache.jackrabbit.oak.model.AbstractChildNodeEntry; +import org.apache.jackrabbit.oak.model.AbstractNodeState; +import org.apache.jackrabbit.oak.model.AbstractPropertyState; import org.apache.jackrabbit.oak.model.ChildNodeEntry; import org.apache.jackrabbit.oak.model.NodeState; import org.apache.jackrabbit.oak.model.PropertyState; -class StoredNodeAsState implements NodeState { +class StoredNodeAsState extends AbstractNodeState { private final StoredNode node; @@ -36,7 +39,7 @@ class StoredNodeAsState implements NodeS this.provider = provider; } - private static class SimplePropertyState implements PropertyState { + private static class SimplePropertyState extends AbstractPropertyState { private final String name; @@ -47,16 +50,19 @@ class StoredNodeAsState implements NodeS this.value = value; } + @Override public String getName() { return name; } + @Override public String getEncodedValue() { return value; } } + @Override public PropertyState getProperty(String name) { String value = node.getProperties().get(name); if (value != null) { @@ -66,10 +72,12 @@ class StoredNodeAsState implements NodeS } } + @Override public long getPropertyCount() { return node.getProperties().size(); } + @Override public Iterable<PropertyState> getProperties() { return new Iterable<PropertyState>() { public Iterator<PropertyState> iterator() { @@ -92,6 +100,7 @@ class StoredNodeAsState implements NodeS }; } + @Override public NodeState getChildNode(String name) { org.apache.jackrabbit.mk.model.ChildNodeEntry entry = node.getChildNodeEntry(name); @@ -102,10 +111,12 @@ class StoredNodeAsState implements NodeS } } + @Override public long getChildNodeCount() { return node.getChildNodeCount(); } + @Override public Iterable<ChildNodeEntry> getChildNodeEntries( final long offset, final long length) { if (length< -1) { @@ -139,7 +150,7 @@ class StoredNodeAsState implements NodeS private ChildNodeEntry getChildNodeEntry( final org.apache.jackrabbit.mk.model.ChildNodeEntry entry) { - return new ChildNodeEntry() { + return new AbstractChildNodeEntry() { public String getName() { return entry.getName(); } @@ -154,4 +165,16 @@ class StoredNodeAsState implements NodeS }; } + @Override + public boolean equals(Object that) { + if (that instanceof StoredNodeAsState) { + StoredNodeAsState other = (StoredNodeAsState) that; + if (provider == other.provider +&& node.getId().equals(other.node.getId())) { + return true; + } + } + return super.equals(that); + } + }
