You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/09/08 18:09:45 UTC

svn commit: r812570 [21/24] - in /jackrabbit/sandbox/JCR-1456: ./ jackrabbit-api/ jackrabbit-api/src/main/appended-resources/ jackrabbit-api/src/main/appended-resources/META-INF/ jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/ jackrabb...

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java Tue Sep  8 16:09:28 2009
@@ -124,19 +124,13 @@
         return mgrProvider.getNamespaceResolver();
     }
 
-    private NamePathResolver resolver() {
-        return mgrProvider.getNamePathResolver();
-    }
-
     private EffectiveNodeTypeProvider entProvider() {
         return mgrProvider.getEffectiveNodeTypeProvider();
     }
 
     //--------------------------------------------------------------------------
     /**
-     * @param name
-     * @return
-     * @throws NoSuchNodeTypeException
+     * @see AbstractNodeTypeManager#getNodeType(org.apache.jackrabbit.spi.Name)
      */
     public NodeTypeImpl getNodeType(Name name) throws NoSuchNodeTypeException {
         synchronized (ntCache) {
@@ -152,6 +146,13 @@
     }
 
     /**
+     * @see org.apache.jackrabbit.spi.commons.nodetype.AbstractNodeTypeManager#getNamePathResolver() 
+     */
+    public NamePathResolver getNamePathResolver() {
+        return mgrProvider.getNamePathResolver();
+    }
+
+    /**
      *
      * @param nodeTypeName
      * @return
@@ -175,7 +176,7 @@
         synchronized (ndCache) {
             NodeDefinition ndi = (NodeDefinition) ndCache.get(def);
             if (ndi == null) {
-                ndi = new NodeDefinitionImpl(def, this, resolver());
+                ndi = new NodeDefinitionImpl(def, this, getNamePathResolver());
                 ndCache.put(def, ndi);
             }
             return ndi;
@@ -193,7 +194,7 @@
         synchronized (pdCache) {
             PropertyDefinition pdi = (PropertyDefinition) pdCache.get(def);
             if (pdi == null) {
-                pdi = new PropertyDefinitionImpl(def, this, resolver(), valueFactory);
+                pdi = new PropertyDefinitionImpl(def, this, getNamePathResolver(), valueFactory);
                 pdCache.put(def, pdi);
             }
             return pdi;
@@ -231,7 +232,7 @@
         // flush all affected cache entries
         ntCache.remove(ntName);
         try {
-            String name = resolver().getJCRName(ntName);
+            String name = getNamePathResolver().getJCRName(ntName);
             synchronized (pdCache) {
                 Iterator iter = pdCache.values().iterator();
                 while (iter.hasNext()) {
@@ -268,7 +269,7 @@
         // flush all affected cache entries
         ntCache.remove(ntName);
         try {
-            String name = resolver().getJCRName(ntName);
+            String name = getNamePathResolver().getJCRName(ntName);
             synchronized (pdCache) {
                 Iterator iter = pdCache.values().iterator();
                 while (iter.hasNext()) {
@@ -347,7 +348,7 @@
     public NodeType getNodeType(String nodeTypeName)
             throws NoSuchNodeTypeException {
         try {
-            Name qName = resolver().getQName(nodeTypeName);
+            Name qName = getNamePathResolver().getQName(nodeTypeName);
             return getNodeType(qName);
         } catch (NamespaceException e) {
             throw new NoSuchNodeTypeException(nodeTypeName, e);
@@ -361,7 +362,7 @@
      */
     public boolean hasNodeType(String name) throws RepositoryException {
         try {
-            Name qName = resolver().getQName(name);
+            Name qName = getNamePathResolver().getQName(name);
             return hasNodeType(qName);
         } catch (NamespaceException e) {
             return false;
@@ -377,7 +378,7 @@
             throws RepositoryException {
         List<QNodeTypeDefinition> defs = new ArrayList<QNodeTypeDefinition>(ntds.length);
         for (NodeTypeDefinition definition : ntds) {
-            QNodeTypeDefinition qdef = new QNodeTypeDefinitionImpl(definition, resolver(), mgrProvider.getQValueFactory());
+            QNodeTypeDefinition qdef = new QNodeTypeDefinitionImpl(definition, getNamePathResolver(), mgrProvider.getQValueFactory());
             if (!allowUpdate && hasNodeType(qdef.getName())) {
                 throw new NodeTypeExistsException("NodeType " + definition.getName() + " already exists.");
             }
@@ -400,7 +401,7 @@
     public void unregisterNodeTypes(String[] names) throws RepositoryException {
         HashSet ntNames = new HashSet();
         for (String name : names) {
-            ntNames.add(resolver().getQName(name));
+            ntNames.add(getNamePathResolver().getQName(name));
         }
         getNodeTypeRegistry().unregisterNodeTypes(ntNames);
     }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java Tue Sep  8 16:09:28 2009
@@ -26,6 +26,7 @@
 import org.apache.jackrabbit.spi.QValue;
 import org.apache.jackrabbit.spi.QItemDefinition;
 import org.apache.jackrabbit.spi.QValueConstraint;
+import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeStorage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkout.java Tue Sep  8 16:09:28 2009
@@ -41,11 +41,23 @@
     private static Logger log = LoggerFactory.getLogger(Checkout.class);
 
     private final NodeState nodeState;
+    private final NodeId activityId;
+    private final boolean supportsActivity;
     private final VersionManager mgr;
 
     private Checkout(NodeState nodeState, VersionManager mgr) {
         this.nodeState = nodeState;
         this.mgr = mgr;
+        supportsActivity = false;
+        activityId = null;
+        // NOTE: affected-states only needed for transient modifications
+    }
+
+    private Checkout(NodeState nodeState, NodeId activityId, VersionManager mgr) {
+        this.nodeState = nodeState;
+        this.activityId = activityId;
+        this.mgr = mgr;
+        supportsActivity = true;
         // NOTE: affected-states only needed for transient modifications
     }
 
@@ -90,8 +102,32 @@
         return nodeState.getNodeEntry().getWorkspaceId();
     }
 
+    /**
+     * The id of the current activity present on the editing session or <code>null</code>.
+     *
+     * @return id of the current activity present on the editing session or <code>null</code>.
+     */
+    public NodeId getActivityId() {
+        return activityId;
+    }
+
+    /**
+     * Returns <code>true</code>, if activities are supported, 
+     * <code>false</code> otherwise.
+     *
+     * @return  <code>true</code>, if activities are supported,
+     * <code>false</code> otherwise.
+     */
+    public boolean supportsActivity() {
+        return supportsActivity;
+    }
+
     //------------------------------------------------------------< Factory >---
     public static Operation create(NodeState nodeState, VersionManager mgr) {
         return new Checkout(nodeState, mgr);
     }
+
+    public static Operation create(NodeState nodeState, NodeId activityId, VersionManager mgr) {
+        return new Checkout(nodeState, activityId, mgr);
+    }
 }
\ No newline at end of file

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/CreateConfiguration.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/CreateConfiguration.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/CreateConfiguration.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/CreateConfiguration.java Tue Sep  8 16:09:28 2009
@@ -31,21 +31,20 @@
 import javax.jcr.version.VersionException;
 
 /**
- * <code>Checkout</code>...
+ * <code>CreateConfiguration</code>...
  */
 public class CreateConfiguration extends AbstractOperation {
 
     private static Logger log = LoggerFactory.getLogger(CreateConfiguration.class);
 
     private final NodeState nodeState;
-    private final NodeState baselineState;
+
     private final VersionManager mgr;
 
     private NodeId newConfigurationId;
 
-    private CreateConfiguration(NodeState nodeState, NodeState baselineState, VersionManager mgr) {
+    private CreateConfiguration(NodeState nodeState, VersionManager mgr) {
         this.nodeState = nodeState;
-        this.baselineState = baselineState;
         this.mgr = mgr;
         // NOTE: affected-states only needed for transient modifications
     }
@@ -80,10 +79,6 @@
         return nodeState.getNodeEntry().getWorkspaceId();
     }
 
-    public NodeId getBaselineId() throws RepositoryException {
-        return baselineState.getNodeEntry().getWorkspaceId();
-    }
-
     public void setNewConfigurationId(NodeId newConfigurationId) {
         this.newConfigurationId = newConfigurationId;
     }
@@ -93,7 +88,7 @@
     }
 
     //------------------------------------------------------------< Factory >---
-    public static CreateConfiguration create(NodeState nodeState, NodeState baselineState, VersionManager mgr) {
-        return new CreateConfiguration(nodeState, baselineState, mgr);
+    public static CreateConfiguration create(NodeState nodeState, VersionManager mgr) {
+        return new CreateConfiguration(nodeState, mgr);
     }
 }
\ No newline at end of file

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Merge.java Tue Sep  8 16:09:28 2009
@@ -19,6 +19,7 @@
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
 import org.apache.jackrabbit.jcr2spi.version.VersionManager;
 import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
+import org.apache.jackrabbit.jcr2spi.hierarchy.HierarchyEntry;
 import org.apache.jackrabbit.spi.NodeId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -75,7 +76,13 @@
         assert status == STATUS_PENDING;
         status = STATUS_PERSISTED;
         if (isActivityMerge()) {
-            // TODO invalidate
+            // TODO be more specific about what needs to be invalidated
+            // look for the root entry and invalidate the complete tree
+            HierarchyEntry entry = nodeState.getNodeEntry();
+            while (entry.getParent() != null) {
+                entry = entry.getParent();
+            }
+            entry.invalidate(true);
         } else {
             try {
                 NodeEntry vhe = mgr.getVersionHistoryEntry(nodeState);

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java Tue Sep  8 16:09:28 2009
@@ -16,7 +16,28 @@
  */
 package org.apache.jackrabbit.jcr2spi.state;
 
-import org.apache.jackrabbit.jcr2spi.ManagerProvider;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.jcr.AccessDeniedException;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.ItemExistsException;
+import javax.jcr.PropertyType;
+import javax.jcr.ReferentialIntegrityException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.ValueFormatException;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.version.VersionException;
+
+import org.apache.jackrabbit.jcr2spi.SessionImpl;
 import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
 import org.apache.jackrabbit.jcr2spi.hierarchy.PropertyEntry;
 import org.apache.jackrabbit.jcr2spi.nodetype.EffectiveNodeType;
@@ -43,25 +64,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jcr.AccessDeniedException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.ItemExistsException;
-import javax.jcr.PropertyType;
-import javax.jcr.ReferentialIntegrityException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.ValueFormatException;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.version.VersionException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
 /**
  * <code>SessionItemStateManager</code> ...
  */
@@ -83,7 +85,7 @@
 
     private final QValueFactory qValueFactory;
 
-    private final ManagerProvider mgrProvider;
+    private final SessionImpl mgrProvider;
 
     /**
      * Creates a new <code>SessionItemStateManager</code> instance.
@@ -97,7 +99,7 @@
     public SessionItemStateManager(UpdatableItemStateManager workspaceItemStateMgr,
                                    ItemStateValidator validator,
                                    QValueFactory qValueFactory,
-                                   ItemStateFactory isf, ManagerProvider mgrProvider) {
+                                   ItemStateFactory isf, SessionImpl mgrProvider) {
 
         this.workspaceItemStateMgr = workspaceItemStateMgr;
         this.transientStateMgr = new TransientItemStateManager();
@@ -133,7 +135,7 @@
         ChangeLog changeLog = transientStateMgr.getChangeLog(state, true);
         if (!changeLog.isEmpty()) {
             // only pass changelog if there are transient modifications available
-            // for the specified item and its decendants.
+            // for the specified item and its descendants.
             workspaceItemStateMgr.execute(changeLog);
             // remove states and operations just processed from the transient ISM
             transientStateMgr.dispose(changeLog);
@@ -559,7 +561,8 @@
      * @return the computed values
      */
     private QValue[] computeSystemGeneratedPropertyValues(NodeState parent,
-                                                          QPropertyDefinition def) throws RepositoryException {
+                                                          QPropertyDefinition def)
+            throws RepositoryException {
         QValue[] genValues = null;
         QValue[] qDefaultValues = def.getDefaultValues();
         if (qDefaultValues != null && qDefaultValues.length > 0) {
@@ -570,15 +573,36 @@
             Name declaringNT = def.getDeclaringNodeType();
             Name name = def.getName();
 
-            if (NameConstants.NT_BASE.equals(declaringNT) && NameConstants.JCR_PRIMARYTYPE.equals(name)) {
+            if (NameConstants.JCR_PRIMARYTYPE.equals(name)) {
                 // jcr:primaryType property
                 genValues = new QValue[]{qValueFactory.create(parent.getNodeTypeName())};
-            } else if (NameConstants.NT_BASE.equals(declaringNT) && NameConstants.JCR_MIXINTYPES.equals(name)) {
+
+            } else if (NameConstants.JCR_MIXINTYPES.equals(name)) {
                 // jcr:mixinTypes property
                 Name[] mixins = parent.getMixinTypeNames();
                 genValues = getQValues(mixins, qValueFactory);
-            }
-            else {
+
+            } else if (NameConstants.JCR_CREATED.equals(name)
+                    && NameConstants.MIX_CREATED.equals(declaringNT)) {
+                // jcr:created property of a mix:created
+                genValues = new QValue[]{qValueFactory.create(Calendar.getInstance())};
+
+            } else if (NameConstants.JCR_CREATEDBY.equals(name)
+                    && NameConstants.MIX_CREATED.equals(declaringNT)) {
+                // jcr:createdBy property of a mix:created
+                genValues = new QValue[]{qValueFactory.create(mgrProvider.getUserID(), PropertyType.STRING)};
+
+            } else if (NameConstants.JCR_LASTMODIFIED.equals(name)
+                    && NameConstants.MIX_LASTMODIFIED.equals(declaringNT)) {
+                // jcr:lastModified property of a mix:lastModified
+                genValues = new QValue[]{qValueFactory.create(Calendar.getInstance())};
+
+            } else if (NameConstants.JCR_LASTMODIFIEDBY.equals(name)
+                    && NameConstants.MIX_LASTMODIFIED.equals(declaringNT)) {
+                // jcr:lastModifiedBy property of a mix:lastModified
+                genValues = new QValue[]{qValueFactory.create(mgrProvider.getUserID(), PropertyType.STRING)};
+
+            } else {
                 // ask the SPI implementation for advice
                 genValues = qValueFactory.computeAutoValues(def);
             }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java Tue Sep  8 16:09:28 2009
@@ -217,13 +217,16 @@
         }
 
         // deal with all additional ItemInfos that may be present.
-        NodeEntry parentEntry = nodeState.getNodeEntry();
+        // Assuming locality of the itemInfos, we keep an estimate of a parent entry.
+        // This reduces the part of the hierarchy to traverse. For large batches this
+        // optimization results in about 25% speed up.
+        NodeEntry approxParentEntry = nodeState.getNodeEntry();
         while (infos.hasNext()) {
             ItemInfo info = (ItemInfo) infos.next();
             if (info.denotesNode()) {
-                createDeepNodeState((NodeInfo) info, parentEntry, infos);
+                approxParentEntry = createDeepNodeState((NodeInfo) info, approxParentEntry, infos).getNodeEntry();
             } else {
-                createDeepPropertyState((PropertyInfo) info, parentEntry, infos);
+                createDeepPropertyState((PropertyInfo) info, approxParentEntry, infos);
             }
         }
         return nodeState;
@@ -359,9 +362,18 @@
 
             NodeEntry entry = anyParent;
             for (int i = 0; i < missingElems.length; i++) {
-                Name name = missingElems[i].getName();
-                int index = missingElems[i].getNormalizedIndex();
-                entry = createIntermediateNodeEntry(entry, name, index, infos);
+                if (missingElems[i].denotesParent()) {
+                    // Walk up the hierarchy for 'negative' paths
+                    // until the smallest common root is found
+                    entry = entry.getParent();
+                }
+                else if (missingElems[i].denotesName()) {
+                    // Add missing elements starting from the smallest common root
+                    Name name = missingElems[i].getName();
+                    int index = missingElems[i].getNormalizedIndex();
+                    entry = createIntermediateNodeEntry(entry, name, index, infos);
+                }
+                // else denotesCurrent -> ignore
             }
             if (entry == anyParent) {
                 throw new RepositoryException("Internal error while getting deep itemState");
@@ -400,9 +412,18 @@
             int i = 0;
             // NodeEntries except for the very last 'missingElem'
             while (i < missingElems.length - 1) {
-                Name name = missingElems[i].getName();
-                int index = missingElems[i].getNormalizedIndex();
-                entry = createIntermediateNodeEntry(entry, name, index, infos);
+                if (missingElems[i].denotesParent()) {
+                    // Walk up the hierarchy for 'negative' paths
+                    // until the smallest common root is found
+                    entry = entry.getParent();
+                }
+                else if (missingElems[i].denotesName()) {
+                    // Add missing elements starting from the smallest common root
+                    Name name = missingElems[i].getName();
+                    int index = missingElems[i].getNormalizedIndex();
+                    entry = createIntermediateNodeEntry(entry, name, index, infos);
+                }
+                // else denotesCurrent -> ignore
                 i++;
             }
             // create PropertyEntry for the last element if not existing yet
@@ -473,8 +494,8 @@
     }
 
     /**
-     * Returns true if the given <code>missingElems</code> start with a parent (..),
-     * a current (.) or the root element, in which case the info is not within
+     * Returns true if the given <code>missingElems</code> start with
+     * the root element, in which case the info is not within
      * the tree as it is expected.
      * See also #JCR-1797 for the corresponding enhancement request.
      *
@@ -483,7 +504,7 @@
      */
     private static boolean startsWithIllegalElement(Path.Element[] missingElems) {
         if (missingElems.length > 0) {
-            return !missingElems[0].denotesName();
+            return missingElems[0].denotesRoot();
         }
         return false;
     }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java Tue Sep  8 16:09:28 2009
@@ -18,6 +18,7 @@
 
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.jcr2spi.state.NodeState;
 import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
 
@@ -61,6 +62,14 @@
     public void checkout(NodeState nodeState) throws UnsupportedRepositoryOperationException, LockException, RepositoryException;
 
     /**
+     * 
+     * @param nodeState
+     * @param activityId
+     * @throws RepositoryException
+     */
+    public void checkout(NodeState nodeState, NodeId activityId) throws RepositoryException;
+
+    /**
      * @param nodeState
      * @throws RepositoryException
      * @see javax.jcr.version.VersionManager#checkpoint(String)
@@ -200,12 +209,11 @@
     /**
      *
      * @param nodeState
-     * @param baselineState
      * @return
      * @throws UnsupportedRepositoryOperationException
      * @throws RepositoryException
      */
-    public NodeEntry createConfiguration(NodeState nodeState, NodeState baselineState) throws UnsupportedRepositoryOperationException, RepositoryException;
+    public NodeEntry createConfiguration(NodeState nodeState) throws UnsupportedRepositoryOperationException, RepositoryException;
 
     /**
      *

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java Tue Sep  8 16:09:28 2009
@@ -34,8 +34,6 @@
 import org.apache.jackrabbit.jcr2spi.operation.RemoveActivity;
 import org.apache.jackrabbit.jcr2spi.WorkspaceManager;
 import org.apache.jackrabbit.jcr2spi.hierarchy.NodeEntry;
-import org.slf4j.LoggerFactory;
-import org.slf4j.Logger;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.ItemNotFoundException;
@@ -60,8 +58,6 @@
  */
 public class VersionManagerImpl implements VersionManager {
 
-    private static Logger log = LoggerFactory.getLogger(VersionManagerImpl.class);
-
     private final WorkspaceManager workspaceManager;
 
     public VersionManagerImpl(WorkspaceManager workspaceManager) {
@@ -75,7 +71,11 @@
     }
 
     public void checkout(NodeState nodeState) throws RepositoryException {
-        Operation co = Checkout.create(nodeState, this);
+        checkout(nodeState, null);
+    }
+
+    public void checkout(NodeState nodeState, NodeId activityId) throws RepositoryException {
+        Operation co = Checkout.create(nodeState, activityId, this);
         workspaceManager.execute(co);
     }
 
@@ -201,8 +201,8 @@
         workspaceManager.execute(op);
     }
 
-    public NodeEntry createConfiguration(NodeState nodeState, NodeState baselineState) throws UnsupportedRepositoryOperationException, RepositoryException {
-        CreateConfiguration op = CreateConfiguration.create(nodeState, baselineState, this);
+    public NodeEntry createConfiguration(NodeState nodeState) throws UnsupportedRepositoryOperationException, RepositoryException {
+        CreateConfiguration op = CreateConfiguration.create(nodeState, this);
         workspaceManager.execute(op);
         return workspaceManager.getHierarchyManager().getNodeEntry(op.getNewConfigurationId());
     }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java Tue Sep  8 16:09:28 2009
@@ -46,7 +46,6 @@
 import org.apache.jackrabbit.spi.commons.value.ValueFormat;
 import org.apache.jackrabbit.util.Base64;
 import org.apache.jackrabbit.util.TransientFileFactory;
-import org.apache.jackrabbit.uuid.UUID;
 import org.apache.jackrabbit.value.ValueHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -72,6 +71,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Stack;
+import java.util.UUID;
 
 /**
  * <code>SessionImporter</code>...

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AddPropertyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AddPropertyTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AddPropertyTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AddPropertyTest.java Tue Sep  8 16:09:28 2009
@@ -41,6 +41,11 @@
         testRootNode.save();
     }
 
+    protected void tearDown() throws Exception {
+        testNode = null;
+        super.tearDown();
+    }
+
     private static void assertItemStatus(Item item, int status) throws NotExecutableException {
         if (!(item instanceof ItemImpl)) {
             throw new NotExecutableException("org.apache.jackrabbit.jcr2spi.ItemImpl expected");

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ExternalModificationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ExternalModificationTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ExternalModificationTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ExternalModificationTest.java Tue Sep  8 16:09:28 2009
@@ -53,7 +53,10 @@
     protected void tearDown() throws Exception {
         if (testSession != null) {
             testSession.logout();
+            testSession = null;
         }
+        destParentNode = null;
+        refNode = null;
         super.tearDown();
     }
 

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetPropertyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetPropertyTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetPropertyTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetPropertyTest.java Tue Sep  8 16:09:28 2009
@@ -62,6 +62,7 @@
     protected void tearDown() throws Exception {
         if (readOnly != null) {
             readOnly.logout();
+            readOnly = null;
         }
         super.tearDown();
     }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/HierarchyNodeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/HierarchyNodeTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/HierarchyNodeTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/HierarchyNodeTest.java Tue Sep  8 16:09:28 2009
@@ -16,30 +16,26 @@
  */
 package org.apache.jackrabbit.jcr2spi;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.jackrabbit.test.AbstractJCRTest;
-import org.apache.jackrabbit.test.NotExecutableException;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.jcr.Node;
-import javax.jcr.PropertyIterator;
 import javax.jcr.NodeIterator;
-import javax.jcr.RepositoryException;
 import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import java.util.Calendar;
-import java.util.Set;
-import java.util.HashSet;
+
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
 
 /**
  * <code>HierarchyNodeTest</code>...
  */
 public class HierarchyNodeTest extends AbstractJCRTest {
 
-    private static Logger log = LoggerFactory.getLogger(HierarchyNodeTest.class);
-
-    private Set hierarchyNodeProps = new HashSet();
-    private Set resourceProps = new HashSet();
+    private Set<String> hierarchyNodeProps = new HashSet<String>();
+    private Set<String> resourceProps = new HashSet<String>();
 
     private String ntFolder;
     private String ntFile;
@@ -59,9 +55,11 @@
 
         hierarchyNodeProps.add(jcrPrefix+":primaryType");
         hierarchyNodeProps.add(jcrPrefix+":created");
+        hierarchyNodeProps.add(jcrPrefix+":createdBy");
 
         resourceProps.add(jcrPrefix+":primaryType");
         resourceProps.add(jcrPrefix+":lastModified");
+        resourceProps.add(jcrPrefix+":lastModifiedBy");
         resourceProps.add(jcrPrefix+":mimeType");
         resourceProps.add(jcrPrefix+":data");
 
@@ -70,7 +68,6 @@
             fileNode = folder.addNode("file", ntFile);
 
             Node content = fileNode.addNode(jcrPrefix + ":content", ntResource);
-            content.setProperty(jcrPrefix + ":lastModified", Calendar.getInstance());
             content.setProperty(jcrPrefix + ":mimeType", "text/plain");
             content.setProperty(jcrPrefix + ":data", "some plain text");
 
@@ -99,7 +96,7 @@
 
         // Then output the properties
         PropertyIterator properties = node.getProperties();
-        Set set = new HashSet();
+        Set<String> set = new HashSet<String>();
         while (properties.hasNext()) {
             Property property = properties.nextProperty();
             set.add(property.getName());

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveCombinedTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveCombinedTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveCombinedTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/MoveCombinedTest.java Tue Sep  8 16:09:28 2009
@@ -39,6 +39,7 @@
     protected void tearDown() throws Exception {
         if (testSession != null) {
             testSession.logout();
+            testSession = null;
         }
         super.tearDown();
     }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/PropertyLengthTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/PropertyLengthTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/PropertyLengthTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/PropertyLengthTest.java Tue Sep  8 16:09:28 2009
@@ -99,7 +99,7 @@
     }
 
     private static void checkLength(Property p) throws RepositoryException {
-        if (p.getDefinition().isMultiple()) {
+        if (p.isMultiple()) {
             Value[] vals = p.getValues();
             long[] lengths = p.getLengths();
             for (int i = 0; i < lengths.length; i++) {

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java Tue Sep  8 16:09:28 2009
@@ -19,6 +19,7 @@
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,6 +35,7 @@
         TestSuite suite = new TestSuite("jcr2spi tests");
 
         suite.addTestSuite(AccessByRelativePathTest.class);
+        suite.addTestSuite(GetItemsTest.class);
 
         // get node(s)
         suite.addTestSuite(SNSIndexTest.class);
@@ -45,6 +47,7 @@
         suite.addTestSuite(AddNewPropertyTest.class);
         suite.addTestSuite(SingleValuedPropertyTest.class);
         suite.addTestSuite(MultiValuedPropertyTest.class);
+        suite.addTestSuite(BinaryTest.class);
 
         // change mixin types
         suite.addTestSuite(MixinModificationTest.class);
@@ -85,7 +88,7 @@
         suite.addTestSuite(ReorderNewAndSavedTest.class);
         suite.addTestSuite(ReorderMixedTest.class);
         suite.addTestSuite(ReorderMoveTest.class);
-        
+
         // update
         suite.addTestSuite(UpdateTest.class);
 
@@ -98,7 +101,7 @@
 
         // repository
         suite.addTestSuite(LoginTest.class);
-        
+
         return suite;
     }
 }
\ No newline at end of file

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/MandatoryItemTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/MandatoryItemTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/MandatoryItemTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/MandatoryItemTest.java Tue Sep  8 16:09:28 2009
@@ -56,6 +56,7 @@
             }
         }
         if (childPropDef == null && childNodeDef == null) {
+            cleanUp();
             throw new NotExecutableException();
         }
     }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImplTest.java Tue Sep  8 16:09:28 2009
@@ -41,12 +41,14 @@
         if (nt instanceof NodeTypeImpl) {
             nodeType = (NodeTypeImpl) nt;
         } else {
+            cleanUp();
             throw new NotExecutableException("NodeTypeImpl expected.");
         }
 
         if (superuser instanceof NameResolver) {
             resolver = (NameResolver) superuser;
         } else {
+            cleanUp();
              throw new NotExecutableException();
         }
     }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java Tue Sep  8 16:09:28 2009
@@ -15,6 +15,7 @@
  */
 package org.apache.jackrabbit.jcr2spi.query;
 
+import org.apache.jackrabbit.test.NotExecutableException;
 import org.apache.jackrabbit.test.api.query.AbstractQueryTest;
 
 import javax.jcr.RepositoryException;
@@ -31,8 +32,9 @@
 
     /**
      * Queries the child nodes of the root node.
+     * @throws NotExecutableException 
      */
-    public void testQueryChildNodesOfRoot() throws RepositoryException {
+    public void testQueryChildNodesOfRoot() throws RepositoryException, NotExecutableException {
         List nodes = new ArrayList();
         for (NodeIterator it = superuser.getRootNode().getNodes(); it.hasNext(); ) {
             nodes.add(it.nextNode());
@@ -41,7 +43,7 @@
         executeXPathQuery(superuser, "/jcr:root/*", children);
     }
 
-    public void testRemappedNamespace() throws RepositoryException {
+    public void testRemappedNamespace() throws RepositoryException, NotExecutableException {
         String namespaceURI = "http://jackrabbit.apache.org/spi/test";
         String defaultPrefix = "spiTest";
 

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/xml/SessionImportTest.java Tue Sep  8 16:09:28 2009
@@ -20,7 +20,6 @@
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.test.AbstractJCRTest;
 import org.apache.jackrabbit.test.NotExecutableException;
-import org.apache.jackrabbit.uuid.UUID;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.AttributesImpl;
@@ -39,6 +38,7 @@
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.List;
+import java.util.UUID;
 
 /**
  * <code>SessionImportTest</code>...

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-parent/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-parent/pom.xml?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-parent/pom.xml (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-parent/pom.xml Tue Sep  8 16:09:28 2009
@@ -73,7 +73,7 @@
       <plugin>
         <!-- http://maven.apache.org/plugins/maven-idea-plugin/ -->
         <artifactId>maven-idea-plugin</artifactId>
-        <version>2.0</version>
+        <version>2.2</version>
         <configuration>
           <downloadSources>true</downloadSources>
           <jdkLevel>1.5</jdkLevel>
@@ -147,7 +147,7 @@
       <dependency>
         <groupId>javax.jcr</groupId>
         <artifactId>jcr</artifactId>
-        <version>2.0-b19</version>
+        <version>2.0-b114</version>
         <scope>provided</scope>
       </dependency>
       <dependency>

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/pom.xml?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/pom.xml (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/pom.xml Tue Sep  8 16:09:28 2009
@@ -139,6 +139,10 @@
       <artifactId>commons-collections</artifactId>
     </dependency>
     <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
     </dependency>

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java?rev=812570&r1=812569&r2=812570&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java Tue Sep  8 16:09:28 2009
@@ -16,60 +16,29 @@
  */
 package org.apache.jackrabbit.spi.commons;
 
-import org.apache.jackrabbit.spi.Batch;
-import org.apache.jackrabbit.spi.SessionInfo;
-import org.apache.jackrabbit.spi.ItemId;
-import org.apache.jackrabbit.spi.NodeId;
-import org.apache.jackrabbit.spi.Name;
-import org.apache.jackrabbit.spi.LockInfo;
-import org.apache.jackrabbit.spi.EventFilter;
-import org.apache.jackrabbit.spi.Path;
-import org.apache.jackrabbit.spi.Subscription;
-import org.apache.jackrabbit.spi.EventBundle;
-import org.apache.jackrabbit.spi.QNodeDefinition;
-import org.apache.jackrabbit.spi.QPropertyDefinition;
-import org.apache.jackrabbit.spi.PropertyId;
-import org.apache.jackrabbit.spi.QueryInfo;
-import org.apache.jackrabbit.spi.QNodeTypeDefinition;
-import org.apache.jackrabbit.spi.QValue;
-import org.apache.jackrabbit.spi.ItemInfo;
-import org.apache.jackrabbit.spi.commons.namespace.NamespaceMapping;
-import org.apache.jackrabbit.spi.commons.nodetype.compact.CompactNodeTypeDefReader;
-import org.apache.jackrabbit.spi.commons.nodetype.compact.ParseException;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.ValueFormatException;
-import javax.jcr.AccessDeniedException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.ItemExistsException;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.ReferentialIntegrityException;
-import javax.jcr.MergeException;
-import javax.jcr.NamespaceException;
-import javax.jcr.Credentials;
-import javax.jcr.LoginException;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.query.InvalidQueryException;
-import javax.jcr.lock.LockException;
-import javax.jcr.version.VersionException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
-import javax.jcr.nodetype.NodeTypeExistsException;
-import java.io.InputStream;
 import java.io.Reader;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.List;
 import java.util.ArrayList;
-import java.util.Set;
-import java.util.HashSet;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.jcr.Credentials;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
+
+import org.apache.jackrabbit.spi.ItemId;
+import org.apache.jackrabbit.spi.ItemInfo;
+import org.apache.jackrabbit.spi.NodeId;
+import org.apache.jackrabbit.spi.NodeInfo;
+import org.apache.jackrabbit.spi.QValue;
+import org.apache.jackrabbit.spi.SessionInfo;
+import org.apache.jackrabbit.spi.commons.nodetype.compact.ParseException;
 
 /**
  * <code>AbstractReadableRepositoryService</code> provides an abstract base
@@ -84,29 +53,14 @@
             Arrays.asList("add_node", "set_property", "remove"));
 
     /**
-     * The repository descriptors.
-     */
-    protected final Map<String, String> descriptors;
-
-    /**
-     * The fixed set of namespaces known to the repository service.
-     */
-    protected final NamespaceMapping namespaces = new NamespaceMapping();
-
-    /**
-     * The fixed set of node type definitions known to the repository service.
-     */
-    protected final Map<Name, QNodeTypeDefinition> nodeTypeDefs = new HashMap<Name, QNodeTypeDefinition>();
-
-    /**
-     * The node definition of the root node.
+     * The list of workspaces that this repository service exposes.
      */
-    protected QNodeDefinition rootNodeDefinition;
+    protected final List<String> wspNames;
 
     /**
-     * The list of workspaces that this repository service exposes.
+     * The name of the default workspace
      */
-    protected final List<String> wspNames;
+    protected final String defaulWsp;
 
     /**
      * Creates a new <code>AbstractReadableRepositoryService</code>.
@@ -117,164 +71,70 @@
      *                    URIs.
      * @param cnd         a reader on the compact node type definition.
      * @param wspNames    a list of workspace names.
-     * @throws RepositoryException if the namespace mappings are invalid.
-     * @throws ParseException      if an error occurs while parsing the CND.
+     * @param defaultWsp  name of the default workspace
+     * @throws RepositoryException       if the namespace mappings are invalid.
+     * @throws ParseException            if an error occurs while parsing the CND.
+     * @throws IllegalArgumentException  if <code>defaultWsp</code> is <code>null</code>
      */
-    public AbstractReadableRepositoryService(Map<String, String> descriptors,
+    public AbstractReadableRepositoryService(Map<String, QValue[]> descriptors,
                                              Map<String, String> namespaces,
                                              Reader cnd,
-                                             List<String> wspNames)
-            throws RepositoryException, ParseException {
-        this.descriptors = Collections.unmodifiableMap(new HashMap<String, String>(descriptors));
-        for (Map.Entry<String, String> entry : namespaces.entrySet()) {
-            this.namespaces.setMapping(entry.getKey(), entry.getValue());
-        }
-        CompactNodeTypeDefReader reader = new CompactNodeTypeDefReader(cnd, "", this.namespaces);
-        for (QNodeTypeDefinition def : reader.getNodeTypeDefinitions()) {
-            nodeTypeDefs.put(def.getName(), def);
-        }
-        this.wspNames = Collections.unmodifiableList(new ArrayList<String>(wspNames));
-    }
-
-    //---------------------------< subclass responsibility >--------------------
-
-    /**
-     * Create the root node definition.
-     *
-     * @return the root node definition for a workspace.
-     * @throws RepositoryException if an error occurs.
-     */
-    protected abstract QNodeDefinition createRootNodeDefinition()
-            throws RepositoryException;
+                                             List<String> wspNames,
+                                             String defaultWsp)
+            throws RepositoryException, ParseException, IllegalArgumentException {
 
-    /**
-     * Checks if the given <code>credentials</code> are valid.
-     *
-     * @param credentials the credentials to check.
-     * @param workspaceName the workspace to access.
-     * @throws LoginException if the credentials are invalid.
-     */
-    protected abstract void checkCredentials(Credentials credentials,
-                                             String workspaceName)
-            throws LoginException;
+        super(descriptors, namespaces, cnd);
 
-    //---------------------< may be overwritten by subclasses>------------------
-
-    /**
-     * Checks the type of the <code>sessionInfo</code> instance. This default
-     * implementation checks if <code>sessionInfo</code> is of type
-     * {@link SessionInfoImpl}, otherwise throws a {@link RepositoryException}.
-     *
-     * @param sessionInfo the session info to check.
-     * @throws RepositoryException if the given <code>sessionInfo</code> is not
-     *                             of the required type for this repository
-     *                             service implementation.
-     */
-    protected void checkSessionInfo(SessionInfo sessionInfo)
-            throws RepositoryException {
-        if (sessionInfo instanceof SessionInfoImpl) {
-            return;
+        if (defaultWsp == null) {
+            throw new IllegalArgumentException("Default workspace is null");
         }
-        throw new RepositoryException("SessionInfo not of type "
-                + SessionInfoImpl.class.getName());
-    }
 
-    /**
-     * Creates a session info instance for the given <code>userId</code> and
-     * <code>workspaceName</code>. This default implementation creates a
-     * {@link SessionInfoImpl} instance and sets the userId and workspaceName.
-     *
-     * @param userId the userId.
-     * @param workspaceName the name of the workspace to access.
-     * @return a session info instance for the given <code>userId</code> and
-     *         <code>workspaceName</code>.
-     */
-    protected SessionInfo createSessionInfo(String userId,
-                                            String workspaceName) {
-        SessionInfoImpl s = new SessionInfoImpl();
-        s.setUserID(userId);
-        s.setWorkspacename(workspaceName);
-        return s;
+        this.wspNames = Collections.unmodifiableList(new ArrayList<String>(wspNames));
+        this.defaulWsp = defaultWsp;
     }
 
-    //----------------------------< login >-------------------------------------
+    //---------------------< may be overwritten by subclasses>------------------
 
     /**
-     * This default implementation does:
-     * <ul>
-     * <li>calls {@link #checkCredentials(Credentials, String)}</li>
-     * <li>checks if the given <code>workspaceName</code> is in
-     * {@link #wspNames} otherwise throws a {@link NoSuchWorkspaceException}.</li>
-     * <li>calls {@link #createSessionInfo(String, String)} with a <code>null</code>
-     * <code>userId</code> or the <code>userId</code> from <code>credentials</code>
-     * if it is of type {@link SimpleCredentials}.</li>
-     * </ul>
-     * @param credentials the credentials for the login.
-     * @param workspaceName the name of the workspace to log in.
-     * @return the session info.
-     * @throws LoginException if the credentials are invalid.
-     * @throws NoSuchWorkspaceException if <code>workspaceName</code> is unknown.
-     * @throws RepositoryException if another error occurs.
-     */
-    public SessionInfo obtain(Credentials credentials, String workspaceName)
-            throws LoginException, NoSuchWorkspaceException, RepositoryException {
-        checkCredentials(credentials, workspaceName);
-        if (!wspNames.contains(workspaceName)) {
+     * Checks whether the <code>workspaceName</code> is valid.
+     * @param workspaceName  name of the workspace to check
+     * @throws NoSuchWorkspaceException  if <code>workspaceName</code> is neither in the
+     *   list of workspaces nor null (i.e. default workspace).
+     */
+    @Override
+    protected void checkWorkspace(String workspaceName) throws NoSuchWorkspaceException {
+        if (workspaceName != null && !wspNames.contains(workspaceName)) {
             throw new NoSuchWorkspaceException(workspaceName);
         }
-        String userId = null;
-        if (credentials instanceof SimpleCredentials) {
-            userId = ((SimpleCredentials) credentials).getUserID();
-        }
-        return createSessionInfo(userId, workspaceName);
     }
 
-    /**
-     * This default implementation returns the session info retuned by the call
-     * to {@link #createSessionInfo(String, String)} with the userId taken
-     * from the passed <code>sessionInfo</code>.
-     */
-    public SessionInfo obtain(SessionInfo sessionInfo, String workspaceName)
-            throws LoginException, NoSuchWorkspaceException, RepositoryException {
-        return createSessionInfo(sessionInfo.getUserID(), workspaceName);
-    }
-
-    /**
-     * This default implementation returns the session info returned by the call
-     * to {@link #obtain(Credentials, String)} with the workspaceName taken from
-     * the passed <code>sessionInfo</code>.
-     */
-    public SessionInfo impersonate(SessionInfo sessionInfo, Credentials credentials)
-            throws LoginException, RepositoryException {
-        return obtain(credentials, sessionInfo.getWorkspaceName());
-    }
+    @Override
+    protected SessionInfo createSessionInfo(Credentials credentials, String workspaceName)
+            throws RepositoryException {
 
-    /**
-     * This default implementation does nothing.
-     */
-    public void dispose(SessionInfo sessionInfo) throws RepositoryException {
-        // do nothing
+        return super.createSessionInfo(credentials, workspaceName == null? defaulWsp : workspaceName);
     }
 
     //-----------------------------< reading >----------------------------------
 
     /**
-     * This default implementation returns an iterator over the item infos
-     * returned by the call to {@link #getNodeInfo(SessionInfo, NodeId)}.
+     * This default implementation returns the first item returned by the call to
+     * {@link #getItemInfos(SessionInfo, NodeId)}. The underlying assumption here is that
+     * the implementation and the persistence layer are optimized for batch reading. That is,
+     * a call to <code>getItemInfos</code> is no more expensive than retrieving the single
+     * <code>NodeInfo</code> only. If this assumption does not hold, subclasses should override
+     * this method.
      */
-    public Iterator<? extends ItemInfo> getItemInfos(SessionInfo sessionInfo, NodeId nodeId) throws
-            ItemNotFoundException, RepositoryException {
-        return Collections.singleton(getNodeInfo(sessionInfo, nodeId)).iterator();
-    }
-
-    //--------------------------< descriptors >---------------------------------
+    public NodeInfo getNodeInfo(SessionInfo sessionInfo, NodeId nodeId) throws ItemNotFoundException,
+            RepositoryException {
 
-    /**
-     * This default implementation returns the descriptors that were passed
-     * to the constructor of this repository service.
-     */
-    public Map<String, String> getRepositoryDescriptors() throws RepositoryException {
-        return descriptors;
+        Iterator<? extends ItemInfo> infos = getItemInfos(sessionInfo, nodeId);
+        if (infos.hasNext()) {
+            return (NodeInfo) infos.next();
+        }
+        else {
+            throw new ItemNotFoundException();
+        }
     }
 
     //-------------------------< workspace names >------------------------------
@@ -284,8 +144,7 @@
      * with the <code>sessionInfo</code>, then returns the workspaces that were
      * passed to the constructor of this repository service.
      */
-    public String[] getWorkspaceNames(SessionInfo sessionInfo) throws
-            RepositoryException {
+    public String[] getWorkspaceNames(SessionInfo sessionInfo) throws RepositoryException {
         checkSessionInfo(sessionInfo);
         return wspNames.toArray(new String[wspNames.size()]);
     }
@@ -310,488 +169,4 @@
         }
         return true;
     }
-
-    //-----------------------------< node types >-------------------------------
-
-    /**
-     * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
-     * with the <code>sessionInfo</code>,
-     */
-    public Iterator<QNodeTypeDefinition> getQNodeTypeDefinitions(SessionInfo sessionInfo) throws
-            RepositoryException {
-        checkSessionInfo(sessionInfo);
-        return nodeTypeDefs.values().iterator();
-    }
-
-    /**
-     * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
-     * with the <code>sessionInfo</code>, then gathers the {@link QNodeTypeDefinition}s
-     * with the given <code>nodetypeNames</code>. If one of the nodetypeNames
-     * is not a valid node type definition then a {@link RepositoryException}
-     * is thrown.
-     */
-    public Iterator<QNodeTypeDefinition> getQNodeTypeDefinitions(SessionInfo sessionInfo, Name[] nodetypeNames)
-            throws RepositoryException {
-        checkSessionInfo(sessionInfo);
-        List<QNodeTypeDefinition> ntDefs = new ArrayList<QNodeTypeDefinition>();
-        for (Name nodetypeName : nodetypeNames) {
-            QNodeTypeDefinition def = nodeTypeDefs.get(nodetypeName);
-            if (def == null) {
-                throw new RepositoryException("unknown node type: " + nodetypeName);
-            }
-            ntDefs.add(def);
-        }
-        return ntDefs.iterator();
-    }
-
-    /**
-     * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
-     * with the <code>sessionInfo</code>, then lazily initializes {@link #rootNodeDefinition}
-     * if <code>nodeId</code> denotes the root node; otherwise throws a
-     * {@link UnsupportedRepositoryOperationException}.
-     */
-    public QNodeDefinition getNodeDefinition(SessionInfo sessionInfo,
-                                             NodeId nodeId)
-            throws RepositoryException {
-        checkSessionInfo(sessionInfo);
-        if (nodeId.getUniqueID() == null && nodeId.getPath().denotesRoot()) {
-            synchronized (this) {
-                if (rootNodeDefinition == null) {
-                    rootNodeDefinition = createRootNodeDefinition();
-                }
-                return rootNodeDefinition;
-            }
-        }
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public QPropertyDefinition getPropertyDefinition(SessionInfo sessionInfo,
-                                                     PropertyId propertyId)
-            throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void registerNodeTypes(SessionInfo sessionInfo, QNodeTypeDefinition[] nodeTypeDefinitions, boolean allowUpdate) throws InvalidNodeTypeDefinitionException, NodeTypeExistsException, UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void unregisterNodeTypes(SessionInfo sessionInfo, Name[] nodeTypeNames) throws UnsupportedRepositoryOperationException, NoSuchNodeTypeException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    //-----------------------------< namespaces >-------------------------------
-
-    /**
-     * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
-     * with the <code>sessionInfo</code>, then returns the prefix to namespace
-     * URL mapping that was provided in the constructor of this repository
-     * service.
-     */
-    public Map<String, String> getRegisteredNamespaces(SessionInfo sessionInfo) throws
-            RepositoryException {
-        checkSessionInfo(sessionInfo);
-        return namespaces.getPrefixToURIMapping();
-    }
-
-    /**
-     * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
-     * with the <code>sessionInfo</code>, then returns the namepsace URI for the
-     * given <code>prefix</code>.
-     */
-    public String getNamespaceURI(SessionInfo sessionInfo, String prefix)
-            throws NamespaceException, RepositoryException {
-        checkSessionInfo(sessionInfo);
-        return namespaces.getURI(prefix);
-    }
-
-    /**
-     * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
-     * with the <code>sessionInfo</code>, then return the namespace prefix for
-     * the given <code>uri</code>.
-     */
-    public String getNamespacePrefix(SessionInfo sessionInfo, String uri)
-            throws NamespaceException, RepositoryException {
-        checkSessionInfo(sessionInfo);
-        return namespaces.getPrefix(uri);
-    }
-
-    //-----------------------------< write methods >----------------------------
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public Batch createBatch(SessionInfo sessionInfo, ItemId itemId)
-            throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void submit(Batch batch) throws PathNotFoundException, ItemNotFoundException, NoSuchNodeTypeException, ValueFormatException, VersionException, LockException, ConstraintViolationException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void importXml(SessionInfo sessionInfo,
-                          NodeId parentId,
-                          InputStream xmlStream,
-                          int uuidBehaviour) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void move(SessionInfo sessionInfo,
-                     NodeId srcNodeId,
-                     NodeId destParentNodeId,
-                     Name destName) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void copy(SessionInfo sessionInfo,
-                     String srcWorkspaceName,
-                     NodeId srcNodeId,
-                     NodeId destParentNodeId,
-                     Name destName) throws NoSuchWorkspaceException, ConstraintViolationException, VersionException, AccessDeniedException, PathNotFoundException, ItemExistsException, LockException, UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void update(SessionInfo sessionInfo,
-                       NodeId nodeId,
-                       String srcWorkspaceName)
-            throws NoSuchWorkspaceException, AccessDeniedException, LockException, InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void clone(SessionInfo sessionInfo,
-                      String srcWorkspaceName,
-                      NodeId srcNodeId,
-                      NodeId destParentNodeId,
-                      Name destName,
-                      boolean removeExisting) throws NoSuchWorkspaceException, ConstraintViolationException, VersionException, AccessDeniedException, PathNotFoundException, ItemExistsException, LockException, UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public LockInfo lock(SessionInfo sessionInfo,
-                         NodeId nodeId,
-                         boolean deep,
-                         boolean sessionScoped)
-            throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public LockInfo lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep,
-                         boolean sessionScoped, long timeoutHint, String ownerHint)
-            throws UnsupportedRepositoryOperationException, LockException,
-            AccessDeniedException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @return <code>null</code>.
-     */
-    public LockInfo getLockInfo(SessionInfo sessionInfo, NodeId nodeId)
-            throws AccessDeniedException, RepositoryException {
-        return null;
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void refreshLock(SessionInfo sessionInfo, NodeId nodeId)
-            throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void unlock(SessionInfo sessionInfo, NodeId nodeId)
-            throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public NodeId checkin(SessionInfo sessionInfo, NodeId nodeId)
-            throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void checkout(SessionInfo sessionInfo, NodeId nodeId)
-            throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public NodeId checkpoint(SessionInfo sessionInfo, NodeId nodeId)
-            throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void removeVersion(SessionInfo sessionInfo,
-                              NodeId versionHistoryId,
-                              NodeId versionId)
-            throws ReferentialIntegrityException, AccessDeniedException, UnsupportedRepositoryOperationException, VersionException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void restore(SessionInfo sessionInfo,
-                        NodeId nodeId,
-                        NodeId versionId,
-                        boolean removeExisting) throws VersionException, PathNotFoundException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void restore(SessionInfo sessionInfo,
-                        NodeId[] versionIds,
-                        boolean removeExisting) throws ItemExistsException, UnsupportedRepositoryOperationException, VersionException, LockException, InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException
-     *          always.
-     */
-    public Iterator<NodeId> merge(SessionInfo sessionInfo,
-                                  NodeId nodeId,
-                                  String srcWorkspaceName,
-                                  boolean bestEffort) throws
-            NoSuchWorkspaceException, AccessDeniedException, MergeException,
-            LockException, InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException
-     *          always.
-     */
-    public Iterator<NodeId> merge(SessionInfo sessionInfo,
-                                  NodeId nodeId,
-                                  String srcWorkspaceName,
-                                  boolean bestEffort,
-                                  boolean isShallow) throws
-            NoSuchWorkspaceException, AccessDeniedException, MergeException,
-            LockException, InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void resolveMergeConflict(SessionInfo sessionInfo,
-                                     NodeId nodeId,
-                                     NodeId[] mergeFailedIds,
-                                     NodeId[] predecessorIds)
-            throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void addVersionLabel(SessionInfo sessionInfo,
-                                NodeId versionHistoryId,
-                                NodeId versionId,
-                                Name label,
-                                boolean moveLabel) throws VersionException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void removeVersionLabel(SessionInfo sessionInfo,
-                                   NodeId versionHistoryId,
-                                   NodeId versionId,
-                                   Name label) throws VersionException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public NodeId createActivity(SessionInfo sessionInfo, String title) throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void removeActivity(SessionInfo sessionInfo, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public Iterator mergeActivity(SessionInfo sessionInfo, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public NodeId createConfiguration(SessionInfo sessionInfo, NodeId nodeId, NodeId baselineId) throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    //-----------------------------< observation >------------------------------
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public EventFilter createEventFilter(SessionInfo sessionInfo,
-                                         int eventTypes,
-                                         Path absPath,
-                                         boolean isDeep,
-                                         String[] uuid,
-                                         Name[] nodeTypeName,
-                                         boolean noLocal)
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public Subscription createSubscription(SessionInfo sessionInfo,
-                                           EventFilter[] filters)
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void updateEventFilters(Subscription subscription,
-                                   EventFilter[] filters)
-            throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public EventBundle[] getEvents(Subscription subscription, long timeout)
-            throws RepositoryException, InterruptedException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public EventBundle getEvents(SessionInfo sessionInfo, EventFilter filter,
-                                   long after) throws
-            RepositoryException, UnsupportedRepositoryOperationException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void dispose(Subscription subscription) throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    //-------------------------------------------------< namespace registry >---
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void registerNamespace(SessionInfo sessionInfo,
-                                  String prefix,
-                                  String uri) throws NamespaceException, UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void unregisterNamespace(SessionInfo sessionInfo, String uri)
-            throws NamespaceException, UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    //-----------------------------------------------< Workspace Management >---
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void createWorkspace(SessionInfo sessionInfo, String name, String srcWorkspaceName) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-
-    }
-
-    /**
-     * @throws UnsupportedRepositoryOperationException always.
-     */
-    public void deleteWorkspace(SessionInfo sessionInfo, String name) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-
-    }
-    
-    //-------------------------------< query >----------------------------------
-
-    public String[] getSupportedQueryLanguages(SessionInfo sessionInfo) throws
-            RepositoryException {
-        checkSessionInfo(sessionInfo);
-        return new String[0];
-    }
-
-    public String[] checkQueryStatement(SessionInfo sessionInfo, String statement,
-                                    String language, Map namespaces) throws
-            InvalidQueryException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    public QueryInfo executeQuery(SessionInfo sessionInfo, String statement,
-                                  String language, Map<String, String> namespaces, long limit,
-                                  long offset, Map<String, QValue> values) throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
 }