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/28 17:39:15 UTC

svn commit: r1176922 - /jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java

Author: mduerig
Date: Wed Sep 28 15:39:15 2011
New Revision: 1176922

URL: http://svn.apache.org/viewvc?rev=1176922&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
refactor: remove obsolete refresh method

Modified:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java

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=1176922&r1=1176921&r2=1176922&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 Wed Sep 28 15:39:15 2011
@@ -31,9 +31,7 @@ import org.apache.jackrabbit.jcr2spi.sta
 import org.apache.jackrabbit.jcr2spi.state.PropertyState;
 import org.apache.jackrabbit.jcr2spi.state.Status;
 import org.apache.jackrabbit.spi.ChildInfo;
-import org.apache.jackrabbit.spi.Event;
 import org.apache.jackrabbit.spi.IdFactory;
-import org.apache.jackrabbit.spi.ItemId;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.spi.Path;
@@ -155,11 +153,7 @@ public class NodeEntry extends Hierarchy
      * Upon transient 'move' ('rename') or 'reorder' of SNSs this
      * {@code NodeEntry} remembers the original parent, name and index
      * for later revert as well as for the creation of the
-     * {@link #getWorkspaceId() workspace id}. Finally the revertInfo is
-     * used to find the target of an {@code Event} indicating external
-     * modification.
-     *
-     * @see #refresh(Event)
+     * {@link #getWorkspaceId() workspace id}. 
      */
     private RevertInfo revertInfo;
 
@@ -1016,109 +1010,6 @@ public class NodeEntry extends Hierarchy
         return revertInfo != null && revertInfo.isMoved();
     }
 
-    /**
-     * The parent entry of a external event gets informed about the modification.
-     * Note, that {@link Event#getParentId()} of the given childEvent must point
-     * to this {@code NodeEntry}.
-     *
-     * @param childEvent
-     */
-    public void refresh(Event childEvent) {
-        ItemId eventId = childEvent.getItemId();
-        Path eventPath = childEvent.getPath();
-        Name eventName = eventPath.getName();
-        HierarchyEntry<?> child = eventId == null ? null : lookupEntry(eventId, eventPath);
-
-        switch (childEvent.getType()) {
-            case Event.NODE_ADDED:
-            case Event.PROPERTY_ADDED:
-                if (child == null || child.getStatus() == Status.REMOVED) {
-                    // no such child or a colliding new child existed but got
-                    // removed already -> add the new entry.
-                    if (childEvent.getType() ==  Event.NODE_ADDED) {
-                        String uniqueChildID = eventId.getPath() == null ? eventId.getUniqueID() : null;
-                        int index = eventPath.getNormalizedIndex();
-                        internalAddNodeEntry(eventName, uniqueChildID, index);
-                    } else {
-                        internalAddPropertyEntry(eventName, true);
-                    }
-                } else {
-                    // item already present
-                    Status status = child.getStatus();
-                    if (Status.NEW == status) {
-                        // event conflicts with a transiently added item on this
-                        // node entry -> mark the parent node (this) stale.
-                        internalGetItemState().setStatus(Status.MODIFIED);
-                    } // else: child already added -> ignore
-                }
-                break;
-
-            case Event.NODE_REMOVED:
-            case Event.PROPERTY_REMOVED:
-                if (child != null) {
-                    Status status = child.getStatus();
-                    if (Status.EXISTING_REMOVED == status) {
-                        // colliding item removal -> mark parent stale
-                        internalGetItemState().setStatus(Status.MODIFIED);
-                    }
-                    child.remove();
-                } // else: child-Entry has not been loaded yet -> ignore
-                break;
-
-            case Event.PROPERTY_CHANGED:
-                if (child == null) {
-                    // prop-Entry has not been loaded yet -> add propEntry
-                    internalAddPropertyEntry(eventName, true);
-                } else if (child.isAvailable()) {
-                    Status status = child.getStatus();
-                    // if the child has pending changes -> stale.
-                    // Reload data from server and try to merge them with the
-                    // current session-state. if the latter is transiently
-                    // modified and merge fails it must be marked STALE afterwards.
-                    if (Status.isStale(status))  {
-                        // ignore. nothing to do.
-                    } else if (Status.isTransient(child.getStatus())) {
-                        // pending changes -> don't reload entry but rather
-                        // mark it stale
-                        child.internalGetItemState().setStatus(Status.MODIFIED);
-                    } else {
-                        // no pending changes -> invalidate and force reload
-                        // upon next access.
-                        child.invalidate(false);
-                        // special cases: jcr:uuid and jcr:mixinTypes affect the
-                        // parent (i.e. this NodeEntry)
-                        if (isUuidOrMixin(eventName)) {
-                            if (!(child instanceof PropertyEntry)) {
-                                IllegalArgumentException e = new IllegalArgumentException("Invalid event: " + childEvent);
-                                log.error(e.getMessage(), e);
-                                throw e;
-                            }
-
-                            notifyUUIDorMIXINModified(Unchecked.<PropertyEntry>cast(child));
-                        }
-                    }
-                } // else: existing entry but state not yet built -> ignore event
-                break;
-            case Event.NODE_MOVED:
-                // TODO: implementation missing
-                UnsupportedOperationException e = new UnsupportedOperationException("Not implemented");
-                log.error(e.getMessage(), e);
-                throw e;
-                //break;
-            case Event.PERSIST:
-                // TODO: implementation missing
-                UnsupportedOperationException e0 = new UnsupportedOperationException("Not implemented");
-                log.error(e0.getMessage(), e0);
-                throw e0;
-            default:
-                // ILLEGAL
-                IllegalArgumentException e1 = new IllegalArgumentException("Illegal event type " +
-                        childEvent.getType() + " for NodeState.");
-                log.error(e1.getMessage(), e1);
-                throw e1;
-        }
-    }
-
     //-------------------------------------------------< HierarchyEntry >---
 
     @Override
@@ -1322,30 +1213,6 @@ public class NodeEntry extends Hierarchy
         }
     }
 
-    /**
-     * Searches the child-entries of this NodeEntry for a matching child.
-     * Since {@link #refresh(Event)} must always be called on the parent
-     * NodeEntry, there is no need to check if a given event id would point
-     * to this NodeEntry itself.
-     *
-     * @param eventId
-     * @param eventPath
-     * @return the entry or {@code null} if the matching entry has a status
-     * {@code Status#NEW}.
-     */
-    private HierarchyEntry<?> lookupEntry(ItemId eventId, Path eventPath) {
-        Name childName = eventPath.getName();
-        HierarchyEntry<?> child;
-        if (eventId.denotesNode()) {
-            String uniqueChildID = eventId.getPath() == null ? eventId.getUniqueID() : null;
-            int index = eventPath.getNormalizedIndex();
-            child = lookupNodeEntry(uniqueChildID, childName, index);
-        } else {
-            child = lookupPropertyEntry(childName);
-        }
-        return child;
-    }
-
     private NodeEntry lookupNodeEntry(String uniqueChildId, Name childName, int index) {
         NodeEntry child = null;
         if (uniqueChildId != null) {