You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2010/02/22 09:58:41 UTC

svn commit: r912517 [1/3] - in /incubator/chemistry/trunk/opencmis: opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/...

Author: jens
Date: Mon Feb 22 08:58:39 2010
New Revision: 912517

URL: http://svn.apache.org/viewvc?rev=912517&view=rev
Log:
InMemoryProvider:
bugfix versioning: only checked out documents can be modified for versioned documents
add test to update older versions

clean up testing:
- allow tests to use direct implementation of the services or go through client provider layer
- remove all dependencies to client provider from other locations than test initialization

put commonly used functionality for tests and test initialization in a common superclass

Several fixes in Versioning
Refactoring configuration parameters
Documentation

Added:
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/DummyCallContext.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java
Removed:
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ConfigMap.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/MapConfigReader.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/CallContextConfigReader.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/SessionConfigReader.java
Modified:
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ConfigConstants.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/VersioningServiceImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/AtomLinkInfoProvider.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryDiscoveryService.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryNavigationService.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryObjectService.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryService.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningService.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Children.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Content.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/DocumentVersion.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/StoreManager.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/StoredObject.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/VersionedDocument.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/AbstractPathImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/FolderImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectServiceTest.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/RepositoryServiceTest.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/TypeValidationTest.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/UnitTestTypeSystemCreator.java
    incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/VersioningTest.java
    incubator/chemistry/trunk/opencmis/src/site/apt/server-inmemory.apt

Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java?rev=912517&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java Mon Feb 22 08:58:39 2010
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.opencmis.inmemory;
+
+import java.util.Map;
+
+import org.apache.opencmis.commons.provider.AclService;
+import org.apache.opencmis.commons.provider.DiscoveryService;
+import org.apache.opencmis.commons.provider.MultiFilingService;
+import org.apache.opencmis.commons.provider.NavigationService;
+import org.apache.opencmis.commons.provider.ObjectService;
+import org.apache.opencmis.commons.provider.PolicyService;
+import org.apache.opencmis.commons.provider.RelationshipService;
+import org.apache.opencmis.commons.provider.RepositoryInfoData;
+import org.apache.opencmis.commons.provider.RepositoryService;
+import org.apache.opencmis.commons.provider.VersioningService;
+import org.apache.opencmis.inmemory.storedobj.api.StoreManager;
+import org.apache.opencmis.inmemory.storedobj.impl.StoreManagerFactory;
+import org.apache.opencmis.inmemory.storedobj.impl.StoreManagerImpl;
+
+/**
+ * General class to manage all the services. Directly used for unit test of the
+ * in-memory server, indirectly used for the client provider implementation of
+ * the in-memory provider
+ * 
+ * @author Jens
+ *
+ */
+public class CmisInMemoryProvider {
+
+  protected StoreManager fStoreManager;
+  protected RepositoryService fRepositoryService;
+  protected NavigationService fNavigationService;
+  protected ObjectService fObjectService;
+  protected VersioningService fVersioningService;
+  protected RepositoryInfoData fRepositoryInfo;
+
+  public CmisInMemoryProvider(Map<String, String> cfgParams) {
+    setup (cfgParams);    
+  }
+  
+  protected CmisInMemoryProvider() {  
+  }
+  
+  RepositoryService getRepositoryService() {
+    return fRepositoryService;
+  }
+
+  NavigationService getNavigationService() {
+    return fNavigationService;
+  }
+
+  ObjectService getObjectService() {
+    return fObjectService;    
+  }
+
+  VersioningService getVersioningService() {
+   return fVersioningService; 
+  }
+
+  RelationshipService getRelationshipService() {
+    return null;
+  }
+
+  DiscoveryService getDiscoveryService() {
+    return null;
+  }
+
+  MultiFilingService getMultiFilingService() {
+    return null;
+  }
+
+  AclService getAclService() {
+    return null;
+  }
+
+  PolicyService getPolicyService() {
+    return null;
+  }
+
+  protected void setup(Map<String, String> cfgParams) {
+    String repositoryClassName = (String) cfgParams.get(ConfigConstants.REPOSITORY_CLASS);
+    if (null==repositoryClassName)
+      repositoryClassName = StoreManagerImpl.class.getName();
+    
+    fStoreManager = StoreManagerFactory.createInstance(repositoryClassName);
+    String repositoryId  = (String) cfgParams.get(ConfigConstants.REPOSITORY_ID);
+    
+    // first create repository
+    if (null != repositoryId ) {
+      // then create/initialize type system
+      String typeCreatorClassName = (String) cfgParams.get(ConfigConstants.TYPE_CREATOR_CLASS);
+      fStoreManager.createAndInitRepository(repositoryId, typeCreatorClassName);
+    } else {    
+      // then init repository (note: loads root folder which requires cmis:folder type available)
+      fStoreManager.initRepository(repositoryId);
+    }
+    
+//    String repoInfoCreatorClassName = (String) fSession.get(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS);
+//    fStoreManager.initRepositoryInfo(repositoryId, repoInfoCreatorClassName);    
+
+    // initialize services
+    fRepositoryService = new RepositoryServiceImpl(fStoreManager);
+    fNavigationService = new NavigationServiceImpl(fStoreManager);
+    fObjectService = new ObjectServiceImpl(fStoreManager);
+    fVersioningService = new VersioningServiceImpl(fStoreManager, fObjectService);    
+  }
+
+  
+}

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ConfigConstants.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ConfigConstants.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ConfigConstants.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ConfigConstants.java Mon Feb 22 08:58:39 2010
@@ -22,8 +22,6 @@
   public static final String REPOSITORY_ID = "InMemoryServer.RepositoryId";
   public static final String TYPE_CREATOR_CLASS = "InMemoryServer.TypesCreatorClass";
   public static final String REPOSITORY_INFO_CREATOR_CLASS = "InMemoryServer.RepositoryInfoCreatorClass";
-  public static final String USERNAME = "InMemoryServer.User";
-  public static final String PASSWORD = "InMemoryServer.Password";
   public static final String REPOSITORY_CLASS = "InMemoryServer.Class";
 
   // Helper constants that allow to fill a repository with data on initialization

Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/DummyCallContext.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/DummyCallContext.java?rev=912517&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/DummyCallContext.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/DummyCallContext.java Mon Feb 22 08:58:39 2010
@@ -0,0 +1,40 @@
+package org.apache.opencmis.inmemory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.opencmis.server.spi.CallContext;
+
+public class DummyCallContext implements CallContext {
+  private Map<String, String> fParameter = new HashMap<String, String>();
+
+  public DummyCallContext() {
+    fParameter.put( USERNAME, "TestUser");
+    fParameter.put( PASSWORD, "secret");
+    fParameter.put( LOCALE, "en");
+  }
+  
+  public String get(String key) {
+    return fParameter.get(key);
+  }
+
+  public String getBinding() {
+    return BINDING_ATOMPUB;
+  }
+
+  public String getLocale() {
+    return get(LOCALE);
+  }
+
+  public String getPassword() {
+    return get(PASSWORD);
+  }
+
+  public String getUsername() {
+    return get(USERNAME);
+  }
+
+  public void put(String key, String value) {
+    fParameter.put(key, value);
+  }
+}

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java Mon Feb 22 08:58:39 2010
@@ -43,6 +43,7 @@
 import org.apache.opencmis.commons.provider.ObjectList;
 import org.apache.opencmis.commons.provider.ObjectParentData;
 import org.apache.opencmis.commons.provider.PropertiesData;
+import org.apache.opencmis.inmemory.storedobj.api.DocumentVersion;
 import org.apache.opencmis.inmemory.storedobj.api.Folder;
 import org.apache.opencmis.inmemory.storedobj.api.ObjectStore;
 import org.apache.opencmis.inmemory.storedobj.api.Path;
@@ -65,7 +66,7 @@
   }
 
   /* (non-Javadoc)
-   * @see org.apache.opencmis.client.provider.NavigationService#getCheckedOutDocs(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.math.BigInteger, java.math.BigInteger, org.apache.opencmis.client.provider.ExtensionsData)
+   * @see org.opencmis.client.provider.NavigationService#getCheckedOutDocs(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.math.BigInteger, java.math.BigInteger, org.opencmis.client.provider.ExtensionsData)
    */
   public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter,
       String orderBy, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
@@ -94,7 +95,9 @@
       for (ObjectInFolderData child: children.getObjects()) {
         ObjectData obj = child.getObject();
         StoredObject so = fStoreManager.getObjectStore(repositoryId).getObjectById(obj.getId());
-        if (so instanceof VersionedDocument && ((VersionedDocument)so).isCheckedOut())
+        log.info("Checked out: children:" + obj.getId());
+        if (so instanceof DocumentVersion && ((DocumentVersion)so).getParentDocument().isCheckedOut())
+//        if (so instanceof VersionedDocument && ((VersionedDocument)so).isCheckedOut())
           odList.add(obj);
       }
     }
@@ -106,7 +109,7 @@
   }
 
   /* (non-Javadoc)
-   * @see org.apache.opencmis.client.provider.NavigationService#getChildren(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, java.math.BigInteger, java.math.BigInteger, org.apache.opencmis.client.provider.ExtensionsData)
+   * @see org.opencmis.client.provider.NavigationService#getChildren(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, java.math.BigInteger, java.math.BigInteger, org.opencmis.client.provider.ExtensionsData)
    */
   public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter,
       String orderBy, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
@@ -126,7 +129,7 @@
   }
   
   /* (non-Javadoc)
-   * @see org.apache.opencmis.client.provider.NavigationService#getDescendants(java.lang.String, java.lang.String, java.math.BigInteger, java.lang.String, java.lang.Boolean, org.apache.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.apache.opencmis.client.provider.ExtensionsData)
+   * @see org.opencmis.client.provider.NavigationService#getDescendants(java.lang.String, java.lang.String, java.math.BigInteger, java.lang.String, java.lang.Boolean, org.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.opencmis.client.provider.ExtensionsData)
    */
   public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId,
       BigInteger depth, String filter, Boolean includeAllowableActions,
@@ -153,7 +156,7 @@
   }
 
   /* (non-Javadoc)
-   * @see org.apache.opencmis.client.provider.NavigationService#getFolderTree(java.lang.String, java.lang.String, java.math.BigInteger, java.lang.String, java.lang.Boolean, org.apache.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.apache.opencmis.client.provider.ExtensionsData)
+   * @see org.opencmis.client.provider.NavigationService#getFolderTree(java.lang.String, java.lang.String, java.math.BigInteger, java.lang.String, java.lang.Boolean, org.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.opencmis.client.provider.ExtensionsData)
    */
   public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId,
       BigInteger depth, String filter, Boolean includeAllowableActions,
@@ -163,10 +166,10 @@
     log.debug("start getFolderTree()");
     checkStandardParameters(repositoryId, folderId);
 
-    if (depth == null || depth.intValue() == 0)
+    if (depth != null && depth.intValue() == 0)
       throw new CmisInvalidArgumentException("A zero depth is not allowed for getFolderTree().");
     
-    int levels = depth.intValue();
+    int levels = depth == null ? 2: depth.intValue();
     int level = 0;
     List<ObjectInFolderContainer> result = getDescendantsIntern(repositoryId, folderId,
             filter, includeAllowableActions, includeRelationships, renditionFilter,
@@ -176,7 +179,7 @@
   }
   
   /* (non-Javadoc)
-   * @see org.apache.opencmis.client.provider.NavigationService#getFolderParent(java.lang.String, java.lang.String, java.lang.String, org.apache.opencmis.client.provider.ExtensionsData)
+   * @see org.opencmis.client.provider.NavigationService#getFolderParent(java.lang.String, java.lang.String, java.lang.String, org.opencmis.client.provider.ExtensionsData)
    */
   public ObjectData getFolderParent(String repositoryId, String folderId, String filter,
       ExtensionsData extension) {
@@ -200,7 +203,7 @@
   }
 
   /* (non-Javadoc)
-   * @see org.apache.opencmis.client.provider.NavigationService#getObjectParents(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.apache.opencmis.client.provider.ExtensionsData)
+   * @see org.opencmis.client.provider.NavigationService#getObjectParents(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.opencmis.client.provider.ExtensionsData)
    */
   public List<ObjectParentData> getObjectParents(String repositoryId, String objectId,
       String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
@@ -297,9 +300,8 @@
       ObjectInFolderList children = getChildrenIntern(repositoryId, folderId, filter, orderBy,
           includeAllowableActions, includeRelationships, renditionFilter, includePathSegments, 1000, 0, folderOnly);
       
+      childrenOfFolderId = new ArrayList<ObjectInFolderContainer>();
       if (null != children) {        
-        if (children.getObjects().size() > 0)
-          childrenOfFolderId = new ArrayList<ObjectInFolderContainer>();
 
         for (ObjectInFolderData child : children.getObjects()) {      
           ObjectInFolderContainerImpl oifc = new ObjectInFolderContainerImpl();

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java Mon Feb 22 08:58:39 2010
@@ -65,6 +65,7 @@
 import org.apache.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
 import org.apache.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
 import org.apache.opencmis.inmemory.types.PropertyCreationHelper;
+import org.apache.opencmis.server.spi.CallContext;
 
 public class ObjectServiceImpl extends AbstractServiceImpl implements ObjectService {
   private static Log log = LogFactory.getLog(ObjectService.class);
@@ -78,13 +79,13 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#createDocument(java.lang.String,
-   * org.apache.opencmis.client.provider.PropertiesData, java.lang.String,
-   * org.apache.opencmis.client.provider.ContentStreamData,
-   * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
-   * org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#createDocument(java.lang.String,
+   * org.opencmis.client.provider.PropertiesData, java.lang.String,
+   * org.opencmis.client.provider.ContentStreamData,
+   * org.opencmis.commons.enums.VersioningState, java.util.List,
+   * org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public String createDocument(String repositoryId, PropertiesData properties, String folderId,
       ContentStreamData contentStream, VersioningState versioningState, List<String> policies,
@@ -126,7 +127,7 @@
     TypeValidator.validateProperties(typeDef, properties, true);
 
     // set user, creation date, etc.
-    String user = RuntimeContext.getRuntimeConfigValue(ConfigConstants.USERNAME);
+    String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
     if (user == null)
       user = "unknown";
     
@@ -143,21 +144,17 @@
       version.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);
       version.setCustomProperties(properties.getProperties());
       version.persist();
-      verDoc.persist();
       resId = version.getId(); // return the version and not the version series to caller
     } else {
       Document doc = fStoreManager.getObjectStore(repositoryId).createDocument(name);
       doc.setContent(contentStream, false);
       // add document to folder
-      folder.addChildDocument(doc); // sets parent in doc
       doc.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);
       doc.setCustomProperties(properties.getProperties());
-      doc.persist(); // first persist document, only if this succeeds persist folder with added child
+      folder.addChildDocument(doc); // sets parent in doc
       resId = doc.getId();
     }
         
-    folder.persist();
-
     // versioningState, policies, addACEs, removeACEs, extension are ignored for
     // now.
     log.debug("stop createDocument()");
@@ -168,13 +165,13 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#createDocumentFromSource(java
+   * org.opencmis.client.provider.ObjectService#createDocumentFromSource(java
    * .lang.String, java.lang.String,
-   * org.apache.opencmis.client.provider.PropertiesData, java.lang.String,
-   * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
-   * org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.PropertiesData, java.lang.String,
+   * org.opencmis.commons.enums.VersioningState, java.util.List,
+   * org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public String createDocumentFromSource(String repositoryId, String sourceId,
       PropertiesData properties, String folderId, VersioningState versioningState,
@@ -222,11 +219,11 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#createFolder(java.lang.String,
-   * org.apache.opencmis.client.provider.PropertiesData, java.lang.String,
-   * java.util.List, org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#createFolder(java.lang.String,
+   * org.opencmis.client.provider.PropertiesData, java.lang.String,
+   * java.util.List, org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public String createFolder(String repositoryId, PropertiesData properties, String folderId,
       List<String> policies, AccessControlList addACEs, AccessControlList removeACEs,
@@ -274,14 +271,12 @@
       ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
       Folder newFolder = objStore.createFolder(folderName);
       // set default system attributes
-      String user = RuntimeContext.getRuntimeConfigValue(ConfigConstants.USERNAME);
+      String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
       if (user == null)
         user = "unknown";
       newFolder.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);
       newFolder.setCustomProperties(properties.getProperties());
       parent.addChildFolder(newFolder);
-      newFolder.persist();
-      parent.persist();
       log.debug("stop createFolder()");
       return newFolder.getId();
     } catch (Exception e) {
@@ -293,11 +288,11 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#createPolicy(java.lang.String,
-   * org.apache.opencmis.client.provider.PropertiesData, java.lang.String,
-   * java.util.List, org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#createPolicy(java.lang.String,
+   * org.opencmis.client.provider.PropertiesData, java.lang.String,
+   * java.util.List, org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public String createPolicy(String repositoryId, PropertiesData properties, String folderId,
       List<String> policies, AccessControlList addACEs, AccessControlList removeACEs,
@@ -313,11 +308,11 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#createRelationship(java.lang
-   * .String, org.apache.opencmis.client.provider.PropertiesData, java.util.List,
-   * org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.AccessControlList,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#createRelationship(java.lang
+   * .String, org.opencmis.client.provider.PropertiesData, java.util.List,
+   * org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.AccessControlList,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public String createRelationship(String repositoryId, PropertiesData properties,
       List<String> policies, AccessControlList addACEs, AccessControlList removeACEs,
@@ -333,10 +328,10 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#deleteContentStream(java.lang
-   * .String, org.apache.opencmis.client.provider.Holder,
-   * org.apache.opencmis.client.provider.Holder,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#deleteContentStream(java.lang
+   * .String, org.opencmis.client.provider.Holder,
+   * org.opencmis.client.provider.Holder,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public void deleteContentStream(String repositoryId, Holder<String> objectId,
       Holder<String> changeToken, ExtensionsData extension) {
@@ -349,11 +344,11 @@
     if (so == null)
       throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
 
-    if (!(so instanceof Document))
+    if (!(so instanceof Content))
       throw new CmisObjectNotFoundException("Id" + objectId
           + " does not refer to a document, but only documents can have content");
 
-    ((Document) so).setContent(null, true);
+    ((Content) so).setContent(null, true);
     log.debug("stop deleteContentStream()");
   }
 
@@ -361,9 +356,9 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#deleteObject(java.lang.String,
+   * org.opencmis.client.provider.ObjectService#deleteObject(java.lang.String,
    * java.lang.String, java.lang.Boolean,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public void deleteObject(String repositoryId, String objectId, Boolean allVersions,
       ExtensionsData extension) {
@@ -386,10 +381,10 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#deleteTree(java.lang.String,
+   * org.opencmis.client.provider.ObjectService#deleteTree(java.lang.String,
    * java.lang.String, java.lang.Boolean,
-   * org.apache.opencmis.commons.enums.UnfileObject, java.lang.Boolean,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.commons.enums.UnfileObject, java.lang.Boolean,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
       UnfileObjects unfileObject, Boolean continueOnFailure, ExtensionsData extension) {
@@ -436,8 +431,8 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#getAllowableActions(java.lang
-   * .String, java.lang.String, org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#getAllowableActions(java.lang
+   * .String, java.lang.String, org.opencmis.client.provider.ExtensionsData)
    */
   public AllowableActionsData getAllowableActions(String repositoryId, String objectId,
       ExtensionsData extension) {
@@ -458,9 +453,9 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#getContentStream(java.lang.String
+   * org.opencmis.client.provider.ObjectService#getContentStream(java.lang.String
    * , java.lang.String, java.lang.String, java.math.BigInteger,
-   * java.math.BigInteger, org.apache.opencmis.client.provider.ExtensionsData)
+   * java.math.BigInteger, org.opencmis.client.provider.ExtensionsData)
    */
   public ContentStreamData getContentStream(String repositoryId, String objectId, String streamId,
       BigInteger offset, BigInteger length, ExtensionsData extension) {
@@ -485,11 +480,11 @@
   /*
    * (non-Javadoc)
    * 
-   * @see org.apache.opencmis.client.provider.ObjectService#getObject(java.lang.String,
+   * @see org.opencmis.client.provider.ObjectService#getObject(java.lang.String,
    * java.lang.String, java.lang.String, java.lang.Boolean,
-   * org.apache.opencmis.commons.enums.IncludeRelationships, java.lang.String,
+   * org.opencmis.commons.enums.IncludeRelationships, java.lang.String,
    * java.lang.Boolean, java.lang.Boolean,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public ObjectData getObject(String repositoryId, String objectId, String filter,
       Boolean includeAllowableActions, IncludeRelationships includeRelationships,
@@ -515,11 +510,11 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#getObjectByPath(java.lang.String
+   * org.opencmis.client.provider.ObjectService#getObjectByPath(java.lang.String
    * , java.lang.String, java.lang.String, java.lang.Boolean,
-   * org.apache.opencmis.commons.enums.IncludeRelationships, java.lang.String,
+   * org.opencmis.commons.enums.IncludeRelationships, java.lang.String,
    * java.lang.Boolean, java.lang.Boolean,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public ObjectData getObjectByPath(String repositoryId, String path, String filter,
       Boolean includeAllowableActions, IncludeRelationships includeRelationships,
@@ -564,9 +559,9 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#getRenditions(java.lang.String,
+   * org.opencmis.client.provider.ObjectService#getRenditions(java.lang.String,
    * java.lang.String, java.lang.String, java.math.BigInteger,
-   * java.math.BigInteger, org.apache.opencmis.client.provider.ExtensionsData)
+   * java.math.BigInteger, org.opencmis.client.provider.ExtensionsData)
    */
   public List<RenditionData> getRenditions(String repositoryId, String objectId,
       String renditionFilter, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
@@ -581,9 +576,9 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#moveObject(java.lang.String,
-   * org.apache.opencmis.client.provider.Holder, java.lang.String, java.lang.String,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#moveObject(java.lang.String,
+   * org.opencmis.client.provider.Holder, java.lang.String, java.lang.String,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId,
       String sourceFolderId, ExtensionsData extension) {
@@ -638,11 +633,11 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#setContentStream(java.lang.String
-   * , org.apache.opencmis.client.provider.Holder, java.lang.Boolean,
-   * org.apache.opencmis.client.provider.Holder,
-   * org.apache.opencmis.client.provider.ContentStreamData,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#setContentStream(java.lang.String
+   * , org.opencmis.client.provider.Holder, java.lang.Boolean,
+   * org.opencmis.client.provider.Holder,
+   * org.opencmis.client.provider.ContentStreamData,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
       Holder<String> changeToken, ContentStreamData contentStream, ExtensionsData extension) {
@@ -662,13 +657,13 @@
       content = ((Document) so);
     else if (so instanceof DocumentVersion) {
       // something that is versionable check the proper status of the object
-      String user = RuntimeContext.getRuntimeConfigValue(ConfigConstants.USERNAME);
+      String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
       testHasProperCheckedOutStatus(so, user);
       content = (DocumentVersion) so;
     } else
       throw new IllegalArgumentException("Content cannot be set on this object (must be document or version)");
 
-    if (!overwriteFlag && content.getContent() != null)
+    if (!overwriteFlag && content.getContent(0, -1) != null)
       throw new CmisConstraintException(
           "cannot overwrite existing content if overwrite flag is not set");
 
@@ -680,10 +675,10 @@
    * (non-Javadoc)
    * 
    * @see
-   * org.apache.opencmis.client.provider.ObjectService#updateProperties(java.lang.String
-   * , org.apache.opencmis.client.provider.Holder, org.apache.opencmis.client.provider.Holder,
-   * org.apache.opencmis.client.provider.PropertiesData,
-   * org.apache.opencmis.client.provider.ExtensionsData)
+   * org.opencmis.client.provider.ObjectService#updateProperties(java.lang.String
+   * , org.opencmis.client.provider.Holder, org.opencmis.client.provider.Holder,
+   * org.opencmis.client.provider.PropertiesData,
+   * org.opencmis.client.provider.ExtensionsData)
    */
   public void updateProperties(String repositoryId, Holder<String> objectId,
       Holder<String> changeToken, PropertiesData properties, ExtensionsData extension) {
@@ -701,10 +696,10 @@
     
     // if the object is a versionable object it must be checked-out
     if (so instanceof VersionedDocument || so instanceof DocumentVersion) {
-      String user = RuntimeContext.getRuntimeConfigValue(ConfigConstants.USERNAME);
-      VersionedDocument verDoc = testIsNotCheckedOutBySomeoneElse(so, user); 
-      isCheckedOut = verDoc.isCheckedOut();
-      // so = verDoc; TODO
+      String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+      //VersionedDocument verDoc = testIsNotCheckedOutBySomeoneElse(so, user); 
+      testHasProperCheckedOutStatus(so, user);
+      isCheckedOut = true;
     }
 
     Map<String, PropertyData<?>> oldProperties = so.getProperties();
@@ -767,7 +762,7 @@
 
     if (hasUpdatedOtherProps) {
       // set user, creation date, etc.
-      String user = RuntimeContext.getRuntimeConfigValue(ConfigConstants.USERNAME);
+      String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
 
       if (user == null)
         user = "unknown";
@@ -829,9 +824,9 @@
   private ContentStreamData getContentStream(StoredObject so, String streamId, BigInteger offset,
       BigInteger length) {
 
-    Long lOffset = offset == null ? null : offset.longValue();
-    Long lLength = length == null ? null : length.longValue();
-    ContentStreamData csd = ((Content) so).getContent();
+    long lOffset = offset == null ? 0 : offset.longValue();
+    long lLength = length == null ? -1 : length.longValue();
+    ContentStreamData csd = ((Content) so).getContent(lOffset, lLength);
     return csd;
   }
 

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/VersioningServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/VersioningServiceImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/VersioningServiceImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/VersioningServiceImpl.java Mon Feb 22 08:58:39 2010
@@ -45,6 +45,7 @@
 import org.apache.opencmis.inmemory.storedobj.api.StoredObject;
 import org.apache.opencmis.inmemory.storedobj.api.VersionedDocument;
 import org.apache.opencmis.inmemory.types.PropertyCreationHelper;
+import org.apache.opencmis.server.spi.CallContext;
 
 public class VersioningServiceImpl extends AbstractServiceImpl implements VersioningService {
   
@@ -63,7 +64,7 @@
     ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
     StoredObject so = objectStore.getObjectById(objectId);
     
-    String user = RuntimeContext.getRuntimeConfigValue(ConfigConstants.USERNAME);
+    String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
     VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
 
     verDoc.cancelCheckOut(user);
@@ -78,7 +79,7 @@
     ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
     StoredObject so = objectStore.getObjectById(objectId.getValue());
 
-    String user = RuntimeContext.getRuntimeConfigValue(ConfigConstants.USERNAME);
+    String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
     VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
 
     DocumentVersion  pwc = verDoc.getPwc();
@@ -113,15 +114,15 @@
     
     if (so instanceof DocumentVersion) {
       // get document the version is contained in to c
-      content = ((DocumentVersion) so).getContent();
+      content = ((DocumentVersion) so).getContent(0, -1);
     } else {
-      content = ((VersionedDocument) so).getLatestVersion(false).getContent();
+      content = ((VersionedDocument) so).getLatestVersion(false).getContent(0, -1);
     }
     
     if (verDoc.isCheckedOut())
       throw new CmisUpdateConflictException("Document " + objectId.getValue() + " is already checked out.");
     
-    String user = RuntimeContext.getRuntimeConfigValue(ConfigConstants.USERNAME);
+    String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
     checkHasUser(user);    
     
     DocumentVersion pwc = verDoc.checkOut(content, user);
@@ -140,7 +141,7 @@
 
     VersionedDocument verDoc = (VersionedDocument)so;
     List<ObjectData> res = new ArrayList<ObjectData> ();
-    List<DocumentVersion> versions = verDoc.getAllVersions(filter);
+    List<DocumentVersion> versions = verDoc.getAllVersions();
     for (DocumentVersion version : versions) {
       ObjectData objData = getObject(repositoryId, version.getId(), filter, includeAllowableActions, extension);
       res.add(objData);

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java Mon Feb 22 08:58:39 2010
@@ -18,6 +18,9 @@
  */
 package org.apache.opencmis.inmemory.clientprovider;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.opencmis.client.provider.spi.CmisSpi;
 import org.apache.opencmis.client.provider.spi.Session;
 import org.apache.opencmis.commons.provider.AclService;
@@ -30,13 +33,13 @@
 import org.apache.opencmis.commons.provider.RepositoryInfoData;
 import org.apache.opencmis.commons.provider.RepositoryService;
 import org.apache.opencmis.commons.provider.VersioningService;
+import org.apache.opencmis.inmemory.CmisInMemoryProvider;
 import org.apache.opencmis.inmemory.ConfigConstants;
 import org.apache.opencmis.inmemory.NavigationServiceImpl;
 import org.apache.opencmis.inmemory.ObjectServiceImpl;
 import org.apache.opencmis.inmemory.RepositoryServiceImpl;
 import org.apache.opencmis.inmemory.VersioningServiceImpl;
 import org.apache.opencmis.inmemory.storedobj.api.StoreManager;
-import org.apache.opencmis.inmemory.storedobj.impl.SessionConfigReader;
 import org.apache.opencmis.inmemory.storedobj.impl.StoreManagerFactory;
 import org.apache.opencmis.inmemory.storedobj.impl.StoreManagerImpl;
 
@@ -47,16 +50,10 @@
  * @author Jens
  * 
  */
-public class CmisInMemorySpi implements CmisSpi {
+public class CmisInMemorySpi extends CmisInMemoryProvider implements CmisSpi {
 
   // private static Log log = LogFactory.getLog(CmisInMemorySpi.class);
   private Session fSession;
-  private RepositoryService fRepositoryService;
-  private NavigationService fNavigationService;
-  private ObjectService fObjectService;
-  private VersioningService fVersioningService;
-  private RepositoryInfoData fRepositoryInfo;
-  private StoreManager fStoreManager;
   
   CmisInMemorySpi(Session session) { // package visibility
     fSession = session;
@@ -196,35 +193,19 @@
   // ---- internal ----
     
   private void setup() {
-    String repositoryClassName = (String) fSession.get(ConfigConstants.REPOSITORY_CLASS);
-    if (null==repositoryClassName)
-      repositoryClassName = StoreManagerImpl.class.getName();
-    
-    fStoreManager = StoreManagerFactory.createInstance(repositoryClassName);
-    SessionConfigReader cfgReader = new SessionConfigReader(fSession);
-    fStoreManager.setConfigReader(cfgReader);
-    String repositoryId  = (String) fSession.get(ConfigConstants.REPOSITORY_ID);
+    Map<String, String> cfgParams = new HashMap<String, String>();
+    String[] configParamKeys = {ConfigConstants.REPOSITORY_CLASS, ConfigConstants.REPOSITORY_ID, 
+        ConfigConstants.TYPE_CREATOR_CLASS };
+
     
-    // first create repository
-    if (null != repositoryId ) {
-      fStoreManager.createRepository(repositoryId);
+    for (String key : configParamKeys) {
+      String value = (String) fSession.get(key);
+      if (null != value)
+        cfgParams.put(key, value);
     }
     
-    // then create/initialize type system
-    String typeCreatorClassName = (String) fSession.get(ConfigConstants.TYPE_CREATOR_CLASS);
-    fStoreManager.initTypeSystem(repositoryId, typeCreatorClassName);
-
-    // then init repository (note: loads root folder which requires cmis:folder type available)
-    fStoreManager.initRepository(repositoryId, true);
-
-    String repoInfoCreatorClassName = (String) fSession.get(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS);
-    fStoreManager.initRepositoryInfo(repositoryId, repoInfoCreatorClassName);    
-
-    // initialize services
-    fRepositoryService = new RepositoryServiceImpl(fStoreManager);
-    fNavigationService = new NavigationServiceImpl(fStoreManager);
-    fObjectService = new ObjectServiceImpl(fStoreManager);
-    fVersioningService = new VersioningServiceImpl(fStoreManager, fObjectService);    
+
+    super.setup(cfgParams);
   }
 
   

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/AtomLinkInfoProvider.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/AtomLinkInfoProvider.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/AtomLinkInfoProvider.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/AtomLinkInfoProvider.java Mon Feb 22 08:58:39 2010
@@ -27,11 +27,13 @@
 import org.apache.opencmis.commons.provider.ObjectInFolderList;
 import org.apache.opencmis.commons.provider.ObjectList;
 import org.apache.opencmis.commons.provider.ObjectParentData;
-import org.apache.opencmis.inmemory.storedobj.api.Document;
+import org.apache.opencmis.inmemory.storedobj.api.Content;
+import org.apache.opencmis.inmemory.storedobj.api.DocumentVersion;
 import org.apache.opencmis.inmemory.storedobj.api.ObjectStore;
+import org.apache.opencmis.inmemory.storedobj.api.Path;
 import org.apache.opencmis.inmemory.storedobj.api.StoreManager;
 import org.apache.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.opencmis.inmemory.storedobj.api.Path;
+import org.apache.opencmis.inmemory.storedobj.api.VersionedDocument;
 import org.apache.opencmis.server.spi.ObjectInfoHolder;
 import org.apache.opencmis.server.spi.ObjectInfoImpl;
 
@@ -67,7 +69,8 @@
     
     ObjectInfoImpl objInfo = new ObjectInfoImpl();
     ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
-    StoredObject so = objectStore.getObjectById(objectId);    
+    StoredObject so = objectStore.getObjectById(objectId);   
+
     TypeDefinition typeDef = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
     
     // Fill all setters:
@@ -79,17 +82,33 @@
     objInfo.setTypeId(so.getTypeId());
     objInfo.setBaseType(typeDef.getBaseId());
     
-    // versioning information: currently only non-versioned documents supported by in-memory provider
-    objInfo.setIsCurrentVersion (true); 
-    objInfo.setHasVersionHistory(false);
-    objInfo.setWorkingCopyId(null);
-    objInfo.setWorkingCopyOriginalId(null);
-    
-    if (so instanceof Document) {
-      Document doc = ((Document)so);
-      objInfo.setHasContent(doc.getContent() != null);
-      objInfo.setContentType(doc.getContent() != null ? doc.getContent().getMimeType() : null);
-      objInfo.setFileName(doc.getContent() != null ? doc.getContent().getFilename() : null);
+    // versioning information: 
+    if (so instanceof DocumentVersion) {
+      DocumentVersion ver = (DocumentVersion) so;
+      DocumentVersion pwc = ver.getParentDocument().getPwc();
+      objInfo.setIsCurrentVersion (ver == ver.getParentDocument().getLatestVersion(false)); 
+      objInfo.setHasVersionHistory(true);
+      objInfo.setWorkingCopyId(pwc==null ? null : pwc.getId());
+      objInfo.setWorkingCopyOriginalId(pwc==null ? null : pwc.getId());
+    } else if (so instanceof VersionedDocument) {
+      VersionedDocument doc = (VersionedDocument) so;
+      DocumentVersion pwc = doc.getPwc();
+      objInfo.setIsCurrentVersion (false); 
+      objInfo.setHasVersionHistory(true);
+      objInfo.setWorkingCopyId(pwc==null ? null : pwc.getId());
+      objInfo.setWorkingCopyOriginalId(pwc==null ? null : pwc.getId());      
+    } else { // unversioned document
+      objInfo.setIsCurrentVersion (true); 
+      objInfo.setHasVersionHistory(false);
+      objInfo.setWorkingCopyId(null);
+      objInfo.setWorkingCopyOriginalId(null);
+    }
+    
+    if (so instanceof Content) {
+      Content cont = ((Content)so);
+      objInfo.setHasContent(cont.getContent(0, -1) != null);
+      objInfo.setContentType(cont.getContent(0, -1) != null ? cont.getContent(0, -1).getMimeType() : null);
+      objInfo.setFileName(cont.getContent(0, -1) != null ? cont.getContent(0, -1).getFilename() : null);
     } else {
       objInfo.setHasContent(false);
       objInfo.setContentType(null);

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryDiscoveryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryDiscoveryService.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryDiscoveryService.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryDiscoveryService.java Mon Feb 22 08:58:39 2010
@@ -62,7 +62,7 @@
     // dummy implementation using hard coded values
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     RepositoryInfoData rep = fRepositoryService.getRepositoryInfo(repositoryId, null);
     String rootFolderId = rep.getRootFolderId();
@@ -108,7 +108,7 @@
     // dummy implementation using hard coded values
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     // use descendants of root folder as result
     RepositoryInfoData rep = fRepositoryService.getRepositoryInfo(repositoryId, null);

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryNavigationService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryNavigationService.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryNavigationService.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryNavigationService.java Mon Feb 22 08:58:39 2010
@@ -38,7 +38,6 @@
 public class InMemoryNavigationService implements CmisNavigationService  {
   StoreManager fStoreManager;
   NavigationService fNavigationService; // real implementation of the service
-  CallContextConfigReader fCfgReader = null;
   AtomLinkInfoProvider fAtomLinkProvider;
   
   InMemoryNavigationService(StoreManager storeManager) {
@@ -53,7 +52,7 @@
       BigInteger skipCount, ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
     
     ObjectList res = fNavigationService.getCheckedOutDocs(repositoryId, folderId, filter, orderBy, includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension);
     
@@ -70,7 +69,7 @@
       ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
     
     ObjectInFolderList res = fNavigationService.getChildren(repositoryId, folderId, filter, orderBy, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension);
     
@@ -87,7 +86,7 @@
       Boolean includePathSegment, ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     List<ObjectInFolderContainer> res = fNavigationService.getDescendants(repositoryId, folderId, depth, filter, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension);
     
@@ -101,7 +100,7 @@
       String filter, ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     ObjectData res = fNavigationService.getFolderParent(repositoryId, folderId, filter, extension);
 
@@ -118,7 +117,7 @@
       Boolean includePathSegment, ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     List<ObjectInFolderContainer> res = fNavigationService.getFolderTree(repositoryId, folderId, depth, filter, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension);
     
@@ -134,7 +133,7 @@
       Boolean includeRelativePathSegment, ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     List<ObjectParentData> res = fNavigationService.getObjectParents(repositoryId, objectId, filter, includeAllowableActions, includeRelationships, renditionFilter, includeRelativePathSegment, extension);
     

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryObjectService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryObjectService.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryObjectService.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryObjectService.java Mon Feb 22 08:58:39 2010
@@ -40,8 +40,13 @@
 import org.apache.opencmis.commons.provider.PropertiesData;
 import org.apache.opencmis.commons.provider.PropertyData;
 import org.apache.opencmis.commons.provider.RenditionData;
+import org.apache.opencmis.commons.provider.VersioningService;
 import org.apache.opencmis.inmemory.ObjectServiceImpl;
+import org.apache.opencmis.inmemory.VersioningServiceImpl;
+import org.apache.opencmis.inmemory.storedobj.api.DocumentVersion;
 import org.apache.opencmis.inmemory.storedobj.api.StoreManager;
+import org.apache.opencmis.inmemory.storedobj.api.StoredObject;
+import org.apache.opencmis.inmemory.storedobj.api.VersionedDocument;
 import org.apache.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
 import org.apache.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
 import org.apache.opencmis.inmemory.types.InMemoryPolicyTypeDefinition;
@@ -54,14 +59,15 @@
   private static final Log LOG = LogFactory.getLog(ServiceFactory.class.getName());
 
   StoreManager fStoreManager;
+  VersioningService fVersioningService; // real implementation of the service
   ObjectService fObjectService; // real implementation of the service
-  CallContextConfigReader fCfgReader = null;
   AtomLinkInfoProvider fAtomLinkProvider;
 
   InMemoryObjectService(StoreManager storeManager) {
     fStoreManager = storeManager;
     fObjectService = new ObjectServiceImpl(fStoreManager);
     fAtomLinkProvider = new AtomLinkInfoProvider(fStoreManager);
+    fVersioningService = new VersioningServiceImpl(fStoreManager, fObjectService);
   }
   
   ObjectService getObjectService() {
@@ -74,7 +80,7 @@
       ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.createDocument(repositoryId, properties, folderId, contentStream,
         versioningState, policies, addAces, removeAces, extension);
@@ -86,7 +92,7 @@
       ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.createDocumentFromSource(repositoryId, sourceId, properties, folderId,
         versioningState, policies, addAces, removeAces, extension);
@@ -97,7 +103,7 @@
       AccessControlList removeAces, ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.createFolder(repositoryId, properties, folderId, policies, addAces,
         removeAces, extension);
@@ -108,7 +114,7 @@
       AccessControlList removeAces, ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.createPolicy(repositoryId, properties, folderId, policies, addAces,
         removeAces, extension);
@@ -119,14 +125,14 @@
       AccessControlList removeAces, ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.createRelationship(repositoryId, properties, policies, addAces,
         removeAces, extension);
   }
 
   /* (non-Javadoc)
-   * @see org.apache.opencmis.server.spi.CmisObjectService#create(org.apache.opencmis.server.spi.CallContext, java.lang.String, org.apache.opencmis.client.provider.PropertiesData, java.lang.String, org.apache.opencmis.client.provider.ContentStreamData, org.apache.opencmis.commons.enums.VersioningState, org.apache.opencmis.client.provider.ExtensionsData, org.apache.opencmis.server.spi.ObjectInfoHolder)
+   * @see org.opencmis.server.spi.CmisObjectService#create(org.opencmis.server.spi.CallContext, java.lang.String, org.opencmis.client.provider.PropertiesData, java.lang.String, org.opencmis.client.provider.ContentStreamData, org.opencmis.commons.enums.VersioningState, org.opencmis.client.provider.ExtensionsData, org.opencmis.server.spi.ObjectInfoHolder)
    * 
    * An additional create call compared to the ObjectService from the CMIS spec.
    * This one is needed because the Atom binding in the server implementation does 
@@ -139,7 +145,7 @@
       ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
     
     if (null==properties || null==properties.getProperties())
         throw new RuntimeException("Cannot create object, without properties.");
@@ -183,7 +189,7 @@
       Holder<String> objectId, Holder<String> changeToken, ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     fObjectService.deleteContentStream(repositoryId, objectId, changeToken, extension);
   }
@@ -192,9 +198,20 @@
       Boolean allVersions, ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
-    fObjectService.deleteObject(repositoryId, objectId, allVersions, extension);
+    StoredObject so = fStoreManager.getObjectStore(repositoryId).getObjectById(objectId);
+    boolean mustCancelCheckout = false;
+    if (so instanceof DocumentVersion) {
+      mustCancelCheckout = ((DocumentVersion)so).getParentDocument().isCheckedOut();
+    } else if (so instanceof VersionedDocument) {
+      mustCancelCheckout = ((VersionedDocument)so).isCheckedOut();      
+    }
+    
+    if (mustCancelCheckout)
+      fVersioningService.cancelCheckOut(repositoryId, objectId, extension);
+    else
+      fObjectService.deleteObject(repositoryId, objectId, allVersions, extension);
   }
 
   public FailedToDeleteData deleteTree(CallContext context, String repositoryId, String folderId,
@@ -202,7 +219,7 @@
       ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.deleteTree(repositoryId, folderId, allVersions, unfileObjects,
         continueOnFailure, extension);
@@ -212,7 +229,7 @@
       String objectId, ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.getAllowableActions(repositoryId, objectId, extension);
   }
@@ -222,7 +239,7 @@
       ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.getContentStream(repositoryId, objectId, streamId, offset, length,
         extension);
@@ -234,7 +251,7 @@
       ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     ObjectData res = fObjectService.getObject(repositoryId, objectId, filter,
         includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds,
@@ -254,7 +271,7 @@
       ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     ObjectData res = fObjectService.getObjectByPath(repositoryId, path, filter,
         includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds,
@@ -271,7 +288,7 @@
       String filter, ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     PropertiesData res = fObjectService.getProperties(repositoryId, objectId, filter, extension);
 
@@ -283,7 +300,7 @@
       ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fObjectService.getRenditions(repositoryId, objectId, renditionFilter, maxItems,
         skipCount, extension);
@@ -294,7 +311,7 @@
       ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     fObjectService.moveObject(repositoryId, objectId, targetFolderId, sourceFolderId, extension);
 
@@ -315,7 +332,7 @@
       ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     fObjectService.setContentStream(repositoryId, objectId, overwriteFlag, changeToken,
         contentStream, extension);
@@ -326,7 +343,7 @@
       ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     if (null!=properties)
       fObjectService.updateProperties(repositoryId, objectId, changeToken, properties, extension);

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryService.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryService.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryService.java Mon Feb 22 08:58:39 2010
@@ -45,7 +45,7 @@
       ExtensionsData extension) {
     
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
     
     return fRepositoryService.getRepositoryInfo(repositoryId, extension);
   }
@@ -53,7 +53,7 @@
   public List<RepositoryInfoData> getRepositoryInfos(CallContext context, ExtensionsData extension) {
     
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fRepositoryService.getRepositoryInfos(extension);
   }
@@ -63,7 +63,7 @@
       ExtensionsData extension) {
     
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fRepositoryService.getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems, skipCount, extension);
   }
@@ -72,7 +72,7 @@
       String typeId, ExtensionsData extension) {
     
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fRepositoryService.getTypeDefinition(repositoryId, typeId, extension);
   }
@@ -81,7 +81,7 @@
       String typeId, BigInteger depth, Boolean includePropertyDefinitions, ExtensionsData extension) {
     
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     return fRepositoryService.getTypeDescendants(repositoryId, typeId, depth, includePropertyDefinitions, extension);
   }

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningService.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningService.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningService.java Mon Feb 22 08:58:39 2010
@@ -43,7 +43,6 @@
   StoreManager fStoreManager;
   VersioningService fVersioningService; // real implementation of the service
   ObjectService fObjectService; // real implementation of the service
-  CallContextConfigReader fCfgReader = null;
   AtomLinkInfoProvider fAtomLinkProvider;
 
   public InMemoryVersioningService(StoreManager storeManager, ObjectService objectService) {
@@ -58,7 +57,7 @@
       ExtensionsData extension) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     fVersioningService.cancelCheckOut(repositoryId, objectId, extension);
 
@@ -70,7 +69,7 @@
       AccessControlList removeAces, ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     fVersioningService.checkIn(repositoryId, objectId, major, properties, contentStream,
         checkinComment, policies, addAces, removeAces, extension);
@@ -90,14 +89,20 @@
       ExtensionsData extension, Holder<Boolean> contentCopied, ObjectInfoHolder objectInfos) {
     
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     fVersioningService.checkOut(repositoryId, objectId, extension, contentCopied);
     
     // To be able to provide all Atom links in the response we need additional information:
     fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, objectId.getValue(), objectInfos);
 
-    return null;
+    ObjectData objData = null; 
+    if (context.getBinding().equals(CallContext.BINDING_ATOMPUB)) {
+      objData = fObjectService.getObject(repositoryId, objectId.getValue(), "*", false,
+          IncludeRelationships.NONE, null, false, false, extension);      
+    }
+    
+    return objData;
   }
 
   public List<ObjectData> getAllVersions(CallContext context, String repositoryId,
@@ -105,7 +110,7 @@
       ExtensionsData extension, ObjectInfoHolder objectInfos) {
     
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     List<ObjectData> res = fVersioningService.getAllVersions(repositoryId, versionSeriesId, filter, includeAllowableActions, extension);
     
@@ -123,7 +128,7 @@
       Boolean includeAcl, ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     ObjectData res = fVersioningService.getObjectOfLatestVersion(repositoryId, versionSeriesId, major, filter,
         includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds,
@@ -139,7 +144,7 @@
       String versionSeriesId, Boolean major, String filter, ExtensionsData extension) {
     
     // Attach the CallContext to a thread local context that can be accessed from everywhere
-    RuntimeContext.getRuntimeConfig().attachCfg(new CallContextConfigReader(context));
+    RuntimeContext.getRuntimeConfig().attachCfg(context);
 
     PropertiesData res = fVersioningService.getPropertiesOfLatestVersion(repositoryId, versionSeriesId, major, filter, extension);
 

Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java Mon Feb 22 08:58:39 2010
@@ -18,7 +18,7 @@
  */
 package org.apache.opencmis.inmemory.server;
 
-import org.apache.opencmis.inmemory.ConfigMap;
+import org.apache.opencmis.server.spi.CallContext;
 
 
 /**
@@ -29,10 +29,10 @@
  *
  */
 public class RuntimeContext {
-  public static class ThreadLocalRuntimeConfig extends ThreadLocal<ConfigMap> {    
+  public static class ThreadLocalRuntimeConfig extends ThreadLocal<CallContext> {    
 
-    public void attachCfg(ConfigMap cfgMap) {
-      set(cfgMap);      
+    public void attachCfg(CallContext ctx) {
+      set(ctx);      
     }
 
     public synchronized String getConfigValue(String key) {