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 tr...@apache.org on 2013/10/15 21:28:30 UTC

svn commit: r1532496 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java

Author: tripod
Date: Tue Oct 15 19:28:30 2013
New Revision: 1532496

URL: http://svn.apache.org/r1532496
Log:
OAK-1086 NodeTypes of successive calls to node.getPrimaryNodetypes() are not equal

- simplify equals

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java?rev=1532496&r1=1532495&r2=1532496&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java Tue Oct 15 19:28:30 2013
@@ -16,21 +16,6 @@
  */
 package org.apache.jackrabbit.oak.plugins.nodetype;
 
-import static com.google.common.base.Preconditions.checkState;
-import static org.apache.jackrabbit.JcrConstants.JCR_CHILDNODEDEFINITION;
-import static org.apache.jackrabbit.JcrConstants.JCR_HASORDERABLECHILDNODES;
-import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN;
-import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
-import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME;
-import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYITEMNAME;
-import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
-import static org.apache.jackrabbit.JcrConstants.JCR_PROPERTYDEFINITION;
-import static org.apache.jackrabbit.JcrConstants.JCR_SUPERTYPES;
-import static org.apache.jackrabbit.JcrConstants.JCR_UUID;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_ABSTRACT;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERYABLE;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.RESIDUAL_NAME;
-
 import java.io.IOException;
 import java.io.StringWriter;
 import java.net.URI;
@@ -55,25 +40,40 @@ import javax.jcr.nodetype.NodeTypeDefini
 import javax.jcr.nodetype.NodeTypeIterator;
 import javax.jcr.nodetype.PropertyDefinition;
 
-import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
 import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefWriter;
 import org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
 import org.apache.jackrabbit.oak.namepath.JcrNameParser;
 import org.apache.jackrabbit.oak.namepath.JcrPathParser;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
 import org.apache.jackrabbit.oak.plugins.nodetype.constraint.Constraints;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+import static com.google.common.base.Preconditions.checkState;
+import static org.apache.jackrabbit.JcrConstants.JCR_CHILDNODEDEFINITION;
+import static org.apache.jackrabbit.JcrConstants.JCR_HASORDERABLECHILDNODES;
+import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN;
+import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
+import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYITEMNAME;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.JcrConstants.JCR_PROPERTYDEFINITION;
+import static org.apache.jackrabbit.JcrConstants.JCR_SUPERTYPES;
+import static org.apache.jackrabbit.JcrConstants.JCR_UUID;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_ABSTRACT;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERYABLE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.RESIDUAL_NAME;
+
 /**
  * <pre>
  * [nt:nodeType]
@@ -102,8 +102,6 @@ class NodeTypeImpl extends AbstractTypeD
 
     private static final String[] NO_NAMES = new String[0];
 
-    private String cnd;
-
     NodeTypeImpl(Tree type, NamePathMapper mapper) {
         super(type, mapper);
     }
@@ -416,9 +414,8 @@ class NodeTypeImpl extends AbstractTypeD
      * Returns the namespace neutral CND of the given node type definition.
      * @param def the node type definition
      * @return the CND
-     * @throws IOException if an error occurs.
      */
-    private static String getCnd(NodeTypeDefinition def) throws IOException {
+    private static String getCnd(NodeTypeDefinition def) {
         StringWriter out = new StringWriter();
         CompactNodeTypeDefWriter cndWriter = new CompactNodeTypeDefWriter(out, new CompactNodeTypeDefWriter.NamespaceMapping(){
             @Override
@@ -426,24 +423,14 @@ class NodeTypeImpl extends AbstractTypeD
                 return s;
             }
         }, false);
-        cndWriter.write(def);
-        return out.toString();
-    }
-
-    /**
-     * Returns the namespace neutral CND of the this node type definition.
-     * @return the CND
-     */
-    private String getCnd() {
-        if (cnd == null) {
-            try {
-                cnd = getCnd(this);
-            } catch (IOException e) {
-                log.error("Internal error while writing CND for {}", this);
-                cnd = getName();
-            }
+        try {
+            cndWriter.write(def);
+        } catch (IOException e) {
+            // should never occur
+            log.error("Error generating CND of " + def, e);
+            throw new IllegalStateException(e);
         }
-        return cnd;
+        return out.toString();
     }
 
     //-------------------------------------------------------------< Object >---
@@ -454,23 +441,12 @@ class NodeTypeImpl extends AbstractTypeD
 
     @Override
     public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o instanceof NodeTypeImpl) {
-            return getCnd().equals(((NodeTypeImpl) o).getCnd());
-        } else if (o instanceof NodeType) {
-            try {
-                return getCnd().equals(getCnd((NodeType) o));
-            } catch (IOException e) {
-                return false;
-            }
-        } else {
-            return false;
-        }
+        return this == o || o instanceof NodeType && getCnd(this).equals(getCnd((NodeType) o));
     }
 
     @Override
     public int hashCode() {
-        return getCnd().hashCode();
+        return getCnd(this).hashCode();
     }
 
 //-----------------------------------------------------------< internal >---