You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/09/15 19:05:40 UTC

svn commit: r1171176 - in /jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi: ./ hierarchy/ operation/ state/ version/

Author: mduerig
Date: Thu Sep 15 17:05:40 2011
New Revision: 1171176

URL: http://svn.apache.org/viewvc?rev=1171176&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP) 
refactor: use cast function instead of explicit cast wherever cast is provably correct

Modified:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCache.java Thu Sep 15 17:05:40 2011
@@ -65,7 +65,7 @@ public class ItemCache implements ItemLi
      * or {@code null} if there's no corresponding cache entry.
      */
     public NodeImpl getNode(NodeState state) {
-        return (NodeImpl) cache.get(state);
+        return cast(cache.get(state));
     }
 
     /**
@@ -78,7 +78,7 @@ public class ItemCache implements ItemLi
      * or {@code null} if there's no corresponding cache entry.
      */
     public PropertyImpl getProperty(PropertyState state) {
-        return (PropertyImpl) cache.get(state);
+        return cast(cache.get(state));
     }
 
     /**

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java Thu Sep 15 17:05:40 2011
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.jcr2spi.sta
 import org.apache.jackrabbit.jcr2spi.state.Status;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.commons.util.Unchecked;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,6 +41,8 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.UnsupportedRepositoryOperationException;
 
+import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
+
 /**
  * {@code ItemImpl}...
  */
@@ -107,7 +110,7 @@ public abstract class ItemImpl<STATE_TYP
         checkStatus();
 
         // special treatment for root node
-        if (state.isNode() && ((NodeState)state).isRoot()) {
+        if (state.isNode() && Unchecked.<NodeState>cast(state).isRoot()) {
             String msg = "Root node doesn't have a parent.";
             log.debug(msg);
             throw new ItemNotFoundException(msg);
@@ -120,7 +123,7 @@ public abstract class ItemImpl<STATE_TYP
     @Override
     public int getDepth() throws RepositoryException {
         checkStatus();
-        if (state.isNode() && ((NodeState)state).isRoot()) {
+        if (state.isNode() && Unchecked.<NodeState>cast(state).isRoot()) {
             // shortcut
             return Path.ROOT_DEPTH;
         }
@@ -158,7 +161,7 @@ public abstract class ItemImpl<STATE_TYP
             return false;
         }
         if (otherItem instanceof ItemImpl) {
-            ItemImpl<?> other = (ItemImpl<?>) otherItem;
+            ItemImpl<?> other = cast(otherItem);
             if (state == other.state) {
                 return true;
             }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java Thu Sep 15 17:05:40 2011
@@ -30,6 +30,7 @@ import org.apache.jackrabbit.jcr2spi.ver
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.util.Unchecked;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -267,10 +268,11 @@ public class ItemManager implements Item
      * @throws RepositoryException
      */
     public ItemImpl<?> getItem(HierarchyEntry<?> hierarchyEntry) throws RepositoryException {
+        //noinspection IfStatementWithIdenticalBranches
         if (hierarchyEntry.denotesNode()) {
-            return getItem((NodeEntry) hierarchyEntry);
+            return getItem(Unchecked.<NodeEntry>cast(hierarchyEntry));
         } else {
-            return getItem((PropertyEntry) hierarchyEntry);
+            return getItem(Unchecked.<PropertyEntry>cast(hierarchyEntry));
         }
     }
 
@@ -412,13 +414,13 @@ public class ItemManager implements Item
     public void created(ItemState<?> state) {
         if (state.isNode()) {
             try {
-                createNodeInstance((NodeState) state);
+                createNodeInstance(Unchecked.<NodeState>cast(state));
             } catch (RepositoryException e) {
                 // log warning and ignore
                 log.warn("Unable to create Node instance: " + e.getMessage());
             }
         } else {
-            createPropertyInstance((PropertyState) state);
+            createPropertyInstance(Unchecked.<PropertyState>cast(state));
         }
     }
 

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java Thu Sep 15 17:05:40 2011
@@ -36,6 +36,8 @@ import javax.jcr.RepositoryException;
 import java.lang.ref.Reference;
 import java.lang.ref.SoftReference;
 
+import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
+
 /**
  * {@code HierarchyEntryImpl} implements base functionality for child node
  * and property references.
@@ -422,10 +424,10 @@ public abstract class HierarchyEntry<STA
         try {
             ItemStateFactory isf = getItemStateFactory();
             if (denotesNode()) {
-                NodeEntry ne = (NodeEntry) this;
+                NodeEntry ne = cast(this);
                 isf.createNodeState(ne.getWorkspaceId(), ne);
             } else {
-                PropertyEntry pe = (PropertyEntry) this;
+                PropertyEntry pe = cast(this);
                 isf.createPropertyState(pe.getWorkspaceId(), pe);
             }
         } catch (ItemNotFoundException e) {

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java Thu Sep 15 17:05:40 2011
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.spi.EventFi
 import org.apache.jackrabbit.spi.ItemId;
 import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.commons.util.Unchecked;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,6 +38,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
+
 /**
  * {@code HierarchyEventListener}...
  */
@@ -156,7 +159,7 @@ public class HierarchyEventListener impl
                     }
                 }
                 if (parent != null && parent.denotesNode()) {
-                    ((NodeEntry) parent).refresh(ev);
+                    Unchecked.<NodeEntry>cast(parent).refresh(ev);
                     it.remove();
                     progress = true;
                 }
@@ -168,7 +171,12 @@ public class HierarchyEventListener impl
             int type = event.getType();
 
             NodeId parentId = event.getParentId();
-            NodeEntry parent = parentId != null ? (NodeEntry) hierarchyMgr.lookup(parentId) : null;
+            HierarchyEntry<?> parentEntry = parentId != null ? hierarchyMgr.lookup(parentId) : null;
+            if (!parentEntry.denotesNode()) {
+                throw new IllegalArgumentException("Invalid parentId in event: " + parentId);
+            }
+
+            NodeEntry parent = cast(parentEntry);
             switch (type) {
                 case Event.NODE_REMOVED:
                 case Event.PROPERTY_REMOVED:

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java Thu Sep 15 17:05:40 2011
@@ -46,6 +46,7 @@ import org.apache.jackrabbit.spi.commons
 import org.apache.jackrabbit.spi.commons.name.PathBuilder;
 import org.apache.jackrabbit.spi.commons.util.Arrays;
 import org.apache.jackrabbit.spi.commons.util.Function1;
+import org.apache.jackrabbit.spi.commons.util.Unchecked;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -1221,14 +1222,15 @@ public class NodeEntry extends Hierarchy
      */
     void internalRemoveChildEntry(HierarchyEntry<?> childEntry) {
         if (childEntry.denotesNode()) {
-            if (childNodeEntries.remove((NodeEntry) childEntry) == null) {
-                childNodeAttic.remove((NodeEntry) childEntry);
+            NodeEntry childNodeEntry = cast(childEntry);
+            if (childNodeEntries.remove(childNodeEntry) == null) {
+                childNodeAttic.remove(childNodeEntry);
             }
         } else {
             Name propName = childEntry.getName();
             PropertyEntry atticEntry = propertiesInAttic.get(propName);
             if (atticEntry == null) {
-                properties.remove((PropertyEntry) childEntry);
+                properties.remove(Unchecked.<PropertyEntry>cast(childEntry));
             } else if (atticEntry == childEntry) {
                 propertiesInAttic.remove(propName);
             } // else: no such prop-entry. should not get here

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/PropertyEntry.java Thu Sep 15 17:05:40 2011
@@ -27,6 +27,8 @@ import org.apache.jackrabbit.spi.Propert
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.RepositoryException;
 
+import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
+
 /**
  * {@code PropertyEntryImpl} implements a reference to a property state.
  */
@@ -117,7 +119,7 @@ public class PropertyEntry extends Hiera
             throw new IllegalArgumentException();
         }
 
-        SetPropertyValue op = (SetPropertyValue) operation;
+        SetPropertyValue op = cast(operation);
         if (op.getPropertyState().getHierarchyEntry() != this) {
             throw new IllegalArgumentException();
         }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/UniqueIdResolver.java Thu Sep 15 17:05:40 2011
@@ -93,7 +93,7 @@ public class UniqueIdResolver implements
         synchronized (lookUp) {
             if (Status.isTerminal(state.getStatus())) {
                 if (state.isNode()) {
-                    NodeEntry entry = (NodeEntry) state.getHierarchyEntry();
+                    NodeEntry entry = cast(state.getHierarchyEntry());
                     String uniqueID = entry.getUniqueID();
                     if (uniqueID != null) {
                         NodeEntry mapEntry = lookUp.get(uniqueID);
@@ -122,7 +122,7 @@ public class UniqueIdResolver implements
     @Override
     public void created(ItemState<?> state) {
         if (state.isNode()) {
-            NodeEntry entry = (NodeEntry) state.getHierarchyEntry();
+            NodeEntry entry = cast(state.getHierarchyEntry());
             String uniqueID = entry.getUniqueID();
             if (uniqueID != null) {
                 if (!lookUp.containsKey(uniqueID) || lookUp.get(uniqueID) != entry) {
@@ -163,10 +163,10 @@ public class UniqueIdResolver implements
     //------------------------------------------------------------< private >---
     
     private void putToLookup(String uniqueID, NodeEntry entry) {
-        Object previous = lookUp.put(uniqueID, entry);
+        NodeEntry previous = lookUp.put(uniqueID, entry);
         if (previous != null) {
             // some other entry existed before with the same uniqueID
-            if (sameEntry((NodeEntry) previous, entry)) {
+            if (sameEntry(previous, entry)) {
                 log.debug("Replacement of NodeEntry identified by UniqueID");
             } else {
                 // if the new entry represents the externally moved/renamed
@@ -177,7 +177,7 @@ public class UniqueIdResolver implements
                 // ancestors. in this case there is not need to 'remove'
                 // the previous entry. instead it is just removed from this
                 // cache and left for collection.
-                ((NodeEntry) previous).remove();
+                previous.remove();
             }
         }
     }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java Thu Sep 15 17:05:40 2011
@@ -20,6 +20,7 @@ import org.apache.jackrabbit.jcr2spi.sta
 import org.apache.jackrabbit.jcr2spi.state.ItemStateValidator;
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
 import org.apache.jackrabbit.spi.ItemId;
+import org.apache.jackrabbit.spi.commons.util.Unchecked;
 
 import javax.jcr.RepositoryException;
 
@@ -96,7 +97,7 @@ public class Remove extends TransientOpe
     //------------------------------------------------------------< Factory >---
 
     public static Operation create(ItemState<?> state) throws RepositoryException {
-        if (state.isNode() && ((NodeState) state).getDefinition().allowsSameNameSiblings()) {
+        if (state.isNode() && Unchecked.<NodeState>cast(state).getDefinition().allowsSameNameSiblings()) {
             // in case of SNS-siblings make sure the parent hierarchy entry has
             // its child entries loaded.
             assertChildNodeEntries(state.getParent());

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java Thu Sep 15 17:05:40 2011
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.spi.QItemDe
 import org.apache.jackrabbit.spi.QNodeDefinition;
 import org.apache.jackrabbit.spi.QNodeTypeDefinition;
 import org.apache.jackrabbit.spi.QPropertyDefinition;
+import org.apache.jackrabbit.spi.commons.util.Unchecked;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -357,7 +358,7 @@ public class ItemStateValidator {
      * @throws RepositoryException
      */
     public void checkRemoveItem(ItemState<?> targetState, int options) throws RepositoryException {
-        if (targetState.isNode() && ((NodeState)targetState).isRoot()) {
+        if (targetState.isNode() && Unchecked.<NodeState>cast(targetState).isRoot()) {
             // root node
             throw new ConstraintViolationException("Cannot remove root node.");
         }
@@ -400,7 +401,7 @@ public class ItemStateValidator {
      * @throws RepositoryException
      */
     private void checkIsCheckedOut(ItemState<?> itemState) throws RepositoryException {
-        NodeState nodeState = itemState.isNode() ? (NodeState)itemState : itemState.getParent();
+        NodeState nodeState = itemState.isNode() ? Unchecked.<NodeState>cast(itemState) : itemState.getParent();
         mgrProvider.getVersionStateManager().checkIsCheckedOut(nodeState);
     }
 
@@ -416,7 +417,7 @@ public class ItemStateValidator {
     private void checkLock(ItemState<?> itemState) throws RepositoryException {
         // make sure there's no foreign lock present the node (or the parent node
         // in case the state represents a PropertyState).
-        NodeState nodeState = itemState.isNode() ? (NodeState)itemState : itemState.getParent();
+        NodeState nodeState = itemState.isNode() ? Unchecked.<NodeState>cast(itemState) : itemState.getParent();
         mgrProvider.getLockStateManager().checkLock(nodeState);
     }
 
@@ -432,9 +433,9 @@ public class ItemStateValidator {
     private static void checkProtection(ItemState<?> itemState) throws RepositoryException {
         QItemDefinition def;
         if (itemState.isNode()) {
-            def = ((NodeState)itemState).getDefinition();
+            def = Unchecked.<NodeState>cast(itemState).getDefinition();
         } else {
-            def = ((PropertyState)itemState).getDefinition();
+            def = Unchecked.<PropertyState>cast(itemState).getDefinition();
         }
         checkProtection(def);
     }
@@ -462,9 +463,9 @@ public class ItemStateValidator {
     private static void checkRemoveConstraints(ItemState<?> itemState) throws RepositoryException {
         QItemDefinition definition;
         if (itemState.isNode()) {
-            definition = ((NodeState)itemState).getDefinition();
+            definition = Unchecked.<NodeState>cast(itemState).getDefinition();
         } else {
-            definition = ((PropertyState)itemState).getDefinition();
+            definition = Unchecked.<PropertyState>cast(itemState).getDefinition();
         }
         checkProtection(definition);
     }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java Thu Sep 15 17:05:40 2011
@@ -36,6 +36,8 @@ import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 
+import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
+
 /**
  * {@code NodeState} represents the state of a {@code Node}.
  */
@@ -121,7 +123,7 @@ public class NodeState extends ItemState
                 throw new IllegalArgumentException("Attempt to merge node state with property state.");
             }
             synchronized (another) {
-                NodeState nState = (NodeState) another;
+                NodeState nState = cast(another);
 
                 if (!nodeTypeName.equals(nState.nodeTypeName)) {
                     nodeTypeName = nState.nodeTypeName;

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java Thu Sep 15 17:05:40 2011
@@ -23,6 +23,7 @@ import org.apache.jackrabbit.spi.Propert
 import org.apache.jackrabbit.spi.QPropertyDefinition;
 import org.apache.jackrabbit.spi.QValue;
 import org.apache.jackrabbit.spi.commons.nodetype.constraint.ValueConstraint;
+import org.apache.jackrabbit.spi.commons.util.Unchecked;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -129,10 +130,11 @@ public class PropertyState extends ItemS
                 throw new IllegalArgumentException("Attempt to merge property state with node state.");
             }
 
-            PropertyDiffer result = new PropertyDiffer(data, ((PropertyState) another).data);
+            PropertyData anotherData = Unchecked.<PropertyState>cast(another).data;
+            PropertyDiffer result = new PropertyDiffer(data, anotherData);
 
             // reset the pInfo to point to the pInfo of another state.
-            data = ((PropertyState) another).data;
+            data = anotherData;
             // if transient changes should be preserved OR if there are not
             // transient changes, return the differ and postpone the effort of
             // calculating the diff (the test if this state got internally changed)).

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java Thu Sep 15 17:05:40 2011
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.spi.Propert
 import org.apache.jackrabbit.spi.RepositoryService;
 import org.apache.jackrabbit.spi.SessionInfo;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.util.Unchecked;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -148,7 +149,7 @@ public class WorkspaceItemStateFactory e
                 }
 
                 assertMatchingPath(info, entry);
-                return createNodeState((NodeInfo) info, (NodeEntry) entry);
+                return createNodeState((NodeInfo) info, Unchecked.<NodeEntry>cast(entry));
             }
         }
         catch (PathNotFoundException e) {
@@ -228,7 +229,7 @@ public class WorkspaceItemStateFactory e
                 }
 
                 assertMatchingPath(info, entry);
-                return createPropertyState((PropertyInfo) info, (PropertyEntry) entry);
+                return createPropertyState((PropertyInfo) info, Unchecked.<PropertyEntry>cast(entry));
             }
 
         } catch (PathNotFoundException e) {

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java Thu Sep 15 17:05:40 2011
@@ -46,6 +46,8 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
+
 /**
  * {@code VersionHistoryImpl}...
  */
@@ -253,7 +255,7 @@ public class VersionHistoryImpl extends 
         if (otherItem instanceof VersionHistoryImpl) {
             // since all version histories are referenceable, protected and live
             // in the same workspace, a simple comparison of the UUIDs is sufficient.
-            VersionHistoryImpl other = (VersionHistoryImpl) otherItem;
+            VersionHistoryImpl other = cast(otherItem);
             return vhEntry.getUniqueID().equals(other.vhEntry.getUniqueID());
         }
         return false;

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java?rev=1171176&r1=1171175&r2=1171176&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionImpl.java Thu Sep 15 17:05:40 2011
@@ -36,6 +36,8 @@ import javax.jcr.version.VersionHistory;
 import javax.jcr.version.VersionIterator;
 import java.util.Calendar;
 
+import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
+
 /**
  * {@code VersionImpl}...
  */
@@ -118,7 +120,7 @@ public class VersionImpl extends NodeImp
         if (otherItem instanceof VersionImpl) {
             // since all versions are referenceable, protected and live
             // in the same workspace, a simple comparison of the UUIDs is sufficient
-            VersionImpl other = (VersionImpl) otherItem;
+            VersionImpl other = cast(otherItem);
             try {
                 return getUUID().equals(other.getUUID());
             } catch (RepositoryException e) {