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/27 11:11:13 UTC

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

Author: angela
Date: Mon Nov 27 02:11:11 2006
New Revision: 479569

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

- resolve some TODOs
- replace // JR DIFF comments
- remove unused/unimplemented validation methods from NodeTypeRegistry, that should
  be implemented on serverside
- Validation of NodeTypeDefinition: check if autocreated props defined default-value
  is not required on the client-side.
- LockManagerImpl: be prepared for observation not being supported by spi.

Modified:
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java
    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/config/RepositoryConfig.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/nodetype/DefinitionValidator.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistry.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.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/AbstractOperation.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/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/RemoveLabel.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/ItemState.java

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?view=diff&rev=479569&r1=479568&r2=479569
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Mon Nov 27 02:11:11 2006
@@ -651,7 +651,7 @@
      * @see Node#isNodeType(String)
      */
     public boolean isNodeType(String nodeTypeName) throws RepositoryException {
-        // check is performed by isNodeType(QName)
+        checkStatus();        
         return isNodeType(getQName(nodeTypeName));
     }
 
@@ -1194,7 +1194,6 @@
      * @throws RepositoryException
      */
     boolean isNodeType(QName qName) throws RepositoryException {
-        checkStatus();
         // first do trivial checks without using type hierarchy
         if (qName.equals(primaryTypeName)) {
             return true;

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java?view=diff&rev=479569&r1=479568&r2=479569
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java Mon Nov 27 02:11:11 2006
@@ -46,7 +46,6 @@
 import org.apache.jackrabbit.name.PathFormat;
 import org.apache.jackrabbit.name.NameFormat;
 import org.apache.jackrabbit.name.NoPrefixDeclaredException;
-import org.apache.jackrabbit.spi.RepositoryService;
 import org.apache.jackrabbit.spi.SessionInfo;
 import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.spi.IdFactory;
@@ -130,7 +129,7 @@
         this.config = config;
         this.sessionInfo = sessionInfo;
 
-        workspace = createWorkspaceInstance(config.getRepositoryService(), sessionInfo);
+        workspace = createWorkspaceInstance(config, sessionInfo);
 
         // build local name-mapping
         nsMappings = new LocalNamespaceMappings(workspace.getNamespaceRegistryImpl());
@@ -674,8 +673,8 @@
     }
 
     //-------------------------------------------------------< init methods >---
-    protected WorkspaceImpl createWorkspaceInstance(RepositoryService service, SessionInfo sessionInfo) throws RepositoryException {
-        return new WorkspaceImpl(sessionInfo.getWorkspaceName(), this, service, sessionInfo);
+    protected WorkspaceImpl createWorkspaceInstance(RepositoryConfig config, SessionInfo sessionInfo) throws RepositoryException {
+        return new WorkspaceImpl(sessionInfo.getWorkspaceName(), this, config, sessionInfo);
     }
 
     protected SessionItemStateManager createSessionItemStateManager(UpdatableItemStateManager workspaceStateManager, NamespaceResolver nsResolver) {

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -40,6 +40,7 @@
 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.jcr2spi.config.RepositoryConfig;
 import org.apache.jackrabbit.spi.IdFactory;
 import org.apache.jackrabbit.spi.RepositoryService;
 import org.apache.jackrabbit.spi.SessionInfo;
@@ -104,11 +105,11 @@
     private VersionManager versionManager;
     private ItemStateValidator validator;
 
-    public WorkspaceImpl(String name, SessionImpl session, RepositoryService service, SessionInfo sessionInfo) throws RepositoryException {
+    public WorkspaceImpl(String name, SessionImpl session, RepositoryConfig config, SessionInfo sessionInfo) throws RepositoryException {
         this.name = name;
         this.session = session;
 
-        wspManager = createManager(service, session.getCacheBehaviour(), sessionInfo);
+        wspManager = createManager(config.getRepositoryService(), sessionInfo, session.getCacheBehaviour(), config.getPollingInterval());
     }
 
     //----------------------------------------------------------< Workspace >---
@@ -456,9 +457,10 @@
      * @return state manager
      */
     protected WorkspaceManager createManager(RepositoryService service,
+                                             SessionInfo sessionInfo,
                                              CacheBehaviour cacheBehaviour,
-                                             SessionInfo sessionInfo) throws RepositoryException {
-        return new WorkspaceManager(service, cacheBehaviour, sessionInfo);
+                                             int pollingInterval) throws RepositoryException {
+        return new WorkspaceManager(service, sessionInfo, cacheBehaviour, pollingInterval);
     }
 
     /**

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -122,11 +122,6 @@
 
     private static Logger log = LoggerFactory.getLogger(WorkspaceManager.class);
 
-    /**
-     * TODO: make configurable
-     */
-    private static final int EXTERNAL_EVENT_POLLING_INTERVAL = 3 * 1000;
-
     private final RepositoryService service;
     private final SessionInfo sessionInfo;
 
@@ -162,8 +157,9 @@
      */
     private final Set listeners = Collections.synchronizedSet(new HashSet());
 
-    public WorkspaceManager(RepositoryService service, CacheBehaviour cacheBehaviour,
-                            SessionInfo sessionInfo) throws RepositoryException {
+    public WorkspaceManager(RepositoryService service, SessionInfo sessionInfo,
+                            CacheBehaviour cacheBehaviour, int pollingInterval)
+        throws RepositoryException {
         this.service = service;
         this.sessionInfo = sessionInfo;
         this.cacheBehaviour = cacheBehaviour;
@@ -174,7 +170,7 @@
 
         nsRegistry = createNamespaceRegistry(repositoryDescriptors);
         ntRegistry = createNodeTypeRegistry(nsRegistry, repositoryDescriptors);
-        externalChangeFeed = createChangeFeed(EXTERNAL_EVENT_POLLING_INTERVAL);
+        externalChangeFeed = createChangeFeed(pollingInterval);
     }
 
     public NamespaceRegistryImpl getNamespaceRegistryImpl() {

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java?view=diff&rev=479569&r1=479568&r2=479569
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/RepositoryConfig.java Mon Nov 27 02:11:11 2006
@@ -33,4 +33,6 @@
     public String getDefaultWorkspaceName();
 
     public CacheBehaviour getCacheBehaviour();
+
+    public int getPollingInterval();
 }

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -40,6 +40,7 @@
 import javax.jcr.Node;
 import javax.jcr.Item;
 import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
 
 import java.util.Iterator;
 import java.util.Map;
@@ -453,9 +454,10 @@
     private class LockState implements InternalEventListener{
 
         private final NodeState lockHoldingState;
+
         private LockInfo lockInfo;
         private boolean isLive = true;
-        private final EventFilter eventFilter;
+        private EventFilter eventFilter;
 
         private LockState(NodeState lockHoldingState, LockInfo lockInfo)
             throws LockException, RepositoryException{
@@ -471,12 +473,15 @@
                 this.lockInfo = lockInfo;
             }
 
-            // 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,
+            try {
+                // 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,
                     lockHoldingState.getQPath(), false, null, null, true);
-            wspManager.addEventListener(this);
+                wspManager.addEventListener(this);
+            } catch (UnsupportedRepositoryOperationException e) {
+                eventFilter = null;
+            }
         }
 
         private LockState(NodeState lockHoldingState) throws LockException, RepositoryException {
@@ -551,7 +556,7 @@
          * @see InternalEventListener#getEventFilters()
          */
         public Collection getEventFilters() {
-            return Collections.singletonList(eventFilter);
+            return (eventFilter == null) ?  Collections.EMPTY_LIST : Collections.singletonList(eventFilter);
         }
 
         /**
@@ -590,11 +595,12 @@
          */
         public LockImpl(LockState lockState, Node lockHoldingNode) {
             this.lockState = lockState;
-
             this.node = lockHoldingNode;
 
-            // store lock in the map
-            lockMap.put(lockState.lockHoldingState, this);
+            // if observation is supported -> store lock in the map
+            if (lockState.eventFilter != null) {
+                lockMap.put(lockState.lockHoldingState, this);
+            }
         }
 
         /**

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java?view=diff&rev=479569&r1=479568&r2=479569
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java Mon Nov 27 02:11:11 2006
@@ -59,18 +59,12 @@
      *
      * @param ntDefs
      * @param validatedDefs
-     * @param checkAutoCreatePropHasDefault flag used to disable checking that auto-created properties
-     * have a default value; this check has to be disabled while validating
-     * built-in node types because there are properties defined in built-in
-     * node types which are auto-created but don't have a fixed default value
-     * that can be exposed in a property definition because it is
-     * system-generated (e.g. jcr:primaryType in nt:base).
-     * // TODO FIXME
      * @return Map mapping the definition to the resulting effective nodetype
      * @throws InvalidNodeTypeDefException
      * @throws RepositoryException
      */
-    public Map validateNodeTypeDefs(Collection ntDefs, Map validatedDefs, boolean checkAutoCreatePropHasDefault) throws InvalidNodeTypeDefException, RepositoryException {
+    public Map validateNodeTypeDefs(Collection ntDefs, Map validatedDefs)
+        throws InvalidNodeTypeDefException, RepositoryException {
         // tmp. map containing names/defs of validated nodetypes
         Map validDefs = new HashMap(validatedDefs);
         // map of nodetype definitions and effective nodetypes to be registered
@@ -87,9 +81,9 @@
             while (iterator.hasNext()) {
                 QNodeTypeDefinition ntd = (QNodeTypeDefinition) iterator.next();
                 // check if definition has unresolved dependencies
-                // DIFF JR: cannot compared to 'registered' nodetypes since registr. is performed later on
+                /* Note: don't compared to 'registered' nodetypes since registr. is performed later on */
                 if (validDefs.keySet().containsAll(ntd.getDependencies())) {
-                    EffectiveNodeType ent = validateNodeTypeDef(ntd, validDefs, checkAutoCreatePropHasDefault);
+                    EffectiveNodeType ent = validateNodeTypeDef(ntd, validDefs);
                     // keep track of validated definitions and eff. nodetypes
                     if (!validDefs.containsKey(ntd.getQName())) {
                         validDefs.put(ntd.getQName(), ntd);
@@ -122,18 +116,11 @@
      * @param validatedDefs Map of qualified nodetype names and nodetype definitions
      * that are known to be valid or are already registered. This map is used to
      * validated dependencies and check for circular inheritance
-     * @param checkAutoCreatePropHasDefault flag used to disable checking that auto-created properties
-     * have a default value; this check has to be disabled while validating
-     * built-in node types because there are properties defined in built-in
-     * node types which are auto-created but don't have a fixed default value
-     * that can be exposed in a property definition because it is
-     * system-generated (e.g. jcr:primaryType in nt:base).
-     * // TODO FIXME
      * @return
      * @throws InvalidNodeTypeDefException
      * @throws RepositoryException
      */
-    public EffectiveNodeTypeImpl validateNodeTypeDef(QNodeTypeDefinition ntDef, Map validatedDefs, boolean checkAutoCreatePropHasDefault)
+    public EffectiveNodeTypeImpl validateNodeTypeDef(QNodeTypeDefinition ntDef, Map validatedDefs)
             throws InvalidNodeTypeDefException, RepositoryException {
         /**
          * the effective (i.e. merged and resolved) node type resulting from
@@ -168,10 +155,9 @@
                     log.debug(msg);
                     throw new InvalidNodeTypeDefException(msg);
                 }
-                // DIFF JR: compare to given nt-name set and not to registered nodetypes
+                /* compare to given nt-name set and not to registered nodetypes */
                 if (!validatedDefs.containsKey(supertypes[i])) {
-                    String msg = "[" + name + "] invalid supertype: "
-                            + supertypes[i];
+                    String msg = "[" + name + "] invalid supertype: " + supertypes[i];
                     log.debug(msg);
                     throw new InvalidNodeTypeDefException(msg);
                 }
@@ -199,7 +185,6 @@
          */
         if (supertypes.length > 0) {
             try {
-                // DIFF JR: use extra method that does not compare to registered nts
                 EffectiveNodeType est = ntRegistry.getEffectiveNodeType(supertypes, validatedDefs);
                 // make sure that all primary types except nt:base extend from nt:base
                 if (!ntDef.isMixin() && !QName.NT_BASE.equals(ntDef.getQName())
@@ -256,30 +241,20 @@
                 log.debug(msg);
                 throw new InvalidNodeTypeDefException(msg);
             }
-            /**
-             * check default values:
+            /* check default values:
              * make sure type of value is consistent with required property type
+             * Note: default internal values are built from the required type,
+             * thus check for match with pd.getRequiredType is redundant.
              */
-            // DIFF JACKRABBIT: default internal values are built from the
-            // required type, thus check for match with pd.getRequiredType is redundant
             QValue[] defVals = getQValues(pd);
-            if (defVals == null || defVals.length == 0) {
-                // no default values specified
-                if (checkAutoCreatePropHasDefault) {
-                    // auto-created properties must have a default value
-                    if (pd.isAutoCreated()) {
-                        String msg = "[" + name + "#" + pd.getQName() + "] auto-created property must have a default value";
-                        log.debug(msg);
-                        throw new InvalidNodeTypeDefException(msg);
-                    }
-                }
-            }
 
-            // check that default values satisfy value constraints
+            /* check that default values satisfy value constraints.
+             * Note however, that no check is performed if autocreated property-
+             * definitions define a default value. JSR170 does not require this.
+             */
             ValueConstraint.checkValueConstraints(pd, defVals);
 
-            /**
-             * ReferenceConstraint:
+            /* ReferenceConstraint:
              * the specified node type must be registered, with one notable
              * exception: the node type just being registered
              */
@@ -289,7 +264,7 @@
                 if (pd.getRequiredType() == PropertyType.REFERENCE) {
                     for (int j = 0; j < constraints.length; j++) {
                         QName ntName = QName.valueOf(constraints[j]);
-                        // DIFF JR: compare to given ntd map and not registered nts only
+                        /* compare to given ntd map and not registered nts only */
                         if (!name.equals(ntName) && !validatedDefs.containsKey(ntName)) {
                             String msg = "[" + name + "#" + pd.getQName()
                                     + "] invalid REFERENCE value constraint '"
@@ -306,10 +281,7 @@
         QNodeDefinition[] cnda = ntDef.getChildNodeDefs();
         for (int i = 0; i < cnda.length; i++) {
             QNodeDefinition cnd = cnda[i];
-            /**
-             * sanity check:
-             * make sure declaring node type matches name of node type definition
-             */
+            /* make sure declaring node type matches name of node type definition */
             if (!name.equals(cnd.getDeclaringNodeType())) {
                 String msg = "[" + name + "#" + cnd.getQName()
                         + "] invalid declaring node type specified";

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistry.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistry.java?view=diff&rev=479569&r1=479568&r2=479569
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistry.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistry.java Mon Nov 27 02:11:11 2006
@@ -31,7 +31,6 @@
  */
 public interface NodeTypeRegistry {
 
-    // TODO: review, probably does not belong into NodeTypeRegistry interface
     /**
      * Return the <code>QNodeDefinition</code> of the root node.
      *
@@ -50,7 +49,6 @@
     QNodeTypeDefinition getNodeTypeDefinition(QName nodeTypeName)
             throws NoSuchNodeTypeException;
 
-    // TODO: review, probably does not belong into NodeTypeRegistry interface
     /**
      *
      *
@@ -61,7 +59,6 @@
     EffectiveNodeType getEffectiveNodeType(QName ntName)
             throws NoSuchNodeTypeException;
 
-    // TODO: review, probably does not belong into NodeTypeRegistry interface
     /**
      *
      *
@@ -73,7 +70,6 @@
     EffectiveNodeType getEffectiveNodeType(QName[] ntNames)
             throws NodeTypeConflictException, NoSuchNodeTypeException;
 
-    // TODO: review, probably does not belong into NodeTypeRegistry interface
     /**
      * @param ntNames
      * @param ntdMap

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java?view=diff&rev=479569&r1=479568&r2=479569
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java Mon Nov 27 02:11:11 2006
@@ -114,16 +114,16 @@
 
         try {
             // validate & register the definitions
-            // DIFF JACKRABBIT: we cannot determine built-in vs. custom nodetypes.
-            // TODO: 'false' flag maybe not totally correct....
-            Map defMap = validator.validateNodeTypeDefs(nodeTypeDefs, new HashMap(registeredNTDefs), false);
+            /* Note: since the client reads all nodetypes from the server, it is
+             * not able to distinguish between built-in and custom-defined
+             * nodetypes (compared to Jackrabbit-core) */
+            Map defMap = validator.validateNodeTypeDefs(nodeTypeDefs, new HashMap(registeredNTDefs));
             internalRegister(defMap);
         } catch (InvalidNodeTypeDefException intde) {
             String error = "Unexpected error: Found invalid node type definition.";
             log.debug(error);
             throw new RepositoryException(error, intde);
         }
-        // DIFF JR: 'finally' for resetting 'checkAutoCreated' not needed any more...
     }
 
 
@@ -336,7 +336,7 @@
     public synchronized EffectiveNodeType registerNodeType(QNodeTypeDefinition ntDef)
             throws InvalidNodeTypeDefException, RepositoryException {
         // validate the new nodetype definition
-        EffectiveNodeTypeImpl ent = validator.validateNodeTypeDef(ntDef, registeredNTDefs, true);
+        EffectiveNodeTypeImpl ent = validator.validateNodeTypeDef(ntDef, registeredNTDefs);
 
         // persist new node type definition
         storage.registerNodeTypes(new QNodeTypeDefinition[] {ntDef});
@@ -356,7 +356,7 @@
             throws InvalidNodeTypeDefException, RepositoryException {
 
         // validate new nodetype definitions
-        Map defMap = validator.validateNodeTypeDefs(ntDefs, registeredNTDefs, true);
+        Map defMap = validator.validateNodeTypeDefs(ntDefs, registeredNTDefs);
         storage.registerNodeTypes((QNodeTypeDefinition[])ntDefs.toArray(new QNodeTypeDefinition[ntDefs.size()]));
 
         // update internal cache
@@ -379,8 +379,6 @@
         if (!registeredNTDefs.containsKey(nodeTypeName)) {
             throw new NoSuchNodeTypeException(nodeTypeName.toString());
         }
-        // DIFF JACKRABBIT: detection of built-in NodeTypes not possible
-        // omit check for build-in nodetypes which would cause failure
 
         /**
          * check if there are node types that have dependencies on the given
@@ -392,10 +390,8 @@
             throw new RepositoryException(msg.toString());
         }
 
-        // make sure node type is not currently in use
-        checkForReferencesInContent(nodeTypeName);
-
         // persist removal of node type definition
+        // NOTE: conflict with existing content not asserted on client
         storage.unregisterNodeTypes(new QName[] {nodeTypeName});
 
         // update internal cache
@@ -416,7 +412,6 @@
             if (!registeredNTDefs.containsKey(ntName)) {
                 throw new NoSuchNodeTypeException(ntName.toString());
             }
-            // DIFF JR: no distiction of built-in nts
 
             // check for node types other than those to be unregistered
             // that depend on the given node types
@@ -434,15 +429,8 @@
             }
         }
 
-        // make sure node types are not currently in use
-        for (Iterator iter = nodeTypeNames.iterator(); iter.hasNext();) {
-            QName ntName = (QName) iter.next();
-            checkForReferencesInContent(ntName);
-        }
-
-
-
         // persist removal of node type definitions
+        // NOTE: conflict with existing content not asserted on client
         storage.unregisterNodeTypes((QName[]) nodeTypeNames.toArray(new QName[nodeTypeNames.size()]));
 
 
@@ -466,15 +454,8 @@
         if (!registeredNTDefs.containsKey(name)) {
             throw new NoSuchNodeTypeException(name.toString());
         }
-        // DIFF JACKRABBIT: detection of built-in NodeTypes not possible
-        // omit check for build-in nodetypes which would cause failure
-
-        /**
-         * validate new node type definition
-         */
-        EffectiveNodeTypeImpl ent = validator.validateNodeTypeDef(ntd, registeredNTDefs, true);
-
-        // DIFF JACKRABBIT: removed check for severity of nt modification
+        /* validate new node type definition */
+        EffectiveNodeTypeImpl ent = validator.validateNodeTypeDef(ntd, registeredNTDefs);
 
         // first call reregistering on storage
         storage.reregisterNodeTypes(new QNodeTypeDefinition[]{ntd});
@@ -584,14 +565,14 @@
     }
 
     private void internalUnregister(QName name) {
-        // DIFF JACKRABBIT: check for registered name removed, since duplicate code
-
-        // DIFF JACKRABBIT: detection of built-in NodeTypes not possible
-        // omit check for build-in nodetypes which would cause failure
-
+        /*
+         * NOTE: detection of built-in NodeTypes not possible, since the client
+         * reads all nodetypes from the 'server' only without being able to
+         * destinguish between built-in and custom-defined nodetypes.
+         */
         QNodeTypeDefinition ntd = (QNodeTypeDefinition) registeredNTDefs.get(name);
         registeredNTDefs.remove(name);
-        /**
+        /*
          * remove all affected effective node types from aggregates cache
          * (copy keys first to prevent ConcurrentModificationException)
          */
@@ -660,7 +641,7 @@
             throw new NoSuchNodeTypeException(nodeTypeName.toString());
         }
 
-        /**
+        /*
          * collect names of those node types that have dependencies on the given
          * node type
          */
@@ -675,74 +656,6 @@
         return names;
     }
 
-    /**
-     * Checks whether there is existing content that would conflict with the
-     * given node type definition.
-     * <p/>
-     * This method is not implemented yet and always throws a
-     * <code>RepositoryException</code>.
-     * <p/>
-     * TODO
-     * <ol>
-     * <li>apply deep locks on root nodes in every workspace or alternatively
-     * put repository in 'exclusive' or 'single-user' mode
-     * <li>check if the given node type (or any node type that has
-     * dependencies on this node type) is currently referenced by nodes
-     * in the repository.
-     * <li>check if applying the changed definitions to the affected items would
-     * violate existing node type constraints
-     * <li>apply and persist changes to affected nodes (e.g. update
-     * definition id's, etc.)
-     * </ul>
-     * <p/>
-     * the above checks/actions are absolutely necessary in order to
-     * guarantee integrity of repository content.
-     *
-     * @param ntd The node type definition replacing the former node type
-     *            definition of the same name.
-     * @throws RepositoryException If there is conflicting content or if the
-     *                             check failed for some other reason.
-     */
-    private void checkForConflictingContent(QNodeTypeDefinition ntd)
-            throws RepositoryException {
-        /**
-         * collect names of node types that have dependencies on the given
-         * node type
-         */
-        //Set dependentNTs = getDependentNodeTypes(ntd.getQName());
-
-        throw new RepositoryException("not yet implemented");
-    }
-
-    /**
-     * Checks whether there is existing content that directly or indirectly
-     * refers to the specified node type.
-     * <p/>
-     * This method is not implemented yet and always throws a
-     * <code>RepositoryException</code>.
-     * <p/>
-     * TODO:
-     * <ol>
-     * <li>apply deep locks on root nodes in every workspace or alternatively
-     * put repository in 'single-user' mode
-     * <li>check if the given node type is currently referenced by nodes
-     * in the repository.
-     * <li>remove the node type if it is not currently referenced, otherwise
-     * throw exception
-     * </ul>
-     * <p/>
-     * the above checks are absolutely necessary in order to guarantee
-     * integrity of repository content.
-     *
-     * @param nodeTypeName The name of the node type to be checked.
-     * @throws RepositoryException If the specified node type is currently
-     *                             being referenced or if the check failed for
-     *                             some other reason.
-     */
-    private void checkForReferencesInContent(QName nodeTypeName)
-            throws RepositoryException {
-        throw new RepositoryException("not yet implemented");
-    }
     //-----------------------------------------------------------< Dumpable >---
     /**
      * {@inheritDoc}

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -57,7 +57,6 @@
         }
         this.srcState = (NodeState)srcItemState;
         this.destParentState = getNodeState(destPath.getAncestor(1), destMgrProvider.getHierarchyManager(), destMgrProvider.getNamespaceResolver());
-        addAffectedItemState(destParentState);
 
         // check for illegal index present in destination path
         Path.PathElement destElement = destPath.getNameElement();
@@ -70,6 +69,8 @@
         }
         this.destName = destElement.getName();
         this.srcWorkspaceName = srcWorkspaceName;
+
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java?view=diff&rev=479569&r1=479568&r2=479569
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractOperation.java Mon Nov 27 02:11:11 2006
@@ -53,7 +53,7 @@
      * @inheritDoc
      */
     public Collection getAffectedItemStates() {
-        return Collections.unmodifiableCollection(affectedStates);
+        return (affectedStates.isEmpty()) ? Collections.EMPTY_LIST : Collections.unmodifiableCollection(affectedStates);
     }
 
     /**

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -50,7 +50,7 @@
         this.label = label;
         this.moveLabel = moveLabel;
 
-        // TODO: setting affecting states?
+        // NOTE: affected-states only needed for transient modifications
     }
     //----------------------------------------------------------< Operation >---
     /**

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -35,7 +35,7 @@
 
     private Checkin(NodeState nodeState) {
         this.nodeState = nodeState;
-        addAffectedItemState(nodeState);
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -35,7 +35,7 @@
 
     private Checkout(NodeState nodeState) {
         this.nodeState = nodeState;
-        addAffectedItemState(nodeState);
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -43,7 +43,7 @@
         this.isDeep = isDeep;
         this.isSessionScoped = isSessionScoped;
 
-        this.addAffectedItemState(nodeState);
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -36,7 +36,7 @@
     private LockRefresh(NodeState nodeState) {
         this.nodeState = nodeState;
 
-        this.addAffectedItemState(nodeState);
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -41,7 +41,7 @@
     private LockRelease(NodeState nodeState) {
         this.nodeState = nodeState;
 
-        this.addAffectedItemState(nodeState);
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -43,7 +43,7 @@
         this.srcWorkspaceName = srcWorkspaceName;
         this.bestEffort = bestEffort;
 
-        this.addAffectedItemState(nodeState);
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -48,7 +48,7 @@
         this.versionState = versionState;
         this.label = label;
 
-        // TODO: add affected states. required?
+        // NOTE: affected-states only needed for transient modifications
     }
     //----------------------------------------------------------< Operation >---
     /**

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -45,9 +45,7 @@
         this.versionState = versionState;
         this.resolveDone = resolveDone;
 
-        // TODO: correct? needed?
-        addAffectedItemState(nodeState);
-        addAffectedItemState(versionState);
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -34,8 +34,6 @@
  */
 public class Restore extends AbstractOperation {
 
-    // TODO: since the restore target can point to a non-existing item -> use NodeId
-    // TODO: review this.
     private final NodeState nodeState;
     private final Path relQPath;
     private final NodeState[] versionStates;
@@ -47,7 +45,7 @@
         this.versionStates = versionStates;
         this.removeExisting = removeExisting;
 
-        // TODO: affected states... needed?
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---
@@ -59,10 +57,19 @@
     }
 
     /**
+     * In case of a workspace-restore or 'removeExisting' the complete tree gets
+     * invalidated, otherwise the given <code>NodeState</code> that has been
+     * updated and all its decendants.
+     *
      * @see Operation#persisted()
      */
     public void persisted() {
-        // TODO
+        if (nodeState == null || removeExisting) {
+            // invalidate the complete tree
+            // TODO
+        } else {
+            nodeState.invalidate(true);
+        }
     }
     //----------------------------------------< Access Operation Parameters >---
 

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 Mon Nov 27 02:11:11 2006
@@ -38,7 +38,7 @@
         this.nodeState = nodeState;
         this.srcWorkspaceName = srcWorkspaceName;
 
-        this.addAffectedItemState(nodeState);
+        // NOTE: affected-states only needed for transient modifications
     }
 
     //----------------------------------------------------------< Operation >---

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=479569&r1=479568&r2=479569
==============================================================================
--- 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 27 02:11:11 2006
@@ -60,7 +60,6 @@
      */
     private final transient Collection listeners = new WeakIdentityCollection(5);
 
-    // TODO: check again...
     /**
      *  IdFactory used to build id of the states
      */