You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2008/10/02 16:00:30 UTC

svn commit: r701130 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core: ItemImpl.java ItemValidator.java

Author: jukka
Date: Thu Oct  2 07:00:30 2008
New Revision: 701130

URL: http://svn.apache.org/viewvc?rev=701130&view=rev
Log:
JCR-1775: Transaction-safe versioning

Remove the ItemImpl -> ItemValidator dependency.

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java?rev=701130&r1=701129&r2=701130&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java Thu Oct  2 07:00:30 2008
@@ -19,8 +19,10 @@
 import org.apache.commons.collections.iterators.IteratorChain;
 import org.apache.jackrabbit.core.nodetype.EffectiveNodeType;
 import org.apache.jackrabbit.core.nodetype.NodeDef;
+import org.apache.jackrabbit.core.nodetype.NodeTypeConflictException;
 import org.apache.jackrabbit.core.nodetype.NodeTypeImpl;
 import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
+import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
 import org.apache.jackrabbit.core.nodetype.PropDef;
 import org.apache.jackrabbit.core.nodetype.PropertyDefinitionImpl;
 import org.apache.jackrabbit.core.security.AccessManager;
@@ -265,7 +267,6 @@
         }
         // fail-fast test: check status of this item's state
         if (isTransient()) {
-            String msg;
             final ItemState state = getItemState();
             switch (state.getStatus()) {
                 case ItemState.STATUS_EXISTING_MODIFIED:
@@ -367,8 +368,6 @@
 
         AccessManager accessMgr = session.getAccessManager();
         NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
-        ItemValidator validator = new ItemValidator(ntMgr.getNodeTypeRegistry(),
-                session.getHierarchyManager(), session);
         // walk through list of dirty transient items and validate each
         while (dirtyIter.hasNext()) {
             ItemState itemState = (ItemState) dirtyIter.next();
@@ -415,7 +414,7 @@
                 // primary type
                 NodeTypeImpl pnt = ntMgr.getNodeType(nodeState.getNodeTypeName());
                 // effective node type (primary type incl. mixins)
-                EffectiveNodeType ent = validator.getEffectiveNodeType(nodeState);
+                EffectiveNodeType ent = getEffectiveNodeType(nodeState);
                 /**
                  * if the transient node was added (i.e. if it is 'new') or if
                  * its primary type has changed, check its node type against the
@@ -670,9 +669,6 @@
      * </ul>
      */
     private void processShareableNodes(Iterator iter) throws RepositoryException {
-        NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
-        ItemValidator validator = new ItemValidator(ntMgr.getNodeTypeRegistry(),
-                session.getHierarchyManager(), session);
         while (iter.hasNext()) {
             ItemState is = (ItemState) iter.next();
             if (is.isNode()) {
@@ -680,10 +676,10 @@
                 boolean wasShareable = false;
                 if (ns.hasOverlayedState()) {
                     NodeState old = (NodeState) ns.getOverlayedState();
-                    EffectiveNodeType ntOld = validator.getEffectiveNodeType(old);
+                    EffectiveNodeType ntOld = getEffectiveNodeType(old);
                     wasShareable = ntOld.includesNodeType(NameConstants.MIX_SHAREABLE);
                 }
-                EffectiveNodeType ntNew = validator.getEffectiveNodeType(ns);
+                EffectiveNodeType ntNew = getEffectiveNodeType(ns);
                 boolean isShareable = ntNew.includesNodeType(NameConstants.MIX_SHAREABLE);
 
                 if (!wasShareable && isShareable) {
@@ -713,14 +709,11 @@
     private boolean initVersionHistories(Iterator iter) throws RepositoryException {
         // walk through list of transient items and search for new versionable nodes
         boolean createdTransientState = false;
-        NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
-        ItemValidator validator = new ItemValidator(ntMgr.getNodeTypeRegistry(),
-                session.getHierarchyManager(), session);
         while (iter.hasNext()) {
             ItemState itemState = (ItemState) iter.next();
             if (itemState.isNode()) {
                 NodeState nodeState = (NodeState) itemState;
-                EffectiveNodeType nt = validator.getEffectiveNodeType(nodeState);
+                EffectiveNodeType nt = getEffectiveNodeType(nodeState);
                 if (nt.includesNodeType(NameConstants.MIX_VERSIONABLE)) {
                     if (!nodeState.hasPropertyName(NameConstants.JCR_VERSIONHISTORY)) {
                         NodeImpl node = (NodeImpl) itemMgr.getItem(itemState.getId());
@@ -751,6 +744,29 @@
     }
 
     /**
+     * Helper method that builds the effective (i.e. merged and resolved)
+     * node type representation of the specified node's primary and mixin
+     * node types.
+     *
+     * @param state
+     * @return the effective node type
+     * @throws RepositoryException
+     */
+    private EffectiveNodeType getEffectiveNodeType(NodeState state)
+            throws RepositoryException {
+        try {
+            NodeTypeRegistry registry =
+                session.getNodeTypeManager().getNodeTypeRegistry();
+            return registry.getEffectiveNodeType(
+                    state.getNodeTypeName(), state.getMixinTypeNames());
+        } catch (NodeTypeConflictException e) {
+            throw new RepositoryException(
+                    "Failed to build effective node type of node state "
+                    + state.getId(), e);
+        }
+    }
+
+    /**
      * Failsafe mapping of internal <code>id</code> to JCR path for use in
      * diagnostic output, error messages etc.
      *

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java?rev=701130&r1=701129&r2=701130&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java Thu Oct  2 07:00:30 2008
@@ -35,7 +35,6 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.nodetype.ConstraintViolationException;
-import java.util.Set;
 
 /**
  * Utility class for validating an item against constraints