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

svn commit: r474319 - in /jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi: ItemImpl.java state/ChangeLog.java state/ItemState.java state/NodeState.java state/PropertyState.java state/Status.java

Author: angela
Date: Mon Nov 13 05:56:21 2006
New Revision: 474319

URL: http://svn.apache.org/viewvc?view=rev&rev=474319
Log:
work in progress

- add invalidate(), refresh() to NodeState (missing impl)
- rename ItemState.refresh(ChangeLog) to persisted(ChangeLog)
- Item.refresh(boolean) must not call checkStatus. a stale, invalidated
  item may be refreshed unless its state has a terminal status (removed, stale_destroyed). ItemState.refresh() is therefore called after reverting transient modifications only.
- javadoc and some comments

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/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/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/Status.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?view=diff&rev=474319&r1=474318&r2=474319
==============================================================================
--- 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 Mon Nov 13 05:56:21 2006
@@ -241,15 +241,21 @@
      * @see javax.jcr.Item#refresh(boolean)
      */
     public void refresh(boolean keepChanges) throws InvalidItemStateException, RepositoryException {
-        checkStatus();
+        // check session status
+        session.checkIsAlive();
+        // check if item has been removed
+        if (Status.isTerminal(state.getStatus())) {
+            throw new InvalidItemStateException("Item '" + this + "' doesn't exist anymore");
+        }
 
-        if (!keepChanges) {
+        if (keepChanges) {
+            state.refresh();
+        } else {
             // check status of this item's state
-            switch (state.getStatus()) {
-                case Status.NEW:
-                    String msg = "Cannot refresh a new item (" + safeGetJCRPath() + ").";
-                    log.debug(msg);
-                    throw new RepositoryException(msg);
+            if (state.getStatus() == Status.NEW) {
+                String msg = "Cannot refresh a new item (" + safeGetJCRPath() + ").";
+                log.debug(msg);
+                throw new RepositoryException(msg);
             }
 
             // reset all transient modifications from this item and its decendants.
@@ -260,10 +266,9 @@
                 log.debug(msg);
                 throw new RepositoryException(msg, e);
             }
+            // now refresh to persistent state as present on the server
+            state.refresh();
         }
-
-        // now refresh to persistent state on server
-        state.refresh();
     }
 
     /**
@@ -400,17 +405,14 @@
         // check session status
         session.checkIsAlive();
         // check status of this item for read operation
-        if (state != null) {
-            if (state.getStatus() == Status.INVALIDATED) {
-                // refresh to get current status from persistent storage
-                state.refresh();
-            }
-            // now check if valid
-            if (state.isValid()) {
-                return;
-            }
+        if (state.getStatus() == Status.INVALIDATED) {
+            // refresh to get current status from persistent storage
+            state.refresh();
+        }
+        // now check if valid
+        if (!state.isValid()) {
+            throw new InvalidItemStateException("Item '" + this + "' doesn't exist anymore");
         }
-        throw new InvalidItemStateException("Item '" + this + "' doesn't exist anymore");
     }
 
     /**

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?view=diff&rev=474319&r1=474318&r2=474319
==============================================================================
--- 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 Mon Nov 13 05:56:21 2006
@@ -124,11 +124,11 @@
 
     /**
      * Call this method when this change log has been sucessfully persisted.
-     * This implementation will call {@link ItemState#refresh(ChangeLog)
+     * This implementation will call {@link ItemState#persisted(ChangeLog)
      * ItemState.refresh(this)} on the target item of this change log.
      */
     public void persisted() {
-        target.refresh(this);
+        target.persisted(this);
     }
 
     //----------------------< Retrieve information present in the ChangeLog >---

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?view=diff&rev=474319&r1=474318&r2=474319
==============================================================================
--- 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 Mon Nov 13 05:56:21 2006
@@ -227,8 +227,7 @@
                 builder.addLast(name, index);
             }
         } else {
-            PropertyState propState = (PropertyState) state;
-            // add to path
+            // property-state: add to path
             builder.addLast(name);
         }
     }
@@ -333,12 +332,13 @@
 
     /**
      * Unmodifiable iterator over the listeners present on this item state.
-     * 
+     *
      * @return
      */
     public Iterator getListeners() {
         return Collections.unmodifiableCollection(listeners).iterator();
     }
+
     //-----------------------------------------< ItemStateLifeCycleListener >---
     /**
      *
@@ -358,6 +358,8 @@
                         synchronized (this) {
                             reset();
                         }
+                        // temporarily set the state to MODIFIED in order to
+                        // inform listeners.
                         setStatus(Status.MODIFIED);
                     } else if (status == Status.EXISTING_MODIFIED) {
                         setStatus(Status.STALE_MODIFIED);
@@ -417,7 +419,7 @@
     }
 
     /**
-     * @throws IllegalStateException if this state is a 'session' state.
+     * @throws IllegalStateException if this state is a 'workspace' state.
      */
     public void checkIsSessionState() {
         if (isWorkspaceState) {
@@ -471,7 +473,7 @@
      * @param changeLog
      * @throws IllegalStateException if this state is a 'session' state.
      */
-    abstract void refresh(ChangeLog changeLog) throws IllegalStateException;
+    abstract void persisted(ChangeLog changeLog) throws IllegalStateException;
 
     /**
      * Copy all state information from overlayed state to this state
@@ -504,11 +506,12 @@
     abstract void remove() throws ItemStateException;
 
     /**
-     * Reverts this item state to its initial status and adds itself to the Set
-     * of <code>affectedItemStates</code> if it reverted itself.
+     * Reverts this item state to its initial status (i.e. removing any transient
+     * modifications and adds itself to the Set of <code>affectedItemStates</code>
+     * if it is reverted itself.
      *
      * @param affectedItemStates the set of affected item states that reverted
-     *                           themselfes.
+     * themselfes.
      */
     abstract void revert(Set affectedItemStates);
 

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?view=diff&rev=474319&r1=474318&r2=474319
==============================================================================
--- 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 Mon Nov 13 05:56:21 2006
@@ -207,6 +207,14 @@
         return getNodeId();
     }
 
+    public void refresh() {
+        // TODO
+    }
+
+    public void invalidate() {
+        // TODO
+    }
+
     //----------------------------------------------------------< NodeState >---
     /**
      * Returns the id of this node state.
@@ -688,9 +696,9 @@
     //----------------------------------------------------< Session - State >---
     /**
      * {@inheritDoc}
-     * @see ItemState#refresh(ChangeLog)
+     * @see ItemState#persisted(ChangeLog)
      */
-    void refresh(ChangeLog changeLog) throws IllegalStateException {
+    void persisted(ChangeLog changeLog) throws IllegalStateException {
 
         // remember parent states that have need to adjust their uuid/mixintypes
         // or that got a new child entry added or existing entries removed.
@@ -938,14 +946,14 @@
     }
 
     /**
-     * Reverts all property and child node states that belong to this
-     * <code>NodeState</code> and finally reverts this <code>NodeState</code>.
+     * Calls {@link #revert(Set) on all child states and add itself to the
+     * set of affected states, if the current status indicates, that this
+     * <code>NodeState</code> has been transiently modified.
      *
      * @inheritDoc
      * @see ItemState#revert(Set)
      */
     void revert(Set affectedItemStates) {
-        // TODO: TOBEFIXED. revert must include an update with the latest state present on the server
         checkIsSessionState();
 
         // copy to new list, when a property is reverted it may call this node

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?view=diff&rev=474319&r1=474318&r2=474319
==============================================================================
--- 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 Mon Nov 13 05:56:21 2006
@@ -309,9 +309,9 @@
     //----------------------------------------------------< Session - State >---
     /**
      * {@inheritDoc}
-     * @see ItemState#refresh(ChangeLog)
+     * @see ItemState#persisted(ChangeLog)
      */
-    void refresh(ChangeLog changeLog) throws IllegalStateException {
+    void persisted(ChangeLog changeLog) throws IllegalStateException {
         for (Iterator it = changeLog.modifiedStates(); it.hasNext();) {
             ItemState modState = (ItemState) it.next();
             if (modState == this) {
@@ -360,7 +360,6 @@
      * @see ItemState#revert(Set)
      */
     void revert(Set affectedItemStates) {
-        // TODO: TOBEFIXED. revert must include an update with the latest state present on the server
         checkIsSessionState();
 
         switch (getStatus()) {

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java?view=diff&rev=474319&r1=474318&r2=474319
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/Status.java Mon Nov 13 05:56:21 2006
@@ -131,6 +131,16 @@
         return status == EXISTING_MODIFIED || status == EXISTING_REMOVED || status == NEW;
     }
 
+    /**
+     * Returns true, if the status of an item state can be changed from
+     * <code>oldStatus</code> to <code>newStatus</code>, and false if the
+     * change is illegal or if any of the given status flags is illegal.
+     *
+     * @param oldStatus
+     * @param newStatus
+     * @param isWorkspaceState
+     * @return
+     */
     public static boolean isValidStatusChange(int oldStatus, int newStatus,
                                               boolean isWorkspaceState) {
         if (oldStatus == newStatus) {
@@ -147,24 +157,16 @@
                     break;
                 case MODIFIED:
                     // temporary state when workspace state is updated or refreshed
-                    switch (oldStatus) {
-                        case EXISTING: // refresh of existing item state
-                        case INVALIDATED: // invalidated item state is refreshed
-                            isValid = true;
-                            break;
-                    }
+                    isValid = (oldStatus == EXISTING || oldStatus == INVALIDATED);
                     break;
                 case REMOVED:
-                    switch (oldStatus) {
-                        case EXISTING: // existing workspace state is externally removed
-                        case INVALIDATED: // invalidated item state is refreshed
-                            isValid = true;
-                            break;
-                    }
+                    // existing or invalidated workspace state is externally removed
+                    isValid = (oldStatus == EXISTING || oldStatus == INVALIDATED);
                     break;
                 // default: no other status possible : -> false
             }
         } else {
+            // valid status changes for session-states
             switch (newStatus) {
                 case INVALIDATED:
                     isValid = (oldStatus == EXISTING); // invalidate
@@ -193,7 +195,8 @@
                     isValid = (oldStatus == EXISTING_MODIFIED);
                     break;
                 case REMOVED:
-                    isValid = (oldStatus == NEW || oldStatus == EXISTING || oldStatus == EXISTING_REMOVED || oldStatus == INVALIDATED);
+                    isValid = (oldStatus == NEW || oldStatus == INVALIDATED ||
+                               oldStatus == EXISTING || oldStatus == EXISTING_REMOVED );
                     break;
                 case MODIFIED:
                     isValid = (oldStatus == EXISTING);