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/10/11 08:57:24 UTC
svn commit: r462717 - in
/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state:
ItemState.java Status.java WorkspaceItemStateManager.java
Author: angela
Date: Tue Oct 10 23:57:24 2006
New Revision: 462717
URL: http://svn.apache.org/viewvc?view=rev&rev=462717
Log:
work in progress
- more todos
- revert tmp status 'modified' immediately after notifying overlaying state.
- setStatus: delegate validation to Status
Modified:
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/Status.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/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=462717&r1=462716&r2=462717
==============================================================================
--- 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 Tue Oct 10 23:57:24 2006
@@ -272,45 +272,11 @@
if (Status.isTerminalStatus(oldStatus)) {
throw new IllegalStateException("State is already in terminal status " + oldStatus);
}
-
- if (isWorkspaceState()) {
- switch (newStatus) {
- case Status.EXISTING:
- case Status.MODIFIED:
- case Status.REMOVED:
- status = newStatus;
- break;
-
- case Status.NEW:
- case Status.EXISTING_REMOVED:
- case Status.EXISTING_MODIFIED:
- case Status.STALE_MODIFIED:
- case Status.STALE_DESTROYED:
- default:
- String msg = "Illegal status " + newStatus + " for 'workspace' state.";
- log.debug(msg);
- throw new IllegalArgumentException(msg);
- }
+ if (Status.isValidStatusChange(oldStatus, newStatus, isWorkspaceState)) {
+ status = newStatus;
} else {
- switch (newStatus) {
- case Status.NEW:
- case Status.EXISTING:
- case Status.EXISTING_REMOVED:
- case Status.EXISTING_MODIFIED:
- case Status.STALE_MODIFIED:
- case Status.STALE_DESTROYED:
- case Status.REMOVED:
- status = newStatus;
- break;
-
- case Status.MODIFIED:
- default:
- String msg = "Illegal status " + newStatus + " for 'session' state.";
- log.debug(msg);
- throw new IllegalArgumentException(msg);
- }
+ throw new IllegalArgumentException("Invalid new status " + newStatus + " for state with status " + oldStatus);
}
-
// notifiy listeners about status change
// copy listeners to array to avoid ConcurrentModificationException
ItemStateLifeCycleListener[] la;
@@ -322,6 +288,13 @@
((ItemStateLifeCycleListener) la[i]).statusChanged(this, oldStatus);
}
}
+ if (status == Status.MODIFIED) {
+ // change back tmp MODIFIED status, that is used only to have a marker
+ // to inform the overlaying state, that it needs to synchronize with
+ // its overlayed state again
+ // TODO: improve...
+ status = Status.EXISTING;
+ }
}
/**
@@ -515,8 +488,6 @@
break;
case Status.MODIFIED:
if (previousStatus == Status.EXISTING) {
- // change back // TODO: improve...
- state.status = Status.EXISTING;
// underlying state has been modified
if (isTransient()) {
setStatus(Status.STALE_MODIFIED);
@@ -527,9 +498,6 @@
setStatus(Status.EXISTING);
}
}
- } else {
- // ILLEGAL
- throw new IllegalArgumentException();
}
break;
case Status.REMOVED:
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=462717&r1=462716&r2=462717
==============================================================================
--- 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 Tue Oct 10 23:57:24 2006
@@ -67,4 +67,57 @@
return status == REMOVED || status == STALE_DESTROYED;
}
+ public static boolean isValidStatusChange(int oldStatus, int newStatus,
+ boolean isWorkspaceState) {
+ if (oldStatus == newStatus) {
+ return true;
+ }
+ boolean isValid = false;
+ if (isWorkspaceState) {
+ switch (newStatus) {
+ case EXISTING:
+ isValid = (oldStatus == MODIFIED);
+ break;
+ case MODIFIED:
+ isValid = (oldStatus == EXISTING);
+ break;
+ case REMOVED:
+ isValid = (oldStatus == EXISTING);
+ break;
+ // default: no other status possible : -> false
+ }
+ } else {
+ switch (newStatus) {
+ case EXISTING:
+ switch (oldStatus) {
+ case NEW: /* save */
+ case EXISTING_MODIFIED: /* save, revert */
+ case EXISTING_REMOVED: /* revert */
+ case STALE_MODIFIED: /* revert */
+ isValid = true;
+ break;
+ /* REMOVED, STALE_DESTROYED -> false */
+ }
+ break;
+ case EXISTING_MODIFIED:
+ isValid = (oldStatus == EXISTING);
+ break;
+ case EXISTING_REMOVED:
+ isValid = (oldStatus == EXISTING || oldStatus == EXISTING_MODIFIED);
+ break;
+ case STALE_MODIFIED:
+ case STALE_DESTROYED:
+ isValid = (oldStatus == EXISTING_MODIFIED);
+ break;
+ case REMOVED:
+ isValid = (oldStatus == NEW || oldStatus == EXISTING || oldStatus == EXISTING_REMOVED);
+ break;
+ /* default:
+ NEW cannot change state to NEW -> false
+ MODIFIED never applicable to session state -> false */
+
+ }
+ }
+ return isValid;
+ }
}
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?view=diff&rev=462717&r1=462716&r2=462717
==============================================================================
--- 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 Tue Oct 10 23:57:24 2006
@@ -63,6 +63,7 @@
}
// inform all transient states, that they have been persisted and must
// connect to their workspace state (and eventually reload the data).
+ // TODO: TOBEFIXED. only used to set status to EXISTING in order (which is probably wrong)
changeLog.persisted();
// inform all existing workspace states about the transient modifications