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/22 17:15:06 UTC

svn commit: r478211 - in /jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi: ./ lock/ operation/ state/ version/

Author: angela
Date: Wed Nov 22 08:15:04 2006
New Revision: 478211

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

- invalidation of itemstates in case of CacheBehaviour != Observation
- CacheBehaviour.Observation not dependent on Observation-RepositoryDescriptor
- SPI-observation may be implemented even if Observation is not supported according
  jcr-Repository descriptor

Modified:
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.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/lock/LockManagerImpl.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddLabel.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Clone.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Copy.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRefresh.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRelease.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveLabel.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveVersion.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/ResolveMergeConflict.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Restore.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Update.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateManager.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceImpl.java Wed Nov 22 08:15:04 2006
@@ -39,6 +39,7 @@
 import org.apache.jackrabbit.jcr2spi.name.NamespaceRegistryImpl;
 import org.apache.jackrabbit.jcr2spi.observation.ObservationManagerImpl;
 import org.apache.jackrabbit.jcr2spi.xml.WorkspaceContentHandler;
+import org.apache.jackrabbit.jcr2spi.config.CacheBehaviour;
 import org.apache.jackrabbit.spi.IdFactory;
 import org.apache.jackrabbit.spi.RepositoryService;
 import org.apache.jackrabbit.spi.SessionInfo;
@@ -107,8 +108,7 @@
         this.name = name;
         this.session = session;
 
-        wspManager = createManager(service, sessionInfo);
-        wspManager.setCacheBehaviour(session.getCacheBehaviour());
+        wspManager = createManager(service, session.getCacheBehaviour(), sessionInfo);
     }
 
     //----------------------------------------------------------< Workspace >---
@@ -456,8 +456,10 @@
      * @param service the RepositoryService
      * @return state manager
      */
-    protected WorkspaceManager createManager(RepositoryService service, SessionInfo sessionInfo) throws RepositoryException {
-        return new WorkspaceManager(service, sessionInfo);
+    protected WorkspaceManager createManager(RepositoryService service,
+                                             CacheBehaviour cacheBehaviour,
+                                             SessionInfo sessionInfo) throws RepositoryException {
+        return new WorkspaceManager(service, cacheBehaviour, sessionInfo);
     }
 
     /**

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?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- 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 Nov 22 08:15:04 2006
@@ -130,7 +130,7 @@
     private final SessionInfo sessionInfo;
 
     private final ItemStateManager cache;
-    private CacheBehaviour cacheBehaviour = CacheBehaviour.OBSERVATION;
+    private final CacheBehaviour cacheBehaviour;
 
     private final NamespaceRegistryImpl nsRegistry;
     private final NodeTypeRegistry ntRegistry;
@@ -161,9 +161,11 @@
      */
     private final Set listeners = Collections.synchronizedSet(new HashSet());
 
-    public WorkspaceManager(RepositoryService service, SessionInfo sessionInfo) throws RepositoryException {
+    public WorkspaceManager(RepositoryService service, CacheBehaviour cacheBehaviour,
+                            SessionInfo sessionInfo) throws RepositoryException {
         this.service = service;
         this.sessionInfo = sessionInfo;
+        this.cacheBehaviour = cacheBehaviour;
 
         cache = createItemStateManager();
 
@@ -171,7 +173,7 @@
 
         nsRegistry = createNamespaceRegistry(repositoryDescriptors);
         ntRegistry = createNodeTypeRegistry(nsRegistry, repositoryDescriptors);
-        externalChangeFeed = createChangeFeed(repositoryDescriptors, EXTERNAL_EVENT_POLLING_INTERVAL);
+        externalChangeFeed = createChangeFeed(EXTERNAL_EVENT_POLLING_INTERVAL);
     }
 
     public NamespaceRegistryImpl getNamespaceRegistryImpl() {
@@ -240,11 +242,23 @@
         sessionInfo.removeLockToken(lt);
     }
 
+    /**
+     *
+     * @return
+     * @throws RepositoryException
+     */
     public String[] getSupportedQueryLanguages() throws RepositoryException {
         // TODO: review
         return service.getSupportedQueryLanguages(sessionInfo);
     }
 
+    /**
+     *
+     * @param statement
+     * @param language
+     * @return
+     * @throws RepositoryException
+     */
     public QueryInfo executeQuery(String statement, String language)
             throws RepositoryException {
         return service.executeQuery(sessionInfo, statement, language);
@@ -282,42 +296,20 @@
      * @throws UnsupportedRepositoryOperationException
      *          if this implementation does not support observation.
      */
-    public EventFilter createEventFilter(int eventTypes,
-                                         Path path,
-                                         boolean isDeep,
-                                         String[] uuids,
-                                         QName[] nodeTypes,
+    public EventFilter createEventFilter(int eventTypes, Path path, boolean isDeep,
+                                         String[] uuids, QName[] nodeTypes,
                                          boolean noLocal)
-            throws UnsupportedRepositoryOperationException {
+        throws UnsupportedRepositoryOperationException {
         return service.createEventFilter(eventTypes, path, isDeep, uuids, nodeTypes, noLocal);
     }
-
-    //----------------------------------------------------< package private >---
-
-    /**
-     * Returns the current cache behaviour. Defaults to {@link
-     * CacheBehaviour#OBSERVATION} unless otherwise set using {@link
-     * #setCacheBehaviour(CacheBehaviour)}.
-     *
-     * @return the current cache behaviour.
-     */
-    CacheBehaviour getCacheBehaviour() {
-        return cacheBehaviour;
-    }
-
+    //--------------------------------------------------------------------------
     /**
-     * Sets the cache behaviour for this WorkspaceManager.
      *
-     * @param behaviour the cache behaviour.
+     * @return
      */
-    void setCacheBehaviour(CacheBehaviour behaviour) {
-        this.cacheBehaviour = behaviour;
-    }
-
-    //--------------------------------------------------------------------------
     private ItemStateManager createItemStateManager() {
         ItemStateFactory isf = new WorkspaceItemStateFactory(service, sessionInfo, this);
-        WorkspaceItemStateManager ism = new WorkspaceItemStateManager(this, isf, service.getIdFactory());
+        WorkspaceItemStateManager ism = new WorkspaceItemStateManager(this, cacheBehaviour, isf, service.getIdFactory());
         addEventListener(ism);
         return ism;
     }
@@ -354,20 +346,15 @@
      * Creates a background thread which polls for external changes on the
      * RepositoryService.
      *
-     * @param descriptors the repository descriptors.
      * @param pollingInterval the polling interval in milliseconds.
      * @return the background polling thread or <code>null</code> if the underlying
      *         <code>RepositoryService</code> does not support observation.
      */
-    private Thread createChangeFeed(Map descriptors, int pollingInterval) {
-        String desc = (String) descriptors.get(Repository.OPTION_OBSERVATION_SUPPORTED);
-        Thread t = null;
-        if (Boolean.valueOf(desc).booleanValue()) {
-            t = new Thread(new ExternalChangePolling(pollingInterval));
-            t.setName("External Change Polling");
-            t.setDaemon(true);
-            t.start();
-        }
+    private Thread createChangeFeed(int pollingInterval) {
+        Thread t = new Thread(new ExternalChangePolling(pollingInterval));
+        t.setName("External Change Polling");
+        t.setDaemon(true);
+        t.start();
         return t;
     }
 
@@ -1021,6 +1008,10 @@
                             log.debug("Event delivery signaled");
                         }
                     }
+                } catch (UnsupportedRepositoryOperationException e) {
+                    log.error("SPI implementation does not support observation: " + e);
+                    // terminate
+                    break;
                 } catch (RepositoryException e) {
                     log.warn("Exception while retrieving event bundles: " + e);
                     log.debug("Dump:", e);

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java Wed Nov 22 08:15:04 2006
@@ -466,7 +466,7 @@
             // child properties nor from the original lock request.
             this.lockInfo = wspManager.getLockInfo(lockHoldingState.getNodeId());
 
-            // TODO: TOBEFIXED...repository may not support observation
+            // TODO: TOBEFIXED...SPI may not support observation
             // register as internal listener to the wsp manager in order to get
             // informed if this lock ends his life.
             eventFilter = wspManager.createEventFilter(Event.PROPERTY_REMOVED,

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractCopy.java Wed Nov 22 08:15:04 2006
@@ -72,6 +72,16 @@
         this.srcWorkspaceName = srcWorkspaceName;
     }
 
+    //----------------------------------------------------------< Operation >---
+    /**
+     * Invalidate the destination parent <code>NodeState</code>.
+     * 
+     * @see Operation#persisted()
+     */
+    public void persisted() {
+        destParentState.invalidate(false);
+    }
+
     //----------------------------------------< Access Operation Parameters >---
     public String getWorkspaceName() {
         return srcWorkspaceName;

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddLabel.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddLabel.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddLabel.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddLabel.java Wed Nov 22 08:15:04 2006
@@ -19,7 +19,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.jcr2spi.state.ItemStateException;
+import org.apache.jackrabbit.jcr2spi.state.entry.ChildNodeEntry;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.AccessDeniedException;
@@ -66,10 +69,23 @@
     }
 
     /**
+     * Invalidates the jcr:versionlabel nodestate present with the given
+     * version history. If '<code>moveLabel</code>' is true, all decendant states
+     * (property states) are invalidated as well.
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        ChildNodeEntry lnEntry = versionHistoryState.getChildNodeEntry(QName.JCR_VERSIONLABELS, Path.INDEX_DEFAULT);
+        if (lnEntry.isAvailable()) {
+            try {
+                NodeState labelNodeState = lnEntry.getNodeState();
+                // if an existing label must be moved -> invalidate recursively
+                labelNodeState.invalidate(moveLabel);
+            } catch (ItemStateException e) {
+                // ignore
+            }
+        }
     }
     //----------------------------------------< Access Operation Parameters >---
     public NodeState getVersionHistoryState() {

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java Wed Nov 22 08:15:04 2006
@@ -39,22 +39,38 @@
     }
 
     //----------------------------------------------------------< Operation >---
+
+    /**
+     * @see Operation#accept(OperationVisitor)
+     */
     public void accept(OperationVisitor visitor) throws RepositoryException, ConstraintViolationException, AccessDeniedException, ItemExistsException, NoSuchNodeTypeException, UnsupportedRepositoryOperationException, VersionException {
         visitor.visit(this);
     }
 
+    /**
+     * Invalidate the target <code>NodeState</code>.
+     *
+     * @see Operation#persisted()
+     */
+    public void persisted() {
+        nodeState.invalidate(false);
+        // TODO: invalidate the corresponding part of the version storage
+    }
     //----------------------------------------< Access Operation Parameters >---
+    /**
+     *
+     * @return The nodeState to be checked in.
+     */
     public NodeState getNodeState() {
         return nodeState;
     }
 
+    //------------------------------------------------------------< Factory >---
     /**
-     * @see Operation#persisted()
+     *
+     * @param nodeState
+     * @return
      */
-    public void persisted() {
-        // TODO
-    }
-    //------------------------------------------------------------< Factory >---
     public static Operation create(NodeState nodeState) {
         return new Checkin(nodeState);
     }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java Wed Nov 22 08:15:04 2006
@@ -44,12 +44,20 @@
     }
 
     /**
+     * Invalidate the target <code>NodeState</code>.
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        nodeState.invalidate(false);
+        // TODO: invalidate the corresponding part of the version storage
     }
+
     //----------------------------------------< Access Operation Parameters >---
+    /**
+     *
+     * @return
+     */
     public NodeState getNodeState() {
         return nodeState;
     }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Clone.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Clone.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Clone.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Clone.java Wed Nov 22 08:15:04 2006
@@ -17,7 +17,11 @@
 package org.apache.jackrabbit.jcr2spi.operation;
 
 import org.apache.jackrabbit.jcr2spi.ManagerProvider;
+import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.jcr2spi.state.ItemStateException;
 import org.apache.jackrabbit.name.Path;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.ItemExistsException;
@@ -33,14 +37,21 @@
  */
 public class Clone extends AbstractCopy {
 
+    private static Logger log = LoggerFactory.getLogger(Clone.class);
+
     private final boolean removeExisting;
+    /* In case of 'removeExisting' and INVALIDATION-cachebehaviour we need
+       to invalidate the complete tree. */
+    private final ManagerProvider destMgrProvider;
 
     private Clone(Path srcPath, Path destPath, String srcWorkspaceName,
                   boolean removeExisting, ManagerProvider srcMgrProvider,
                   ManagerProvider destMgrProvider)
         throws RepositoryException {
         super(srcPath, destPath, srcWorkspaceName, srcMgrProvider, destMgrProvider);
+
         this.removeExisting = removeExisting;
+        this.destMgrProvider = destMgrProvider;
     }
 
     //----------------------------------------------------------< Operation >---
@@ -56,7 +67,18 @@
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        if (removeExisting) {
+            // invalidate the complete tree
+            try {
+                NodeState rootState = destMgrProvider.getItemStateManager().getRootState();
+                rootState.invalidate(true);
+            } catch (ItemStateException e) {
+                // TODO: fallback behaviour?
+                log.error("Cannot invalidate root state.", e.getMessage());
+            }
+        } else {
+            super.persisted();
+        }
     }
 
     //----------------------------------------< Access Operation Parameters >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Copy.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Copy.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Copy.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Copy.java Wed Nov 22 08:15:04 2006
@@ -47,12 +47,6 @@
         visitor.visit(this);
     }
 
-    /**
-     * @see Operation#persisted()
-     */
-    public void persisted() {
-        // TODO
-    }
     //------------------------------------------------------------< Factory >---
     public static Operation create(Path srcPath, Path destPath,
                                    String srcWorkspaceName,

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockOperation.java Wed Nov 22 08:15:04 2006
@@ -52,10 +52,12 @@
     }
 
     /**
+     * Invalidates the <code>NodeState</code> that has been locked.
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        nodeState.invalidate(false);
     }
 
     //----------------------------------------< Access Operation Parameters >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRefresh.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRefresh.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRefresh.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRefresh.java Wed Nov 22 08:15:04 2006
@@ -51,7 +51,7 @@
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        // nothing to do.
     }
     
     //----------------------------------------< Access Operation Parameters >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRelease.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRelease.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRelease.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/LockRelease.java Wed Nov 22 08:15:04 2006
@@ -17,6 +17,9 @@
 package org.apache.jackrabbit.jcr2spi.operation;
 
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.jcr2spi.state.PropertyState;
+import org.apache.jackrabbit.jcr2spi.state.ItemStateException;
+import org.apache.jackrabbit.jcr2spi.state.entry.ChildPropertyEntry;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.AccessDeniedException;
@@ -25,6 +28,8 @@
 import javax.jcr.version.VersionException;
 import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
+import java.util.Collection;
+import java.util.Iterator;
 
 /**
  * <code>LockRelease</code>...
@@ -48,12 +53,27 @@
     }
 
     /**
+     * Invalidates the <code>NodeState</code> that has been unlocked and all its
+     * child properties.
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        Collection propEntries = nodeState.getPropertyEntries();
+        for (Iterator it = propEntries.iterator(); it.hasNext();) {
+            ChildPropertyEntry pe = (ChildPropertyEntry) it.next();
+            if (pe.isAvailable()) {
+                try {
+                    PropertyState st = pe.getPropertyState();
+                    st.invalidate(false);
+                } catch (ItemStateException e) {
+                    // ignore
+                }
+            }
+        }
+        nodeState.invalidate(false);
     }
-    
+
     //----------------------------------------< Access Operation Parameters >---
     public NodeState getNodeState() {
         return nodeState;

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java Wed Nov 22 08:15:04 2006
@@ -28,7 +28,7 @@
 import javax.jcr.nodetype.NoSuchNodeTypeException;
 
 /**
- * <code>Update</code>...
+ * <code>Merge</code>...
  */
 public class Merge extends AbstractOperation {
 
@@ -55,10 +55,13 @@
     }
 
     /**
+     * Invalidates the target nodestate and all descendants.
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        nodeState.invalidate(true);
+        // TODO: invalidate the corresponding part of the version storage
     }
 
     //----------------------------------------< Access Operation Parameters >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Move.java Wed Nov 22 08:15:04 2006
@@ -73,13 +73,17 @@
     }
 
     /**
-     * Throws UnsupportedOperationException
+     * Throws UnsupportedOperationException if this Move Operation is a transient
+     * modification. Otherwise, the moved state as well as both parent states
+     * are invalidated.
      *
      * @see Operation#persisted()
      */
     public void persisted() {
         if (srcState.isWorkspaceState()) {
-            // TODO
+            srcParentState.invalidate(false);
+            destParentState.invalidate(false);
+            srcState.invalidate(false);
         } else {
             throw new UnsupportedOperationException("persisted() not implemented for transient modification.");
         }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Remove.java Wed Nov 22 08:15:04 2006
@@ -29,7 +29,7 @@
  */
 public class Remove extends AbstractOperation {
 
-    private ItemState removeState;
+    protected ItemState removeState;
 
     protected Remove(ItemState removeState) {
         this.removeState = removeState;

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveLabel.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveLabel.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveLabel.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveLabel.java Wed Nov 22 08:15:04 2006
@@ -19,7 +19,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.name.Path;
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.jcr2spi.state.ItemStateException;
+import org.apache.jackrabbit.jcr2spi.state.entry.ChildNodeEntry;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.AccessDeniedException;
@@ -30,7 +33,7 @@
 import javax.jcr.nodetype.NoSuchNodeTypeException;
 
 /**
- * <code>AddLabel</code>...
+ * <code>RemoveLabel</code>...
  */
 public class RemoveLabel extends AbstractOperation {
 
@@ -64,10 +67,21 @@
     }
 
     /**
+     * Invalidates the jcr:versionlabel nodestate present with the given
+     * version history and all decendant states (property states).
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        ChildNodeEntry lnEntry = versionHistoryState.getChildNodeEntry(QName.JCR_VERSIONLABELS, Path.INDEX_DEFAULT);
+        if (lnEntry.isAvailable()) {
+            try {
+                NodeState labelNodeState = lnEntry.getNodeState();
+                labelNodeState.invalidate(true);
+            } catch (ItemStateException e) {
+                // ignore
+            }
+        }
     }
 
     //----------------------------------------< Access Operation Parameters >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveVersion.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveVersion.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveVersion.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveVersion.java Wed Nov 22 08:15:04 2006
@@ -22,7 +22,7 @@
 import javax.jcr.version.VersionException;
 
 /**
- * <code>Remove</code>...
+ * <code>RemoveVersion</code>...
  */
 public class RemoveVersion extends Remove {
 
@@ -39,10 +39,15 @@
     }
 
     /**
+     * Invalidates the <code>NodeState</code> that has been updated and all
+     * its decendants. Second, the parent state gets invalidated.
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        NodeState parent = removeState.getParent();
+        removeState.invalidate(true);
+        parent.invalidate(false);
     }
 
     //------------------------------------------------------------< Factory >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/ResolveMergeConflict.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/ResolveMergeConflict.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/ResolveMergeConflict.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/ResolveMergeConflict.java Wed Nov 22 08:15:04 2006
@@ -17,6 +17,9 @@
 package org.apache.jackrabbit.jcr2spi.operation;
 
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.jcr2spi.state.PropertyState;
+import org.apache.jackrabbit.jcr2spi.state.ItemStateException;
+import org.apache.jackrabbit.jcr2spi.state.entry.ChildPropertyEntry;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.AccessDeniedException;
@@ -25,6 +28,8 @@
 import javax.jcr.version.VersionException;
 import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
+import java.util.Collection;
+import java.util.Iterator;
 
 /**
  * <code>ResolveMergeConflict</code>...
@@ -54,10 +59,25 @@
     }
 
     /**
+     * Invalidates the <code>NodeState</code> that had a merge conflict pending
+     * and all its child properties.
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        Collection propEntries = nodeState.getPropertyEntries();
+        for (Iterator it = propEntries.iterator(); it.hasNext();) {
+            ChildPropertyEntry pe = (ChildPropertyEntry) it.next();
+            if (pe.isAvailable()) {
+                try {
+                    PropertyState st = pe.getPropertyState();
+                    st.invalidate(false);
+                } catch (ItemStateException e) {
+                    // ignore
+                }
+            }
+        }
+        nodeState.invalidate(false);
     }
     //----------------------------------------< Access Operation Parameters >---
     public NodeState getNodeState() {

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Restore.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Restore.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Restore.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Restore.java Wed Nov 22 08:15:04 2006
@@ -30,7 +30,7 @@
 import javax.jcr.nodetype.ConstraintViolationException;
 
 /**
- * <code>Update</code>...
+ * <code>Restore</code>...
  */
 public class Restore extends AbstractOperation {
 

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Update.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Update.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Update.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Update.java Wed Nov 22 08:15:04 2006
@@ -50,10 +50,13 @@
     }
 
     /**
+     * Invalidates the <code>NodeState</code> that has been updated and all
+     * its decendants.
+     * 
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        nodeState.invalidate(true);
     }
 
     //----------------------------------------< Access Operation Parameters >---

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=478211&r1=478210&r2=478211
==============================================================================
--- 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 Nov 22 08:15:04 2006
@@ -18,6 +18,7 @@
 
 import org.apache.jackrabbit.jcr2spi.observation.InternalEventListener;
 import org.apache.jackrabbit.jcr2spi.WorkspaceManager;
+import org.apache.jackrabbit.jcr2spi.config.CacheBehaviour;
 import org.apache.jackrabbit.spi.IdFactory;
 import org.apache.jackrabbit.spi.Event;
 import org.apache.jackrabbit.spi.EventBundle;
@@ -46,20 +47,25 @@
 
     private final Collection eventFilter;
 
-    public WorkspaceItemStateManager(WorkspaceManager wspManager, ItemStateFactory isf, IdFactory idFactory) {
+    public WorkspaceItemStateManager(WorkspaceManager wspManager,
+                                     CacheBehaviour cacheBehaviour,
+                                     ItemStateFactory isf, IdFactory idFactory) {
         super(isf, idFactory);
-        EventFilter filter = null;
-        try {
-            // todo for now listen to everything
-            filter = wspManager.createEventFilter(Event.ALL_TYPES, Path.ROOT, true, null, null, false);
-        } catch (UnsupportedRepositoryOperationException e) {
-            // repository does not support observation
+        if (cacheBehaviour == CacheBehaviour.OBSERVATION) {
+            EventFilter filter = null;
+            try {
+                // todo for now listen to everything
+                filter = wspManager.createEventFilter(Event.ALL_TYPES, Path.ROOT, true, null, null, false);
+            } catch (UnsupportedRepositoryOperationException e) {
+                // spi does not support observation
+            }
+            this.eventFilter = (filter == null) ? Collections.EMPTY_LIST : Collections.singletonList(filter);
+        } else {
+            this.eventFilter = Collections.EMPTY_LIST;
         }
-        this.eventFilter = (filter == null) ? Collections.EMPTY_LIST : Collections.singletonList(filter);
     }
 
     //-------------------------------< InternalEventListener >------------------
-
     /**
      * @see InternalEventListener#getEventFilters()
      */

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java?view=diff&rev=478211&r1=478210&r2=478211
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java Wed Nov 22 08:15:04 2006
@@ -158,7 +158,7 @@
 
     public Collection merge(NodeState nodeState, String workspaceName, boolean bestEffort) throws RepositoryException {
         NodeState wspState = getWorkspaceState(nodeState);
-        // TODO : needs to be fixed... repository may not support observation
+        // TODO : needs to be fixed... SPI may not support observation
         // TODO find better solution to build the mergeFailed-collection
         EventFilter eventFilter;
         try {