You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2006/08/23 11:56:27 UTC

svn commit: r433998 - in /jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi: ./ state/

Author: mreutegg
Date: Wed Aug 23 02:56:24 2006
New Revision: 433998

URL: http://svn.apache.org/viewvc?rev=433998&view=rev
Log:
- Use ItemStateLifeCycleListener instead of ItemStateListener in ItemImpl.
- Remove usage of ItemState.dispose() and the method itself.
- Remove method ItemStateListener.stateDiscarded() and all implementations of that method.
- Remove unused methods in ChangeLog: disconnect() and undo()
- Remove ItemState.discard() and related methods
- Rename ItemState.copy() to ItemState.copyFrom()
- Remove ItemState.STATUS_UNDEFINED. An ItemState always has a defined status!
- Rename TransientItemStateManager.disposeAllItemStates() to simply dispose().
- Introduce method ItemState.refresh() which is called instead of discard(). (Not yet implemented!)
- Clarify useage of WorkspaceManager.onEventReceived()

Modified:
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateListener.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateManager.java

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java Wed Aug 23 02:56:24 2006
@@ -23,7 +23,7 @@
 import org.apache.jackrabbit.jcr2spi.state.ItemStateValidator;
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
 import org.apache.jackrabbit.jcr2spi.state.PropertyState;
-import org.apache.jackrabbit.jcr2spi.state.ItemStateListener;
+import org.apache.jackrabbit.jcr2spi.state.ItemStateLifeCycleListener;
 import org.apache.jackrabbit.jcr2spi.operation.Remove;
 import org.apache.jackrabbit.jcr2spi.operation.Operation;
 import org.apache.jackrabbit.jcr2spi.util.LogUtil;
@@ -59,7 +59,7 @@
  * <code>ItemImpl</code>...
  * TODO: remove status in ItemImpl and ask item state for status!
  */
-public abstract class ItemImpl implements Item, ItemStateListener {
+public abstract class ItemImpl implements Item, ItemStateLifeCycleListener {
 
     private static Logger log = LoggerFactory.getLogger(ItemImpl.class);
 
@@ -276,7 +276,7 @@
         session.getSessionItemStateManager().execute(rm);
     }
 
-    //--------------------------------------------------< ItemStateListener >---
+    //-----------------------------------------< ItemStateLifeCycleListener >---
     /**
      * {@inheritDoc}
      */
@@ -307,82 +307,41 @@
     public void stateModified(ItemState modified) {
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public void stateDiscarded(ItemState discarded) {
-        /**
-         * the state of this item has been discarded, probably as a result
-         * of calling Node.revert() or ItemImpl.setRemoved()
-         */
-        if (isTransient()) {
-            switch (state.getStatus()) {
-                /**
-                 * persistent item that has been transiently removed
-                 */
-                case ItemState.STATUS_EXISTING_REMOVED:
-                    /**
-                     * persistent item that has been transiently modified
-                     */
-                case ItemState.STATUS_EXISTING_MODIFIED:
-                    /**
-                     * persistent item that has been transiently modified or removed
-                     * and the underlying persistent state has been externally
-                     * modified since the transient modification/removal.
-                     */
-                case ItemState.STATUS_STALE_MODIFIED:
-                    ItemState persistentState = state.getOverlayedState();
-                    /**
-                     * the state is a transient wrapper for the underlying
-                     * persistent state, therefore restore the
-                     * persistent state and resurrect this item instance
-                     * if necessary
-                     */
-                    // DIFF JACKRABBIT: this is now done in stateUncovering()
-//                    state.removeListener(this);
-//                    persistentState.addListener(this);
-//                    itemStateMgr.disconnectTransientItemState(state);
-//                    state = persistentState;
-
-                    return;
-
-                    /**
-                     * persistent item that has been transiently modified or removed
-                     * and the underlying persistent state has been externally
-                     * destroyed since the transient modification/removal.
-                     */
-                case ItemState.STATUS_STALE_DESTROYED:
-                    /**
-                     * first notify the listeners that this instance has been
-                     * permanently invalidated
-                     */
-                    notifyDestroyed();
-                    // finally dispose state
-                    state.removeListener(this);
-                    state = null;
-                    return;
-
-                    /**
-                     * new item that has been transiently added
-                     */
-                case ItemState.STATUS_NEW:
-                    /**
-                     * first notify the listeners that this instance has been
-                     * permanently invalidated
-                     */
-                    notifyDestroyed();
-                    // finally dispose state
-                    state.removeListener(this);
-                    state = null;
-                    return;
-            }
+    public void statusChanged(ItemState state, int previousStatus) {
+        // TODO: remove this ItemImpl as listener from ItemState when it is destroyed?
+        switch (state.getStatus()) {
+            case ItemState.STATUS_EXISTING:
+                // this item was modified and is now reverted or has been saved
+                // -> nothing to do
+                break;
+            case ItemState.STATUS_EXISTING_MODIFIED:
+                // item was modified and is not existing-modified
+                // -> nothing to do
+                break;
+            case ItemState.STATUS_EXISTING_REMOVED:
+                // item is transiently removed
+                // notify listeners of this item that this item has been destroyed
+                notifyDestroyed();
+                break;
+            case ItemState.STATUS_NEW:
+                // should never happen. an item cannot change its state to new
+                log.warn("invalid state change to STATUS_NEW");
+                break;
+            case ItemState.STATUS_REMOVED:
+                // item has been removed permanently
+                notifyDestroyed();
+                break;
+            case ItemState.STATUS_STALE_DESTROYED:
+                // item has been removed permanently while there were transient
+                // changes pending
+                notifyDestroyed();
+                break;
+            case ItemState.STATUS_STALE_MODIFIED:
+                // item has been modified externaly while there were transient
+                // changes pending
+                // -> nothing to do
+                break;
         }
-
-        /**
-         * first notify the listeners that this instance has been
-         * invalidated
-         */
-        notifyInvalidated();
     }
 
     //----------------------------------------------------------< LiveCycle >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Wed Aug 23 02:56:24 2006
@@ -270,7 +270,8 @@
         if (Boolean.getBoolean(desc)) {
             l = new EventListener() {
                 public void onEvent(EventIterator events) {
-                    onEventReceived(null, events, false); // external
+                    // external change
+                    onEventReceived(null, events);
                 }
             };
             int allTypes = Event.NODE_ADDED | Event.NODE_REMOVED |
@@ -461,15 +462,32 @@
 
     /**
      * Called when local or external events occured. This method is called after
-     * changes have been applied to the repository.
+     * changes have been applied to the repository. Depending on <code>changeLog</code>
+     * this method is called as a result of:
+     * <ul>
+     * <li>a local <code>save</code> of transient changes. In this case
+     * <code>changeLog</code> is non-<code>null</code>.</li>
+     * <li>an execution of a workspace operation. In this case
+     * <code>changeLog</code> is <code>null</code></li>
+     * <li>an external change to the workspace (another session modified the
+     * workspace). In this case <code>changeLog</code> is <code>null</code></li>
+     * </ul>
      *
-     * @param changeLog
-     * @param events the events.
-     * @param isLocal <code>true</code> if changes were local.
+     * @param changeLog the local <code>ChangeLog</code> which contains the
+     *                  affected transient <code>ItemState</code>s and the
+     *                  relevant {@link Operation}s that lead to the
+     *                  modifications. If <code>null</code> this method is
+     *                  called as a consequence of an external change or a call
+     *                  of a workspace operation. In that case there are no
+     *                  local transient changes.
+     * @param events    the events generated by the repository service as a
+     *                  response to the changes.
      */
-    private void onEventReceived(ChangeLog changeLog, EventIterator events, boolean isLocal) {
+    private void onEventReceived(ChangeLog changeLog, EventIterator events) {
         if (changeLog != null) {
-            // use current change log for notification
+            // now we need to apply the transient changes in changeLog to
+            // the ItemStates in the workspace layer
+            changeLog.push();
             changeLog.persisted();
         }
 
@@ -483,7 +501,7 @@
 
         InternalEventListener[] lstnrs = (InternalEventListener[]) listeners.toArray(new InternalEventListener[listeners.size()]);
         for (int i = 0; i < lstnrs.length; i++) {
-           lstnrs[i].onEvent(new EventIteratorImpl(eventList), isLocal);
+           lstnrs[i].onEvent(new EventIteratorImpl(eventList), changeLog != null);
         }
     }
 
@@ -520,7 +538,7 @@
             } finally {
                 if (batch != null) {
                     EventIterator events = service.submit(batch);
-                    onEventReceived(changeLog, events, true);
+                    onEventReceived(changeLog, events);
                     // reset batch field
                     batch = null;
                 }
@@ -538,7 +556,8 @@
                 success = true;
             } finally {
                 if (success && events != null) {
-                    onEventReceived(null, events, true);
+                    // a workspace operation is like an external change
+                    onEventReceived(null, events);
                 }
             }
         }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java Wed Aug 23 02:56:24 2006
@@ -270,8 +270,5 @@
 
         public void stateDestroyed(ItemState destroyed) {
         }
-
-        public void stateDiscarded(ItemState discarded) {
-        }
     }
 }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java Wed Aug 23 02:56:24 2006
@@ -284,20 +284,19 @@
         while (iter.hasNext()) {
             ItemState state = (ItemState) iter.next();
             state.setStatus(ItemState.STATUS_EXISTING);
-            state.notifyStateUpdated();
+            state.notifyStateUpdated();  // TODO: is this needed anymore?
         }
         iter = deletedStates();
         while (iter.hasNext()) {
             ItemState state = (ItemState) iter.next();
-            state.setStatus(ItemState.STATUS_EXISTING_REMOVED);
-            state.notifyStateDestroyed();
-            state.discard();
+            state.setStatus(ItemState.STATUS_REMOVED);
+            state.notifyStateDestroyed();  // TODO: is this needed anymore?
         }
         iter = addedStates();
         while (iter.hasNext()) {
             ItemState state = (ItemState) iter.next();
             state.setStatus(ItemState.STATUS_EXISTING);
-            state.notifyStateCreated();
+            state.notifyStateCreated();  // TODO: is this needed anymore?
         }
     }
 
@@ -312,60 +311,6 @@
         modifiedRefs.clear();
         // also clear all operations
         operations.clear();
-    }
-
-    /**
-     * Disconnect all states in the change log from their overlaid
-     * states.
-     */
-    public void disconnect() {
-        Iterator iter = modifiedStates();
-        while (iter.hasNext()) {
-            ((ItemState) iter.next()).disconnect();
-        }
-        iter = deletedStates();
-        while (iter.hasNext()) {
-            ((ItemState) iter.next()).disconnect();
-        }
-        iter = addedStates();
-        while (iter.hasNext()) {
-            ((ItemState) iter.next()).disconnect();
-        }
-    }
-
-    /**
-     * Undo changes made to items in the change log. Discards
-     * added items, refreshes modified and resurrects deleted
-     * items.
-     *
-     * @param parent parent manager that will hold current data
-     */
-    public void undo(ItemStateManager parent) {
-        Iterator iter = modifiedStates();
-        while (iter.hasNext()) {
-            ItemState state = (ItemState) iter.next();
-            try {
-                state.connect(parent.getItemState(state.getId()));
-                state.pull();
-            } catch (ItemStateException e) {
-                state.discard();
-            }
-        }
-        iter = deletedStates();
-        while (iter.hasNext()) {
-            ItemState state = (ItemState) iter.next();
-            try {
-                state.connect(parent.getItemState(state.getId()));
-                state.pull();
-            } catch (ItemStateException e) {
-                state.discard();
-            }
-        }
-        iter = addedStates();
-        while (iter.hasNext()) {
-            ((ItemState) iter.next()).discard();
-        }
-        reset();
     }
 
     //-------------------------------------------------------------< Object >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemState.java Wed Aug 23 02:56:24 2006
@@ -37,10 +37,6 @@
 
      //----------------< flags defining the current status of this instance >---
     /**
-     * the status is undefined
-     */
-    public static final int STATUS_UNDEFINED = 0;
-    /**
      * 'existing', i.e. persistent state
      */
     public static final int STATUS_EXISTING = 1;
@@ -73,7 +69,7 @@
     /**
      * the internal status of this item state
      */
-    protected int status = STATUS_UNDEFINED;
+    protected int status;
 
     /**
      * Flag indicating whether this state is transient
@@ -158,14 +154,14 @@
      * Copy state information from another state into this state
      * @param state source state information
      */
-    abstract void copy(ItemState state);
+    abstract void copyFrom(ItemState state);
 
     /**
      * Pull state information from overlayed state.
      */
     void pull() {
         if (overlayedState != null) {
-            copy(overlayedState);
+            copyFrom(overlayedState);
         }
     }
 
@@ -174,21 +170,7 @@
      */
     void push() {
         if (overlayedState != null) {
-            overlayedState.copy(this);
-        }
-    }
-
-    /**
-     * Called by <code>TransientItemStateManager</code> and
-     * <code>LocalItemStateManager</code> when this item state has been disposed.
-     */
-    void onDisposed() {
-        disconnect();
-        overlayedState = null;
-        setStatus(STATUS_UNDEFINED);
-        // prepare this instance so it can be gc'ed
-        synchronized (listeners) {
-            listeners.clear();
+            overlayedState.copyFrom(this);
         }
     }
 
@@ -227,34 +209,12 @@
         }
     }
 
-
-    /**
-     * Discards this instance, i.e. renders it 'invalid'.
-     */
-    protected void discard() {
-        if (status != STATUS_UNDEFINED) {
-            // notify listeners
-            notifyStateDiscarded();
-            // reset status
-            setStatus(STATUS_UNDEFINED);
-        }
-    }
-
     /**
-     * Notify the listeners that the persistent state this object is
-     * representing has been discarded.
+     * Refreshes this item state
      */
-    protected void notifyStateDiscarded() {
-        // copy listeners to array to avoid ConcurrentModificationException
-        ItemStateListener[] la;
-        synchronized (listeners) {
-            la = (ItemStateListener[]) listeners.toArray(new ItemStateListener[listeners.size()]);
-        }
-        for (int i = 0; i < la.length; i++) {
-            if (la[i] != null) {
-                la[i].stateDiscarded(this);
-            }
-        }
+    protected void refresh() {
+        // TODO: how is this done? where is the new state retrieved from???
+        // TODO: pass in as argument?
     }
 
     /**
@@ -345,7 +305,6 @@
                 // is stale anyway.
                 break;
             case STATUS_EXISTING_REMOVED:
-            case STATUS_UNDEFINED:
             default:
                 String msg = "Cannot mark item state with status " + status + " modified.";
                 throw new IllegalStateException(msg);
@@ -431,7 +390,6 @@
             case STATUS_EXISTING_MODIFIED:
             case STATUS_STALE_MODIFIED:
             case STATUS_STALE_DESTROYED:
-            case STATUS_UNDEFINED:
                 status = newStatus;
                 break;
             default:
@@ -557,13 +515,5 @@
                 notifyStateUpdated();
             }
         }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void stateDiscarded(ItemState discarded) {
-        // underlying persistent state has been discarded, discard this instance too
-        discard();
     }
 }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateListener.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateListener.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateListener.java Wed Aug 23 02:56:24 2006
@@ -47,13 +47,4 @@
      * @param destroyed the <code>ItemState</code> that has been 'destroyed'
      */
     void stateDestroyed(ItemState destroyed);
-
-    /**
-     * Called when an <code>ItemState</code> has been discarded (i.e. it has
-     * been rendered 'invalid').
-     *
-     * @param discarded the <code>ItemState</code> that has been discarded
-     * @see ItemState#discard
-     */
-    void stateDiscarded(ItemState discarded);
 }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java Wed Aug 23 02:56:24 2006
@@ -172,7 +172,7 @@
     /**
      * {@inheritDoc}
      */
-    protected synchronized void copy(ItemState state) {
+    protected synchronized void copyFrom(ItemState state) {
         synchronized (state) {
             NodeState nodeState = (NodeState) state;
             name = nodeState.name;

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java Wed Aug 23 02:56:24 2006
@@ -164,7 +164,7 @@
     /**
      * {@inheritDoc}
      */
-    protected synchronized void copy(ItemState state) {
+    protected synchronized void copyFrom(ItemState state) {
         synchronized (state) {
             PropertyState propState = (PropertyState) state;
             name = propState.name;

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java Wed Aug 23 02:56:24 2006
@@ -228,7 +228,7 @@
      */
     public void dispose() {
         // discard all transient changes
-        transientStateMgr.disposeAllItemStates();
+        transientStateMgr.dispose();
         // dispose our (i.e. 'local') state manager
         workspaceItemStateMgr.dispose();
     }
@@ -387,12 +387,6 @@
                             log.debug(msg);
                             throw new StaleItemStateException(msg);
                         }
-                    case ItemState.STATUS_UNDEFINED:
-                        {
-                            String msg = LogUtil.safeGetJCRPath(state, nsResolver, hierMgr) + ": the item cannot be saved; it seems to have been removed externally.";
-                            log.debug(msg);
-                            throw new StaleItemStateException(msg);
-                        }
                 }
             }
         }
@@ -425,12 +419,6 @@
                 case ItemState.STATUS_STALE_DESTROYED:
                     if (throwOnStale) {
                         String msg = transientState.getId() + ": the item cannot be saved because it has been deleted externally.";
-                        log.debug(msg);
-                        throw new StaleItemStateException(msg);
-                    }
-                case ItemState.STATUS_UNDEFINED:
-                    if (throwOnStale) {
-                        String msg = transientState.getId() + ": the item cannot be saved; it seems to have been removed externally.";
                         log.debug(msg);
                         throw new StaleItemStateException(msg);
                     }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java Wed Aug 23 02:56:24 2006
@@ -252,18 +252,10 @@
     }
 
     /**
-     * Disposes all transient item states in the cache and in the attic.
+     * Disposes this transient item state manager. Clears all references to
+     * transiently modified item states.
      */
-    public void disposeAllItemStates() {
-        IteratorChain it = new IteratorChain();
-        it.addIterator(changeLog.modifiedStates());
-        it.addIterator(changeLog.addedStates());
-        it.addIterator(changeLog.deletedStates());
-        while (it.hasNext()) {
-            ItemState state = (ItemState) it.next();
-            state.discard();
-            state.onDisposed();
-        }
+    public void dispose() {
         changeLog.reset();
     }
 
@@ -334,14 +326,6 @@
 
     /**
      * @inheritDoc
-     * @see ItemStateListener#stateDiscarded(ItemState)
-     */
-    public void stateDiscarded(ItemState discarded) {
-        // TODO: remove from modified (and deleted?) set of change log
-    }
-
-    /**
-     * @inheritDoc
      * @see ItemStateLifeCycleListener#statusChanged(ItemState, int)
      */
     public void statusChanged(ItemState state, int previousStatus) {
@@ -395,10 +379,6 @@
             case ItemState.STATUS_NEW:
                 // new state has been created
                 changeLog.added(state);
-                break;
-            case ItemState.STATUS_UNDEFINED:
-                // should never happen
-                log.warn("ItemState changed status to 'undefined'");
                 break;
             default:
                 log.warn("ItemState has invalid status: " + state.getStatus());

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateManager.java?rev=433998&r1=433997&r2=433998&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateManager.java Wed Aug 23 02:56:24 2006
@@ -76,12 +76,12 @@
                     if (state != null) {
                         // TODO: item already exists ???
                         // invalidate
-                        state.discard();
+                        state.refresh();
                     }
                     parent = (NodeState) lookup(parentId);
                     if (parent != null) {
                         // discard and let wsp manager reload state when accessed next time
-                        parent.discard();
+                        parent.refresh();
                     }
                     break;
                 case Event.NODE_REMOVED:
@@ -98,7 +98,7 @@
                             // do not invalidate here
                         } else {
                             // discard and let wsp manager reload state when accessed next time
-                            parent.discard();
+                            parent.refresh();
                         }
                     }
                     break;
@@ -106,7 +106,7 @@
                     state = lookup(itemId);
                     // discard and let wsp manager reload state when accessed next time
                     if (state != null) {
-                        state.discard();
+                        state.refresh();
                     }
             }
         }