You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2010/04/23 23:43:58 UTC

svn commit: r937530 [3/3] - in /incubator/chemistry/opencmis/trunk: chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/api/server/ chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src...

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java Fri Apr 23 21:43:56 2010
@@ -30,7 +30,7 @@ import javax.jws.WebService;
 import javax.xml.ws.WebServiceContext;
 
 import org.apache.chemistry.opencmis.commons.api.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.api.server.CallContext;
+import org.apache.chemistry.opencmis.commons.api.server.CmisService;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryEntryType;
@@ -39,8 +39,6 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionListType;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryServicePort;
-import org.apache.chemistry.opencmis.server.spi.AbstractServicesFactory;
-import org.apache.chemistry.opencmis.server.spi.CmisRepositoryService;
 
 /**
  * CMIS Repository Service.
@@ -51,12 +49,11 @@ public class RepositoryService extends A
     WebServiceContext wsContext;
 
     public List<CmisRepositoryEntryType> getRepositories(CmisExtensionType extension) throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisRepositoryService service = factory.getRepositoryService();
-            CallContext context = createContext(wsContext, null);
+            service = getService(wsContext, null);
 
-            List<RepositoryInfo> infoDataList = service.getRepositoryInfos(context, convert(extension));
+            List<RepositoryInfo> infoDataList = service.getRepositoryInfos(convert(extension));
 
             if (infoDataList == null) {
                 return null;
@@ -74,31 +71,33 @@ public class RepositoryService extends A
             return result;
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
 
     public CmisRepositoryInfoType getRepositoryInfo(String repositoryId, CmisExtensionType extension)
             throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisRepositoryService service = factory.getRepositoryService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
-            return convert(service.getRepositoryInfo(context, repositoryId, convert(extension)));
+            return convert(service.getRepositoryInfo(repositoryId, convert(extension)));
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
 
     public CmisTypeDefinitionListType getTypeChildren(String repositoryId, String typeId,
             Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount, CmisExtensionType extension)
             throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisRepositoryService service = factory.getRepositoryService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
-            return convert(service.getTypeChildren(context, repositoryId, typeId, includePropertyDefinitions, maxItems,
+            return convert(service.getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems,
                     skipCount, convert(extension)));
         } catch (Exception e) {
             throw convertException(e);
@@ -107,32 +106,33 @@ public class RepositoryService extends A
 
     public CmisTypeDefinitionType getTypeDefinition(String repositoryId, String typeId, CmisExtensionType extension)
             throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisRepositoryService service = factory.getRepositoryService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
-            return convert(service.getTypeDefinition(context, repositoryId, typeId, convert(extension)));
+            return convert(service.getTypeDefinition(repositoryId, typeId, convert(extension)));
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
 
     public List<CmisTypeContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
             Boolean includePropertyDefinitions, CmisExtensionType extension) throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisRepositoryService service = factory.getRepositoryService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
             List<CmisTypeContainer> result = new ArrayList<CmisTypeContainer>();
-            convertTypeContainerList(service.getTypeDescendants(context, repositoryId, typeId, depth,
+            convertTypeContainerList(service.getTypeDescendants(repositoryId, typeId, depth,
                     includePropertyDefinitions, convert(extension)), result);
 
             return result;
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
-
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/VersioningService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/VersioningService.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/VersioningService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/VersioningService.java Fri Apr 23 21:43:56 2010
@@ -34,7 +34,7 @@ import javax.xml.ws.WebServiceContext;
 
 import org.apache.chemistry.opencmis.commons.api.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.api.ObjectData;
-import org.apache.chemistry.opencmis.commons.api.server.CallContext;
+import org.apache.chemistry.opencmis.commons.api.server.CmisService;
 import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisAccessControlListType;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisContentStreamType;
@@ -44,8 +44,6 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisPropertiesType;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.VersioningServicePort;
-import org.apache.chemistry.opencmis.server.spi.AbstractServicesFactory;
-import org.apache.chemistry.opencmis.server.spi.CmisVersioningService;
 
 /**
  * CMIS Versioning Service.
@@ -57,18 +55,19 @@ public class VersioningService extends A
 
     public void cancelCheckOut(String repositoryId, String objectId, Holder<CmisExtensionType> extension)
             throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisVersioningService service = factory.getVersioningService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
             ExtensionsData extData = convertExtensionHolder(extension);
 
-            service.cancelCheckOut(context, repositoryId, objectId, extData);
+            service.cancelCheckOut(repositoryId, objectId, extData);
 
             setExtensionValues(extData, extension);
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
 
@@ -76,36 +75,36 @@ public class VersioningService extends A
             CmisContentStreamType contentStream, String checkinComment, List<String> policies,
             CmisAccessControlListType addAces, CmisAccessControlListType removeAces, Holder<CmisExtensionType> extension)
             throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisVersioningService service = factory.getVersioningService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
             org.apache.chemistry.opencmis.commons.api.Holder<String> objectIdHolder = convertHolder(objectId);
             ExtensionsData extData = convertExtensionHolder(extension);
 
-            service.checkIn(context, repositoryId, objectIdHolder, major, convert(properties), convert(contentStream),
-                    checkinComment, policies, convert(addAces, null), convert(removeAces, null), extData, null);
+            service.checkIn(repositoryId, objectIdHolder, major, convert(properties), convert(contentStream),
+                    checkinComment, policies, convert(addAces, null), convert(removeAces, null), extData);
 
             setHolderValue(objectIdHolder, objectId);
             setExtensionValues(extData, extension);
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
 
     public void checkOut(String repositoryId, Holder<String> objectId, Holder<CmisExtensionType> extension,
             Holder<Boolean> contentCopied) throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisVersioningService service = factory.getVersioningService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
             org.apache.chemistry.opencmis.commons.api.Holder<String> objectIdHolder = convertHolder(objectId);
             org.apache.chemistry.opencmis.commons.api.Holder<Boolean> contentCopiedHolder = new org.apache.chemistry.opencmis.commons.api.Holder<Boolean>();
             ExtensionsData extData = convertExtensionHolder(extension);
 
-            service.checkOut(context, repositoryId, objectIdHolder, extData, contentCopiedHolder, null);
+            service.checkOut(repositoryId, objectIdHolder, extData, contentCopiedHolder);
 
             if (contentCopied != null) {
                 contentCopied.value = contentCopiedHolder.getValue();
@@ -115,18 +114,19 @@ public class VersioningService extends A
             setExtensionValues(extData, extension);
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
 
     public List<CmisObjectType> getAllVersions(String repositoryId, String versionSeriesId, String filter,
             Boolean includeAllowableActions, CmisExtensionType extension) throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisVersioningService service = factory.getVersioningService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
-            List<ObjectData> versions = service.getAllVersions(context, repositoryId, versionSeriesId, filter,
-                    includeAllowableActions, convert(extension), null);
+            List<ObjectData> versions = service.getAllVersions(repositoryId, null, versionSeriesId, filter,
+                    includeAllowableActions, convert(extension));
 
             if (versions == null) {
                 return null;
@@ -140,6 +140,8 @@ public class VersioningService extends A
             return result;
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
 
@@ -147,31 +149,32 @@ public class VersioningService extends A
             String filter, Boolean includeAllowableActions, EnumIncludeRelationships includeRelationships,
             String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, CmisExtensionType extension)
             throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisVersioningService service = factory.getVersioningService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
-            return convert(service.getObjectOfLatestVersion(context, repositoryId, versionSeriesId, major, filter,
+            return convert(service.getObjectOfLatestVersion(repositoryId, null, versionSeriesId, major, filter,
                     includeAllowableActions, convert(IncludeRelationships.class, includeRelationships),
-                    renditionFilter, includePolicyIds, includeAcl, convert(extension), null));
+                    renditionFilter, includePolicyIds, includeAcl, convert(extension)));
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
 
     public CmisPropertiesType getPropertiesOfLatestVersion(String repositoryId, String versionSeriesId, Boolean major,
             String filter, CmisExtensionType extension) throws CmisException {
+        CmisService service = null;
         try {
-            AbstractServicesFactory factory = getServicesFactory(wsContext);
-            CmisVersioningService service = factory.getVersioningService();
-            CallContext context = createContext(wsContext, repositoryId);
+            service = getService(wsContext, repositoryId);
 
-            return convert(service.getPropertiesOfLatestVersion(context, repositoryId, versionSeriesId, major, filter,
+            return convert(service.getPropertiesOfLatestVersion(repositoryId, null, versionSeriesId, major, filter,
                     convert(extension)));
         } catch (Exception e) {
             throw convertException(e);
+        } finally {
+            closeService(service);
         }
     }
-
-}
+}
\ No newline at end of file

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepository.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepository.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepository.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareRepository.java Fri Apr 23 21:43:56 2010
@@ -69,6 +69,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.api.TypeDefinitionContainer;
 import org.apache.chemistry.opencmis.commons.api.TypeDefinitionList;
 import org.apache.chemistry.opencmis.commons.api.server.CallContext;
+import org.apache.chemistry.opencmis.commons.api.server.ObjectInfoHandler;
 import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
 import org.apache.chemistry.opencmis.commons.enums.Action;
 import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
@@ -122,16 +123,12 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisProperty;
 import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
-import org.apache.chemistry.opencmis.server.spi.ObjectInfoHolder;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 /**
  * File system back-end for CMIS server.
- * 
- * @author <a href="mailto:fmueller@opentext.com">Florian M&uuml;ller</a>
- * 
  */
 public class FileShareRepository {
 
@@ -351,7 +348,7 @@ public class FileShareRepository {
      * Create* dispatch for AtomPub.
      */
     public ObjectData create(CallContext context, Properties properties, String folderId, ContentStream contentStream,
-            VersioningState versioningState, ObjectInfoHolder objectInfos) {
+            VersioningState versioningState, ObjectInfoHandler objectInfos) {
         debug("create");
         boolean userReadOnly = checkUser(context, true);
 
@@ -370,7 +367,7 @@ public class FileShareRepository {
             throw new CmisObjectNotFoundException("Cannot create object of type '" + typeId + "'!");
         }
 
-        return compileObjectType(getFile(objectId), null, false, false, userReadOnly, objectInfos);
+        return compileObjectType(context, getFile(objectId), null, false, false, userReadOnly, objectInfos);
     }
 
     /**
@@ -635,7 +632,7 @@ public class FileShareRepository {
      * CMIS moveObject.
      */
     public ObjectData moveObject(CallContext context, Holder<String> objectId, String targetFolderId,
-            ObjectInfoHolder objectInfos) {
+            ObjectInfoHandler objectInfos) {
         debug("moveObject");
         boolean userReadOnly = checkUser(context, true);
 
@@ -670,7 +667,7 @@ public class FileShareRepository {
             }
         }
 
-        return compileObjectType(newFile, null, false, false, userReadOnly, objectInfos);
+        return compileObjectType(context, newFile, null, false, false, userReadOnly, objectInfos);
     }
 
     /**
@@ -779,7 +776,7 @@ public class FileShareRepository {
      * CMIS updateProperties.
      */
     public ObjectData updateProperties(CallContext context, Holder<String> objectId, Properties properties,
-            ObjectInfoHolder objectInfos) {
+            ObjectInfoHandler objectInfos) {
         debug("updateProperties");
         boolean userReadOnly = checkUser(context, true);
 
@@ -849,14 +846,14 @@ public class FileShareRepository {
             }
         }
 
-        return compileObjectType(newFile, null, false, false, userReadOnly, objectInfos);
+        return compileObjectType(context, newFile, null, false, false, userReadOnly, objectInfos);
     }
 
     /**
      * CMIS getObject.
      */
     public ObjectData getObject(CallContext context, String objectId, String filter, Boolean includeAllowableActions,
-            Boolean includeAcl, ObjectInfoHolder objectInfos) {
+            Boolean includeAcl, ObjectInfoHandler objectInfos) {
         debug("getObject");
         boolean userReadOnly = checkUser(context, false);
 
@@ -876,7 +873,7 @@ public class FileShareRepository {
         Set<String> filterCollection = splitFilter(filter);
 
         // gather properties
-        return compileObjectType(file, filterCollection, iaa, iacl, userReadOnly, objectInfos);
+        return compileObjectType(context, file, filterCollection, iaa, iacl, userReadOnly, objectInfos);
     }
 
     /**
@@ -949,7 +946,7 @@ public class FileShareRepository {
      */
     public ObjectInFolderList getChildren(CallContext context, String folderId, String filter,
             Boolean includeAllowableActions, Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount,
-            ObjectInfoHolder objectInfos) {
+            ObjectInfoHandler objectInfos) {
         debug("getChildren");
         boolean userReadOnly = checkUser(context, false);
 
@@ -978,8 +975,8 @@ public class FileShareRepository {
         }
 
         // set object info of the the folder
-        if (objectInfos != null) {
-            compileObjectType(folder, null, false, false, userReadOnly, objectInfos);
+        if (context.isObjectInfoRequired()) {
+            compileObjectType(context, folder, null, false, false, userReadOnly, objectInfos);
         }
 
         // prepare result
@@ -1009,7 +1006,8 @@ public class FileShareRepository {
 
             // build and add child object
             ObjectInFolderDataImpl objectInFolder = new ObjectInFolderDataImpl();
-            objectInFolder.setObject(compileObjectType(child, filterCollection, iaa, false, userReadOnly, objectInfos));
+            objectInFolder.setObject(compileObjectType(context, child, filterCollection, iaa, false, userReadOnly,
+                    objectInfos));
             if (ips) {
                 objectInFolder.setPathSegment(child.getName());
             }
@@ -1026,7 +1024,7 @@ public class FileShareRepository {
      * CMIS getDescendants.
      */
     public List<ObjectInFolderContainer> getDescendants(CallContext context, String folderId, BigInteger depth,
-            String filter, Boolean includeAllowableActions, Boolean includePathSegment, ObjectInfoHolder objectInfos,
+            String filter, Boolean includeAllowableActions, Boolean includePathSegment, ObjectInfoHandler objectInfos,
             boolean foldersOnly) {
         debug("getDescendants or getFolderTree");
         boolean userReadOnly = checkUser(context, false);
@@ -1054,13 +1052,14 @@ public class FileShareRepository {
         }
 
         // set object info of the the folder
-        if (objectInfos != null) {
-            compileObjectType(folder, null, false, false, userReadOnly, objectInfos);
+        if (context.isObjectInfoRequired()) {
+            compileObjectType(context, folder, null, false, false, userReadOnly, objectInfos);
         }
 
         // get the tree
         List<ObjectInFolderContainer> result = new ArrayList<ObjectInFolderContainer>();
-        gatherDescendants(folder, result, foldersOnly, d, filterCollection, iaa, ips, userReadOnly, objectInfos);
+        gatherDescendants(context, folder, result, foldersOnly, d, filterCollection, iaa, ips, userReadOnly,
+                objectInfos);
 
         return result;
     }
@@ -1068,7 +1067,7 @@ public class FileShareRepository {
     /**
      * CMIS getFolderParent.
      */
-    public ObjectData getFolderParent(CallContext context, String folderId, String filter, ObjectInfoHolder objectInfos) {
+    public ObjectData getFolderParent(CallContext context, String folderId, String filter, ObjectInfoHandler objectInfos) {
         List<ObjectParentData> parents = getObjectParents(context, folderId, filter, false, false, objectInfos);
 
         if (parents.size() == 0) {
@@ -1082,7 +1081,7 @@ public class FileShareRepository {
      * CMIS getObjectParents.
      */
     public List<ObjectParentData> getObjectParents(CallContext context, String objectId, String filter,
-            Boolean includeAllowableActions, Boolean includeRelativePathSegment, ObjectInfoHolder objectInfos) {
+            Boolean includeAllowableActions, Boolean includeRelativePathSegment, ObjectInfoHandler objectInfos) {
         debug("getObjectParents");
         boolean userReadOnly = checkUser(context, false);
 
@@ -1102,13 +1101,13 @@ public class FileShareRepository {
         }
 
         // set object info of the the object
-        if (objectInfos != null) {
-            compileObjectType(file, null, false, false, userReadOnly, objectInfos);
+        if (context.isObjectInfoRequired()) {
+            compileObjectType(context, file, null, false, false, userReadOnly, objectInfos);
         }
 
         // get parent folder
         File parent = file.getParentFile();
-        ObjectData object = compileObjectType(parent, filterCollection, iaa, false, userReadOnly, objectInfos);
+        ObjectData object = compileObjectType(context, parent, filterCollection, iaa, false, userReadOnly, objectInfos);
 
         ObjectParentDataImpl result = new ObjectParentDataImpl();
         result.setObject(object);
@@ -1123,7 +1122,7 @@ public class FileShareRepository {
      * CMIS getObjectByPath.
      */
     public ObjectData getObjectByPath(CallContext context, String folderPath, String filter,
-            boolean includeAllowableActions, boolean includeACL, ObjectInfoHolder objectInfos) {
+            boolean includeAllowableActions, boolean includeACL, ObjectInfoHandler objectInfos) {
         debug("getObjectByPath");
         boolean userReadOnly = checkUser(context, false);
 
@@ -1148,7 +1147,8 @@ public class FileShareRepository {
             throw new CmisObjectNotFoundException("Path doesn't exist.");
         }
 
-        return compileObjectType(file, filterCollection, includeAllowableActions, includeACL, userReadOnly, objectInfos);
+        return compileObjectType(context, file, filterCollection, includeAllowableActions, includeACL, userReadOnly,
+                objectInfos);
     }
 
     // --- helper methods ---
@@ -1156,9 +1156,9 @@ public class FileShareRepository {
     /**
      * Gather the children of a folder.
      */
-    private void gatherDescendants(File folder, List<ObjectInFolderContainer> list, boolean foldersOnly, int depth,
-            Set<String> filter, boolean includeAllowableActions, boolean includePathSegments, boolean userReadOnly,
-            ObjectInfoHolder objectInfos) {
+    private void gatherDescendants(CallContext context, File folder, List<ObjectInFolderContainer> list,
+            boolean foldersOnly, int depth, Set<String> filter, boolean includeAllowableActions,
+            boolean includePathSegments, boolean userReadOnly, ObjectInfoHandler objectInfos) {
         // iterate through children
         for (File child : folder.listFiles()) {
             // skip hidden and shadow files
@@ -1173,8 +1173,8 @@ public class FileShareRepository {
 
             // add to list
             ObjectInFolderDataImpl objectInFolder = new ObjectInFolderDataImpl();
-            objectInFolder.setObject(compileObjectType(child, filter, includeAllowableActions, false, userReadOnly,
-                    objectInfos));
+            objectInFolder.setObject(compileObjectType(context, child, filter, includeAllowableActions, false,
+                    userReadOnly, objectInfos));
             if (includePathSegments) {
                 objectInFolder.setPathSegment(child.getName());
             }
@@ -1187,7 +1187,7 @@ public class FileShareRepository {
             // move to next level
             if ((depth != 1) && child.isDirectory()) {
                 container.setChildren(new ArrayList<ObjectInFolderContainer>());
-                gatherDescendants(child, container.getChildren(), foldersOnly, depth - 1, filter,
+                gatherDescendants(context, child, container.getChildren(), foldersOnly, depth - 1, filter,
                         includeAllowableActions, includePathSegments, userReadOnly, objectInfos);
             }
         }
@@ -1276,11 +1276,12 @@ public class FileShareRepository {
     /**
      * Compiles an object type object from a file or folder.�
      */
-    private ObjectData compileObjectType(File file, Set<String> filter, boolean includeAllowableActions,
-            boolean includeAcl, boolean userReadOnly, ObjectInfoHolder objectInfos) {
+    private ObjectData compileObjectType(CallContext context, File file, Set<String> filter,
+            boolean includeAllowableActions, boolean includeAcl, boolean userReadOnly, ObjectInfoHandler objectInfos) {
         ObjectDataImpl result = new ObjectDataImpl();
+        ObjectInfoImpl objectInfo = new ObjectInfoImpl();
 
-        result.setProperties(compileProperties(file, filter, objectInfos));
+        result.setProperties(compileProperties(file, filter, objectInfo));
 
         if (includeAllowableActions) {
             result.setAllowableActions(compileAllowableActions(file, userReadOnly));
@@ -1291,13 +1292,18 @@ public class FileShareRepository {
             result.setIsExactAcl(true);
         }
 
+        if (context.isObjectInfoRequired()) {
+            objectInfo.setObject(result);
+            objectInfos.addObjectInfo(objectInfo);
+        }
+
         return result;
     }
 
     /**
      * Gathers all base properties of a file or folder.
      */
-    private Properties compileProperties(File file, Set<String> orgfilter, ObjectInfoHolder objectInfos) {
+    private Properties compileProperties(File file, Set<String> orgfilter, ObjectInfoImpl objectInfo) {
         if (file == null) {
             throw new IllegalArgumentException("File must not be null!");
         }
@@ -1312,16 +1318,44 @@ public class FileShareRepository {
 
         // find base type
         String typeId = null;
-        ObjectInfoImpl objectInfo = null;
 
         if (file.isDirectory()) {
             typeId = TypeManager.FOLDER_TYPE_ID;
-            objectInfo = new FolderInfo();
+            objectInfo.setBaseType(BaseTypeId.CMIS_FOLDER);
             objectInfo.setTypeId(typeId);
+            objectInfo.setContentType(null);
+            objectInfo.setFileName(null);
+            objectInfo.setHasAcl(true);
+            objectInfo.setHasContent(false);
+            objectInfo.setVersionSeriesId(null);
+            objectInfo.setIsCurrentVersion(true);
+            objectInfo.setRelationshipSourceIds(null);
+            objectInfo.setRelationshipTargetIds(null);
+            objectInfo.setRenditionInfos(null);
+            objectInfo.setSupportsDescendants(true);
+            objectInfo.setSupportsFolderTree(true);
+            objectInfo.setSupportsPolicies(false);
+            objectInfo.setSupportsRelationships(false);
+            objectInfo.setWorkingCopyId(null);
+            objectInfo.setWorkingCopyOriginalId(null);
         } else {
             typeId = TypeManager.DOCUMENT_TYPE_ID;
-            objectInfo = new DocumentInfo();
+            objectInfo.setBaseType(BaseTypeId.CMIS_DOCUMENT);
             objectInfo.setTypeId(typeId);
+            objectInfo.setHasAcl(true);
+            objectInfo.setHasContent(true);
+            objectInfo.setHasParent(true);
+            objectInfo.setVersionSeriesId(null);
+            objectInfo.setIsCurrentVersion(true);
+            objectInfo.setRelationshipSourceIds(null);
+            objectInfo.setRelationshipTargetIds(null);
+            objectInfo.setRenditionInfos(null);
+            objectInfo.setSupportsDescendants(false);
+            objectInfo.setSupportsFolderTree(false);
+            objectInfo.setSupportsPolicies(false);
+            objectInfo.setSupportsRelationships(false);
+            objectInfo.setWorkingCopyId(null);
+            objectInfo.setWorkingCopyOriginalId(null);
         }
 
         // let's do it
@@ -1397,10 +1431,6 @@ public class FileShareRepository {
                 }
             }
 
-            if (objectInfos != null) {
-                objectInfos.addObjectInfo(objectInfo);
-            }
-
             return result;
         } catch (Exception e) {
             if (e instanceof CmisBaseException) {

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareServiceFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareServiceFactory.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareServiceFactory.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/FileShareServiceFactory.java Fri Apr 23 21:43:56 2010
@@ -17,7 +17,6 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.impl.JaxBHelper;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
 import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
-import org.apache.chemistry.opencmis.server.spi.AbstractServicesFactory;
 import org.apache.chemistry.opencmis.server.support.CmisServiceWrapper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -35,7 +34,7 @@ public class FileShareServiceFactory ext
     private static final BigInteger DEFAULT_MAX_ITEMS_OBJECTS = BigInteger.valueOf(200);
     private static final BigInteger DEFAULT_DEPTH_OBJECTS = BigInteger.valueOf(10);
 
-    private static final Log log = LogFactory.getLog(AbstractServicesFactory.class);
+    private static final Log log = LogFactory.getLog(FileShareServiceFactory.class);
 
     private RepositoryMap repositoryMap;
     private TypeManager typeManager;
@@ -60,7 +59,7 @@ public class FileShareServiceFactory ext
 
     @Override
     public CmisService getService(CallContext context) {
-        repositoryMap.getAuthenticatedRepository(context, context.getRepositoryId());
+        repositoryMap.authenticate(context);
 
         CmisServiceWrapper<FileShareService> wrapperService = threadLocalService.get();
         if (wrapperService == null) {

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/RepositoryMap.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/RepositoryMap.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/RepositoryMap.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/java/org/apache/chemistry/opencmis/fileshare/RepositoryMap.java Fri Apr 23 21:43:56 2010
@@ -67,16 +67,13 @@ public class RepositoryMap {
     }
 
     /**
-     * Gets a repository object by id.
+     * Takes user and password from the CallContext and checks them.
      */
-    public FileShareRepository getAuthenticatedRepository(CallContext context, String repositoryId) {
+    public void authenticate(CallContext context) {
         // check user and password first
         if (!authenticate(context.getUsername(), context.getPassword())) {
             throw new CmisPermissionDeniedException();
         }
-
-        // get repository object
-        return repositoryId == null ? null : getRepository(repositoryId);
     }
 
     /**

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties Fri Apr 23 21:43:56 2010
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-class=org.apache.chemistry.opencmis.fileshare.ServicesFactory
+class=org.apache.chemistry.opencmis.fileshare.FileShareServiceFactory
 
 login.1 = test:test
 login.2 = cmisuser:password

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java Fri Apr 23 21:43:56 2010
@@ -37,7 +37,6 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
 import org.apache.chemistry.opencmis.server.spi.CmisDiscoveryService;
-import org.apache.chemistry.opencmis.server.spi.CmisRepositoryService;
 import org.apache.chemistry.opencmis.server.spi.ObjectInfoHolder;
 
 public class InMemoryDiscoveryServiceImpl implements CmisDiscoveryService {

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java Fri Apr 23 21:43:56 2010
@@ -180,6 +180,8 @@ public class InMemoryNavigationServiceIm
                     + folderId);
 
         ObjectData res = getFolderParentIntern(repositoryId, folder, filter, objectInfos);
+        if (res == null)
+            throw new CmisInvalidArgumentException("Cannot get parent of a root folder");
 
         // To be able to provide all Atom links in the response we need
         // additional information:
@@ -230,8 +232,7 @@ public class InMemoryNavigationServiceIm
         if (so instanceof Filing)
             spo = (Filing) so;
         else
-            throw new CmisInvalidArgumentException(
-                    "Can't get object parent, id does not refer to a folder or document: " + objectId);
+            return Collections.emptyList();
 
         result = getObjectParentsIntern(repositoryId, spo, filter, objectInfos);
 
@@ -386,10 +387,7 @@ public class InMemoryNavigationServiceIm
         Folder parentFolder = sop.getParent();
 
         if (null == parentFolder) {
-            if (sop instanceof Children) // a folder without a parent
-                throw new CmisInvalidArgumentException("Cannot get parent of a root folder");
-            else
-                return null; // an unfiled document
+            return null;
         }
 
         copyFilteredProperties(repositoryId, parentFolder, filter, parent);

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java Fri Apr 23 21:43:56 2010
@@ -60,11 +60,6 @@ import org.apache.chemistry.opencmis.inm
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
 import org.apache.chemistry.opencmis.inmemory.storedobj.impl.StoreManagerFactory;
 import org.apache.chemistry.opencmis.inmemory.storedobj.impl.StoreManagerImpl;
-import org.apache.chemistry.opencmis.server.support.DiscoveryServiceWrapper;
-import org.apache.chemistry.opencmis.server.support.NavigationServiceWrapper;
-import org.apache.chemistry.opencmis.server.support.ObjectServiceWrapper;
-import org.apache.chemistry.opencmis.server.support.RepositoryServiceWrapper;
-import org.apache.chemistry.opencmis.server.support.VersioningServiceWrapper;
 import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -367,8 +362,8 @@ public class InMemoryService extends Abs
     public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
             Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-        return super.query(repositoryId, statement, searchAllVersions, includeAllowableActions, includeRelationships,
-                renditionFilter, maxItems, skipCount, extension);
+        return fDisSvc.query(getCallContext(), repositoryId, statement, searchAllVersions, includeAllowableActions,
+                includeRelationships, renditionFilter, maxItems, skipCount, extension);
     }
 
     // --- multi filing service ---

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties Fri Apr 23 21:43:56 2010
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-class=org.apache.chemistry.opencmis.inmemory.server.ServiceFactory
+class=org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceFactoryImpl
 
 repository.id=dummy-rep
 repository.name=Dummy Repository

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/repository.properties
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/repository.properties?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/repository.properties (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/main/webapp/WEB-INF/classes/repository.properties Fri Apr 23 21:43:56 2010
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-class=org.apache.chemistry.opencmis.inmemory.server.ServiceFactory
+class=org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceFactoryImpl
 
 # In Memory Settings
 InMemoryServer.RepositoryId=test

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/WriteObjectVersionIT.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/WriteObjectVersionIT.java?rev=937530&r1=937529&r2=937530&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/WriteObjectVersionIT.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/WriteObjectVersionIT.java Fri Apr 23 21:43:56 2010
@@ -39,7 +39,7 @@ public class WriteObjectVersionIT extend
         DocumentType dt = (DocumentType) document.getType();
         assertNotNull(dt);
         ObjectId id = null;
-        if (dt.isVersionable()) {
+        if (dt.isVersionable() != null && dt.isVersionable().booleanValue()) {
             id = document.checkOut();
         }