You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by dc...@apache.org on 2010/02/16 17:04:07 UTC
svn commit: r910572 [22/36] - in /incubator/chemistry/trunk/opencmis: ./
_dev/ opencmis-client/ opencmis-client/opencmis-client-api/
opencmis-client/opencmis-client-api/src/
opencmis-client/opencmis-client-api/src/main/
opencmis-client/opencmis-client-...
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/NavigationService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/NavigationService.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/NavigationService.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/NavigationService.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,167 @@
+/*
+ * 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.fileshare;
+
+import java.math.BigInteger;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.impl.dataobjects.ObjectListImpl;
+import org.apache.opencmis.commons.provider.ObjectData;
+import org.apache.opencmis.commons.provider.ObjectInFolderContainer;
+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.server.spi.CallContext;
+import org.apache.opencmis.server.spi.CmisNavigationService;
+import org.apache.opencmis.server.spi.ObjectInfoHolder;
+
+/**
+ * Navigation Service.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class NavigationService implements CmisNavigationService {
+
+ private RepositoryMap fRepositoryMap;
+
+ /**
+ * Constructor.
+ */
+ public NavigationService(RepositoryMap repositoryMap) {
+ fRepositoryMap = repositoryMap;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisNavigationService#getCheckedOutDocs(org.apache.opencmis.server.spi.CallContext
+ * , 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.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectList getCheckedOutDocs(CallContext context, String repositoryId, String folderId,
+ String filter, String orderBy, Boolean includeAllowableActions,
+ IncludeRelationships includeRelationships, String renditionFilter, BigInteger maxItems,
+ BigInteger skipCount, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ fRepositoryMap.getAuthenticatedRepository(context, repositoryId);
+
+ ObjectListImpl result = new ObjectListImpl();
+ result.setHasMoreItems(false);
+ result.setNumItems(BigInteger.ZERO);
+ List<ObjectData> emptyList = Collections.emptyList();
+ result.setObjects(emptyList);
+
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisNavigationService#getChildren(org.apache.opencmis.server.spi.CallContext,
+ * 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.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectInFolderList getChildren(CallContext context, String repositoryId, String folderId,
+ String filter, String orderBy, Boolean includeAllowableActions,
+ IncludeRelationships includeRelationships, String renditionFilter,
+ Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount,
+ ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getChildren(context,
+ folderId, renditionFilter, includeAllowableActions, includePathSegment, maxItems,
+ skipCount, objectInfos);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisNavigationService#getDescendants(org.apache.opencmis.server.spi.CallContext
+ * , 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.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public List<ObjectInFolderContainer> getDescendants(CallContext context, String repositoryId,
+ String folderId, BigInteger depth, String filter, Boolean includeAllowableActions,
+ IncludeRelationships includeRelationships, String renditionFilter,
+ Boolean includePathSegment, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getDescendants(context,
+ folderId, depth, filter, includeAllowableActions, includePathSegment, objectInfos, false);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisNavigationService#getFolderParent(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, java.lang.String, java.lang.String,
+ * org.apache.opencmis.commons.api.ExtensionsData, org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData getFolderParent(CallContext context, String repositoryId, String folderId,
+ String filter, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getFolderParent(
+ context, folderId, filter, objectInfos);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisNavigationService#getFolderTree(org.apache.opencmis.server.spi.CallContext
+ * , 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.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public List<ObjectInFolderContainer> getFolderTree(CallContext context, String repositoryId,
+ String folderId, BigInteger depth, String filter, Boolean includeAllowableActions,
+ IncludeRelationships includeRelationships, String renditionFilter,
+ Boolean includePathSegment, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getDescendants(context,
+ folderId, depth, filter, includeAllowableActions, includePathSegment, objectInfos, true);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisNavigationService#getObjectParents(org.apache.opencmis.server.spi.CallContext
+ * , 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.commons.api.ExtensionsData, org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public List<ObjectParentData> getObjectParents(CallContext context, String repositoryId,
+ String objectId, String filter, Boolean includeAllowableActions,
+ IncludeRelationships includeRelationships, String renditionFilter,
+ Boolean includeRelativePathSegment, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId)
+ .getObjectParents(context, objectId, filter, includeAllowableActions,
+ includeRelativePathSegment, objectInfos);
+ }
+
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/NavigationService.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ObjectService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ObjectService.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ObjectService.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ObjectService.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,341 @@
+/*
+ * 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.fileshare;
+
+import java.math.BigInteger;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.enums.UnfileObjects;
+import org.apache.opencmis.commons.enums.VersioningState;
+import org.apache.opencmis.commons.exceptions.CmisNotSupportedException;
+import org.apache.opencmis.commons.provider.AccessControlList;
+import org.apache.opencmis.commons.provider.AllowableActionsData;
+import org.apache.opencmis.commons.provider.ContentStreamData;
+import org.apache.opencmis.commons.provider.FailedToDeleteData;
+import org.apache.opencmis.commons.provider.Holder;
+import org.apache.opencmis.commons.provider.ObjectData;
+import org.apache.opencmis.commons.provider.PropertiesData;
+import org.apache.opencmis.commons.provider.RenditionData;
+import org.apache.opencmis.server.spi.CallContext;
+import org.apache.opencmis.server.spi.CmisObjectService;
+import org.apache.opencmis.server.spi.ObjectInfoHolder;
+
+/**
+ * Object Service.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class ObjectService implements CmisObjectService {
+
+ private RepositoryMap fRepositoryMap;
+
+ /**
+ * Constructor.
+ */
+ public ObjectService(RepositoryMap repositoryMap) {
+ fRepositoryMap = repositoryMap;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CmisObjectService#create(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.PropertiesData, java.lang.String,
+ * org.apache.opencmis.commons.provider.ContentStreamData, org.apache.opencmis.commons.enums.VersioningState,
+ * java.util.List, org.apache.opencmis.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData create(CallContext context, String repositoryId, PropertiesData properties,
+ String folderId, ContentStreamData contentStream, VersioningState versioningState,
+ List<String> policies, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).create(context,
+ properties, folderId, contentStream, versioningState, objectInfos);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#createDocument(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.PropertiesData, java.lang.String,
+ * org.apache.opencmis.commons.provider.ContentStreamData, org.apache.opencmis.commons.enums.VersioningState,
+ * java.util.List, org.apache.opencmis.commons.provider.AccessControlList,
+ * org.apache.opencmis.commons.provider.AccessControlList, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public String createDocument(CallContext context, String repositoryId, PropertiesData properties,
+ String folderId, ContentStreamData contentStream, VersioningState versioningState,
+ List<String> policies, AccessControlList addAces, AccessControlList removeAces,
+ ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).createDocument(context,
+ properties, folderId, contentStream, versioningState);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#createDocumentFromSource(org.apache.opencmis.server.spi.
+ * CallContext, java.lang.String, java.lang.String, org.apache.opencmis.commons.provider.PropertiesData,
+ * java.lang.String, org.apache.opencmis.commons.enums.VersioningState, java.util.List,
+ * org.apache.opencmis.commons.provider.AccessControlList,
+ * org.apache.opencmis.commons.provider.AccessControlList, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public String createDocumentFromSource(CallContext context, String repositoryId, String sourceId,
+ PropertiesData properties, String folderId, VersioningState versioningState,
+ List<String> policies, AccessControlList addAces, AccessControlList removeAces,
+ ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId)
+ .createDocumentFromSource(context, sourceId, properties, folderId, versioningState);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#createFolder(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.PropertiesData, java.lang.String,
+ * java.util.List, org.apache.opencmis.commons.provider.AccessControlList,
+ * org.apache.opencmis.commons.provider.AccessControlList, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public String createFolder(CallContext context, String repositoryId, PropertiesData properties,
+ String folderId, List<String> policies, AccessControlList addAces,
+ AccessControlList removeAces, ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).createFolder(context,
+ properties, folderId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#createPolicy(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.PropertiesData, java.lang.String,
+ * java.util.List, org.apache.opencmis.commons.provider.AccessControlList,
+ * org.apache.opencmis.commons.provider.AccessControlList, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public String createPolicy(CallContext context, String repositoryId, PropertiesData properties,
+ String folderId, List<String> policies, AccessControlList addAces,
+ AccessControlList removeAces, ExtensionsData extension) {
+ fRepositoryMap.getAuthenticatedRepository(context, repositoryId);
+ throw new CmisNotSupportedException("createPolicy not supported!");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#createRelationship(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, org.apache.opencmis.commons.provider.PropertiesData, java.util.List,
+ * org.apache.opencmis.commons.provider.AccessControlList,
+ * org.apache.opencmis.commons.provider.AccessControlList, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public String createRelationship(CallContext context, String repositoryId,
+ PropertiesData properties, List<String> policies, AccessControlList addAces,
+ AccessControlList removeAces, ExtensionsData extension) {
+ fRepositoryMap.getAuthenticatedRepository(context, repositoryId);
+ throw new CmisNotSupportedException("createRelationship not supported!");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#deleteContentStream(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, org.apache.opencmis.commons.provider.Holder, org.apache.opencmis.commons.provider.Holder,
+ * org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public void deleteContentStream(CallContext context, String repositoryId,
+ Holder<String> objectId, Holder<String> changeToken, ExtensionsData extension) {
+ fRepositoryMap.getAuthenticatedRepository(context, repositoryId).setContentStream(context,
+ objectId, true, null);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#deleteObjectOrCancelCheckOut(org.apache.opencmis.server.
+ * spi.CallContext, java.lang.String, java.lang.String, java.lang.Boolean,
+ * org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public void deleteObjectOrCancelCheckOut(CallContext context, String repositoryId,
+ String objectId, Boolean allVersions, ExtensionsData extension) {
+ fRepositoryMap.getAuthenticatedRepository(context, repositoryId)
+ .deleteObject(context, objectId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CmisObjectService#deleteTree(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, java.lang.String, java.lang.Boolean,
+ * org.apache.opencmis.commons.enums.UnfileObjects, java.lang.Boolean,
+ * org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public FailedToDeleteData deleteTree(CallContext context, String repositoryId, String folderId,
+ Boolean allVersions, UnfileObjects unfileObjects, Boolean continueOnFailure,
+ ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).deleteTree(context,
+ folderId, continueOnFailure);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#getAllowableActions(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, java.lang.String, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public AllowableActionsData getAllowableActions(CallContext context, String repositoryId,
+ String objectId, ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getAllowableActions(
+ context, objectId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#getContentStream(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, java.lang.String, java.lang.String, java.math.BigInteger,
+ * java.math.BigInteger, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public ContentStreamData getContentStream(CallContext context, String repositoryId,
+ String objectId, String streamId, BigInteger offset, BigInteger length,
+ ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getContentStream(
+ context, objectId, offset, length);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CmisObjectService#getObject(org.apache.opencmis.server.spi.CallContext,
+ * 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.lang.Boolean, org.apache.opencmis.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData getObject(CallContext context, String repositoryId, String objectId,
+ String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
+ String renditionFilter, Boolean includePolicyIds, Boolean includeAcl,
+ ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getObject(context,
+ objectId, filter, includeAllowableActions, includeAcl, objectInfos);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#getObjectByPath(org.apache.opencmis.server.spi.CallContext,
+ * 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.lang.Boolean, org.apache.opencmis.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData getObjectByPath(CallContext context, String repositoryId, String path,
+ String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
+ String renditionFilter, Boolean includePolicyIds, Boolean includeAcl,
+ ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getObjectByPath(
+ context, path, filter, includeAllowableActions, includeAcl, objectInfos);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#getProperties(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, java.lang.String, java.lang.String, org.apache.opencmis.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public PropertiesData getProperties(CallContext context, String repositoryId, String objectId,
+ String filter, ExtensionsData extension) {
+ ObjectData object = fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getObject(
+ context, objectId, filter, false, false, null);
+ return object.getProperties();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#getRenditions(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, java.lang.String, java.lang.String, java.math.BigInteger,
+ * java.math.BigInteger, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public List<RenditionData> getRenditions(CallContext context, String repositoryId,
+ String objectId, String renditionFilter, BigInteger maxItems, BigInteger skipCount,
+ ExtensionsData extension) {
+ fRepositoryMap.getAuthenticatedRepository(context, repositoryId);
+ return Collections.emptyList();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CmisObjectService#moveObject(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.Holder, java.lang.String, java.lang.String,
+ * org.apache.opencmis.commons.api.ExtensionsData, org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData moveObject(CallContext context, String repositoryId, Holder<String> objectId,
+ String targetFolderId, String sourceFolderId, ExtensionsData extension,
+ ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).moveObject(context,
+ objectId, targetFolderId, objectInfos);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#setContentStream(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.Holder, java.lang.Boolean,
+ * org.apache.opencmis.commons.provider.Holder, org.apache.opencmis.commons.provider.ContentStreamData,
+ * org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public void setContentStream(CallContext context, String repositoryId, Holder<String> objectId,
+ Boolean overwriteFlag, Holder<String> changeToken, ContentStreamData contentStream,
+ ExtensionsData extension) {
+ fRepositoryMap.getAuthenticatedRepository(context, repositoryId).setContentStream(context,
+ objectId, overwriteFlag, contentStream);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisObjectService#updateProperties(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.Holder, org.apache.opencmis.commons.provider.Holder,
+ * org.apache.opencmis.commons.provider.PropertiesData, org.apache.opencmis.commons.provider.AccessControlList,
+ * org.apache.opencmis.commons.api.ExtensionsData, org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData updateProperties(CallContext context, String repositoryId,
+ Holder<String> objectId, Holder<String> changeToken, PropertiesData properties,
+ AccessControlList acl, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).updateProperties(
+ context, objectId, properties, objectInfos);
+ }
+
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ObjectService.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryMap.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryMap.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryMap.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryMap.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,111 @@
+/*
+ * 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.fileshare;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import org.apache.opencmis.commons.exceptions.CmisPermissionDeniedException;
+import org.apache.opencmis.server.spi.CallContext;
+
+/**
+ * Repository map.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class RepositoryMap {
+
+ private Map<String, FileShareRepository> fMap;
+ private Map<String, String> fLogins;
+
+ public RepositoryMap() {
+ fMap = new HashMap<String, FileShareRepository>();
+ fLogins = new HashMap<String, String>();
+ }
+
+ /**
+ * Adds a repository object.
+ */
+ public void addRepository(FileShareRepository fsr) {
+ if ((fsr == null) || (fsr.getRepositoryId() == null)) {
+ return;
+ }
+
+ fMap.put(fsr.getRepositoryId(), fsr);
+ }
+
+ /**
+ * Gets a repository object by id.
+ */
+ public FileShareRepository getRepository(String repositoryId) {
+ // get repository object
+ FileShareRepository result = fMap.get(repositoryId);
+ if (result == null) {
+ throw new CmisObjectNotFoundException("Unknown repository '" + repositoryId + "'!");
+ }
+
+ return result;
+ }
+
+ /**
+ * Gets a repository object by id.
+ */
+ public FileShareRepository getAuthenticatedRepository(CallContext context, String repositoryId) {
+ // check user and password first
+ if (!authenticate(context.getUsername(), context.getPassword())) {
+ throw new CmisPermissionDeniedException();
+ }
+
+ // get repository object
+ return getRepository(repositoryId);
+ }
+
+ /**
+ * Returns all repository objects.
+ */
+ public Collection<FileShareRepository> getRepositories() {
+ return fMap.values();
+ }
+
+ /**
+ * Adds a login.
+ */
+ public void addLogin(String username, String password) {
+ if ((username == null) || (password == null)) {
+ return;
+ }
+
+ fLogins.put(username.trim(), password);
+ }
+
+ /**
+ * Authenticates a user against the configured logins.
+ */
+ private boolean authenticate(String username, String password) {
+ String pwd = fLogins.get(username);
+ if (pwd == null) {
+ return false;
+ }
+
+ return pwd.equals(password);
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryService.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryService.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryService.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,119 @@
+/*
+ * 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.fileshare;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.api.TypeDefinition;
+import org.apache.opencmis.commons.api.TypeDefinitionContainer;
+import org.apache.opencmis.commons.api.TypeDefinitionList;
+import org.apache.opencmis.commons.provider.RepositoryInfoData;
+import org.apache.opencmis.server.spi.CallContext;
+import org.apache.opencmis.server.spi.CmisRepositoryService;
+
+/**
+ * Repository Service.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class RepositoryService implements CmisRepositoryService {
+
+ private RepositoryMap fRepositoryMap;
+
+ /**
+ * Constructor.
+ */
+ public RepositoryService(RepositoryMap repositoryMap) {
+ fRepositoryMap = repositoryMap;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisRepositoryService#getRepositoryInfo(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public RepositoryInfoData getRepositoryInfo(CallContext context, String repositoryId,
+ ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getRepositoryInfo(
+ context);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.apache.opencmis.server.spi.CmisRepositoryService#getRepositoryInfos(org.apache.opencmis.server.spi.
+ * CallContext, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public List<RepositoryInfoData> getRepositoryInfos(CallContext context, ExtensionsData extension) {
+ List<RepositoryInfoData> result = new ArrayList<RepositoryInfoData>();
+
+ for (FileShareRepository fsr : fRepositoryMap.getRepositories()) {
+ result.add(fsr.getRepositoryInfo(context));
+ }
+
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisRepositoryService#getTypeChildren(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, java.lang.String, java.lang.Boolean, java.math.BigInteger,
+ * java.math.BigInteger, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public TypeDefinitionList getTypeChildren(CallContext context, String repositoryId,
+ String typeId, Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount,
+ ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getTypesChildren(
+ context, typeId, includePropertyDefinitions, maxItems, skipCount);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisRepositoryService#getTypeDefinition(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, java.lang.String, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public TypeDefinition getTypeDefinition(CallContext context, String repositoryId, String typeId,
+ ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getTypeDefinition(
+ context, typeId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.apache.opencmis.server.spi.CmisRepositoryService#getTypeDescendants(org.apache.opencmis.server.spi.
+ * CallContext, java.lang.String, java.lang.String, java.math.BigInteger, java.lang.Boolean,
+ * org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public List<TypeDefinitionContainer> getTypeDescendants(CallContext context, String repositoryId,
+ String typeId, BigInteger depth, Boolean includePropertyDefinitions, ExtensionsData extension) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getTypesDescendants(
+ context, typeId, depth, includePropertyDefinitions);
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/RepositoryService.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ServicesFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ServicesFactory.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ServicesFactory.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ServicesFactory.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,250 @@
+/*
+ * 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.fileshare;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Unmarshaller;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.opencmis.commons.api.TypeDefinition;
+import org.apache.opencmis.commons.impl.Converter;
+import org.apache.opencmis.commons.impl.JaxBHelper;
+import org.apache.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
+import org.apache.opencmis.server.spi.AbstractServicesFactory;
+import org.apache.opencmis.server.spi.CmisAclService;
+import org.apache.opencmis.server.spi.CmisNavigationService;
+import org.apache.opencmis.server.spi.CmisObjectService;
+import org.apache.opencmis.server.spi.CmisRepositoryService;
+import org.apache.opencmis.server.spi.CmisVersioningService;
+
+/**
+ * Services Factory for file share back-end.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class ServicesFactory extends AbstractServicesFactory {
+
+ private static final String PREFIX_LOGIN = "login.";
+ private static final String PREFIX_REPOSITORY = "repository.";
+ private static final String PREFIX_TYPE = "type.";
+ private static final String SUFFIX_READWRITE = ".readwrite";
+ private static final String SUFFIX_READONLY = ".readonly";
+
+ private static final Log log = LogFactory.getLog(AbstractServicesFactory.class);
+
+ private RepositoryMap fRepositoryMap;
+ private TypeManager fTypeManager;
+
+ private RepositoryService fRepositoryService;
+ private NavigationService fNavigationService;
+ private ObjectService fObjectService;
+ private VersioningService fVersioningService;
+ private AclService fAclService;
+
+ public ServicesFactory() {
+ }
+
+ @Override
+ public void init(Map<String, String> parameters) {
+ fRepositoryMap = new RepositoryMap();
+ fTypeManager = new TypeManager();
+
+ readConfiguration(parameters);
+
+ fRepositoryService = new RepositoryService(fRepositoryMap);
+ fNavigationService = new NavigationService(fRepositoryMap);
+ fObjectService = new ObjectService(fRepositoryMap);
+ fVersioningService = new VersioningService(fRepositoryMap);
+ fAclService = new AclService(fRepositoryMap);
+ }
+
+ @Override
+ public CmisRepositoryService getRepositoryService() {
+ return fRepositoryService;
+ }
+
+ @Override
+ public CmisNavigationService getNavigationService() {
+ return fNavigationService;
+ }
+
+ @Override
+ public CmisObjectService getObjectService() {
+ return fObjectService;
+ }
+
+ @Override
+ public CmisVersioningService getVersioningService() {
+ return fVersioningService;
+ }
+
+ @Override
+ public CmisAclService getAclService() {
+ return fAclService;
+ }
+
+ // ---- helpers ----
+
+ private void readConfiguration(Map<String, String> parameters) {
+ List<String> keys = new ArrayList<String>(parameters.keySet());
+ Collections.sort(keys);
+
+ for (String key : keys) {
+ if (key.startsWith(PREFIX_LOGIN)) {
+ // get logins
+ String usernameAndPassword = replaceSystemProperties(parameters.get(key));
+ if (usernameAndPassword == null) {
+ continue;
+ }
+
+ String username = usernameAndPassword;
+ String password = "";
+
+ int x = usernameAndPassword.indexOf(':');
+ if (x > -1) {
+ username = usernameAndPassword.substring(0, x);
+ password = usernameAndPassword.substring(x + 1);
+ }
+
+ fRepositoryMap.addLogin(username, password);
+
+ log.info("Added login '" + username + "'.");
+ }
+ else if (key.startsWith(PREFIX_TYPE)) {
+ // load type definition
+ TypeDefinition type = loadType(replaceSystemProperties(parameters.get(key)));
+ if (type != null) {
+ fTypeManager.addType(type);
+ }
+ }
+ else if (key.startsWith(PREFIX_REPOSITORY)) {
+ // configure repositories
+ String repositoryId = key.substring(PREFIX_REPOSITORY.length()).trim();
+ int x = repositoryId.lastIndexOf('.');
+ if (x > 0) {
+ repositoryId = repositoryId.substring(0, x);
+ }
+
+ if (repositoryId.length() == 0) {
+ throw new IllegalArgumentException("No repository id!");
+ }
+
+ if (key.endsWith(SUFFIX_READWRITE)) {
+ // read-write users
+ FileShareRepository fsr = fRepositoryMap.getRepository(repositoryId);
+ for (String user : split(parameters.get(key))) {
+ fsr.addUser(replaceSystemProperties(user), false);
+ }
+ }
+ else if (key.endsWith(SUFFIX_READONLY)) {
+ // read-only users
+ FileShareRepository fsr = fRepositoryMap.getRepository(repositoryId);
+ for (String user : split(parameters.get(key))) {
+ fsr.addUser(replaceSystemProperties(user), true);
+ }
+ }
+ else {
+ // new repository
+ String root = replaceSystemProperties(parameters.get(key));
+ FileShareRepository fsr = new FileShareRepository(repositoryId, root, fTypeManager);
+
+ fRepositoryMap.addRepository(fsr);
+
+ log.info("Added repository '" + fsr.getRepositoryId() + "': " + root);
+ }
+ }
+ }
+ }
+
+ private List<String> split(String csl) {
+ if (csl == null) {
+ return Collections.emptyList();
+ }
+
+ List<String> result = new ArrayList<String>();
+ for (String s : csl.split(",")) {
+ result.add(s.trim());
+ }
+
+ return result;
+ }
+
+ private String replaceSystemProperties(String s) {
+ if (s == null) {
+ return null;
+ }
+
+ StringBuilder result = new StringBuilder();
+ StringBuilder property = null;
+ boolean inProperty = false;
+
+ for (int i = 0; i < s.length(); i++) {
+ char c = s.charAt(i);
+
+ if (inProperty) {
+ if (c == '}') {
+ String value = System.getProperty(property.toString());
+ if (value != null) {
+ result.append(value);
+ }
+ inProperty = false;
+ }
+ else {
+ property.append(c);
+ }
+ }
+ else {
+ if (c == '{') {
+ property = new StringBuilder();
+ inProperty = true;
+ }
+ else {
+ result.append(c);
+ }
+ }
+ }
+
+ return result.toString();
+ }
+
+ @SuppressWarnings("unchecked")
+ private TypeDefinition loadType(String filename) {
+ TypeDefinition result = null;
+
+ try {
+ Unmarshaller u = JaxBHelper.createUnmarshaller();
+ JAXBElement<CmisTypeDefinitionType> type = (JAXBElement<CmisTypeDefinitionType>) u
+ .unmarshal(new File(filename));
+ result = Converter.convert(type.getValue());
+ }
+ catch (Exception e) {
+ log.info("Could not load type: '" + filename + "'", e);
+ }
+
+ return result;
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/ServicesFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/TypeManager.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/TypeManager.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/TypeManager.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/TypeManager.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,562 @@
+/*
+ * 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.fileshare;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.api.PropertyDefinition;
+import org.apache.opencmis.commons.api.TypeDefinition;
+import org.apache.opencmis.commons.api.TypeDefinitionContainer;
+import org.apache.opencmis.commons.api.TypeDefinitionList;
+import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
+import org.apache.opencmis.commons.enums.Cardinality;
+import org.apache.opencmis.commons.enums.ContentStreamAllowed;
+import org.apache.opencmis.commons.enums.PropertyType;
+import org.apache.opencmis.commons.enums.Updatability;
+import org.apache.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import org.apache.opencmis.commons.impl.Converter;
+import org.apache.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
+import org.apache.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
+import org.apache.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
+import org.apache.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
+import org.apache.opencmis.server.spi.CallContext;
+
+/**
+ * Type Manager.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class TypeManager {
+ public final static String DOCUMENT_TYPE_ID = "cmis:document";
+ public final static String FOLDER_TYPE_ID = "cmis:folder";
+ public final static String RELATIONSHIP_TYPE_ID = "cmis:relationship";
+ public final static String POLICY_TYPE_ID = "cmis:policy";
+
+ private static final String NAMESPACE = "http://opencmis.org/fileshare";
+
+ private static final Log log = LogFactory.getLog(TypeManager.class);
+
+ private Map<String, TypeDefinitionContainerImpl> fTypes;
+ private List<TypeDefinitionContainer> fTypesList;
+
+ public TypeManager() {
+ setup();
+ }
+
+ /**
+ * Creates the base types.
+ */
+ private void setup() {
+ fTypes = new HashMap<String, TypeDefinitionContainerImpl>();
+ fTypesList = new ArrayList<TypeDefinitionContainer>();
+
+ // folder type
+ FolderTypeDefinitionImpl folderType = new FolderTypeDefinitionImpl();
+ folderType.setBaseId(BaseObjectTypeIds.CMIS_FOLDER);
+ folderType.setIsControllableAcl(false);
+ folderType.setIsControllablePolicy(false);
+ folderType.setIsCreatable(true);
+ folderType.setDescription("Folder");
+ folderType.setDisplayName("Folder");
+ folderType.setIsFileable(true);
+ folderType.setIsFulltextIndexed(false);
+ folderType.setIsIncludedInSupertypeQuery(true);
+ folderType.setLocalName("Folder");
+ folderType.setLocalNamespace(NAMESPACE);
+ folderType.setIsQueryable(false);
+ folderType.setQueryName("cmis:folder");
+ folderType.setId(FOLDER_TYPE_ID);
+
+ addBasePropertyDefinitions(folderType);
+ addFolderPropertyDefinitions(folderType);
+
+ addTypeInteral(folderType);
+
+ // document type
+ DocumentTypeDefinitionImpl documentType = new DocumentTypeDefinitionImpl();
+ documentType.setBaseId(BaseObjectTypeIds.CMIS_DOCUMENT);
+ documentType.setIsControllableAcl(false);
+ documentType.setIsControllablePolicy(false);
+ documentType.setIsCreatable(true);
+ documentType.setDescription("Document");
+ documentType.setDisplayName("Document");
+ documentType.setIsFileable(true);
+ documentType.setIsFulltextIndexed(false);
+ documentType.setIsIncludedInSupertypeQuery(true);
+ documentType.setLocalName("Document");
+ documentType.setLocalNamespace(NAMESPACE);
+ documentType.setIsQueryable(false);
+ documentType.setQueryName("cmis:document");
+ documentType.setId(DOCUMENT_TYPE_ID);
+
+ documentType.setIsVersionable(false);
+ documentType.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
+
+ addBasePropertyDefinitions(documentType);
+ addDocumentPropertyDefinitions(documentType);
+
+ addTypeInteral(documentType);
+
+ // relationship types
+ RelationshipTypeDefinitionImpl relationshipType = new RelationshipTypeDefinitionImpl();
+ relationshipType.setBaseId(BaseObjectTypeIds.CMIS_RELATIONSHIP);
+ relationshipType.setIsControllableAcl(false);
+ relationshipType.setIsControllablePolicy(false);
+ relationshipType.setIsCreatable(false);
+ relationshipType.setDescription("Relationship");
+ relationshipType.setDisplayName("Relationship");
+ relationshipType.setIsFileable(false);
+ relationshipType.setIsIncludedInSupertypeQuery(true);
+ relationshipType.setLocalName("Relationship");
+ relationshipType.setLocalNamespace(NAMESPACE);
+ relationshipType.setIsQueryable(false);
+ relationshipType.setQueryName("cmis:relationship");
+ relationshipType.setId(RELATIONSHIP_TYPE_ID);
+
+ addBasePropertyDefinitions(relationshipType);
+
+ // not supported - don't expose it
+ // addTypeInteral(relationshipType);
+
+ // policy type
+ PolicyTypeDefinitionImpl policyType = new PolicyTypeDefinitionImpl();
+ policyType.setBaseId(BaseObjectTypeIds.CMIS_POLICY);
+ policyType.setIsControllableAcl(false);
+ policyType.setIsControllablePolicy(false);
+ policyType.setIsCreatable(false);
+ policyType.setDescription("Policy");
+ policyType.setDisplayName("Policy");
+ policyType.setIsFileable(false);
+ policyType.setIsIncludedInSupertypeQuery(true);
+ policyType.setLocalName("Policy");
+ policyType.setLocalNamespace(NAMESPACE);
+ policyType.setIsQueryable(false);
+ policyType.setQueryName("cmis:policy");
+ policyType.setId(POLICY_TYPE_ID);
+
+ addBasePropertyDefinitions(policyType);
+
+ // not supported - don't expose it
+ // addTypeInteral(policyType);
+ }
+
+ private void addBasePropertyDefinitions(AbstractTypeDefinition type) {
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_BASE_TYPE_ID, "Base Type Id",
+ "Base Type Id", PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, false, true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_OBJECT_ID, "Object Id", "Object Id",
+ PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, false, true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_OBJECT_TYPE_ID, "Type Id", "Type Id",
+ PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, false, true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_NAME, "Name", "Name",
+ PropertyType.STRING, Cardinality.SINGLE, Updatability.READWRITE, false, true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_CREATED_BY, "Created By",
+ "Created By", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_CREATION_DATE, "Creation Date",
+ "Creation Date", PropertyType.DATETIME, Cardinality.SINGLE, Updatability.READONLY, false,
+ true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_LAST_MODIFIED_BY, "Last Modified By",
+ "Last Modified By", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false,
+ true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_LAST_MODIFICATION_DATE,
+ "Last Modification Date", "Last Modification Date", PropertyType.DATETIME,
+ Cardinality.SINGLE, Updatability.READONLY, false, true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_CHANGE_TOKEN, "Change Token",
+ "Change Token", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false,
+ false));
+ }
+
+ private void addFolderPropertyDefinitions(FolderTypeDefinitionImpl type) {
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_PARENT_ID, "Parent Id", "Parent Id",
+ PropertyType.ID, Cardinality.SINGLE, Updatability.READONLY, false, false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_ALLOWED_CHILD_OBJECT_TYPE_IDS,
+ "Allowed Child Object Type Ids", "Allowed Child Object Type Ids", PropertyType.ID,
+ Cardinality.MULTI, Updatability.READONLY, false, false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_PATH, "Path", "Path",
+ PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, false));
+ }
+
+ private void addDocumentPropertyDefinitions(DocumentTypeDefinitionImpl type) {
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_IS_IMMUTABLE, "Is Immutable",
+ "Is Immutable", PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, false,
+ false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_IS_LATEST_VERSION,
+ "Is Latest Version", "Is Latest Version", PropertyType.BOOLEAN, Cardinality.SINGLE,
+ Updatability.READONLY, false, false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_IS_MAJOR_VERSION, "Is Major Version",
+ "Is Major Version", PropertyType.BOOLEAN, Cardinality.SINGLE, Updatability.READONLY, false,
+ false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION,
+ "Is Latest Major Version", "Is Latest Major Version", PropertyType.BOOLEAN,
+ Cardinality.SINGLE, Updatability.READONLY, false, false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_VERSION_LABEL, "Version Label",
+ "Version Label", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false,
+ true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_VERSION_SERIES_ID,
+ "Version Series Id", "Version Series Id", PropertyType.ID, Cardinality.SINGLE,
+ Updatability.READONLY, false, true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT,
+ "Is Verison Series Checked Out", "Is Verison Series Checked Out", PropertyType.BOOLEAN,
+ Cardinality.SINGLE, Updatability.READONLY, false, true));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID,
+ "Version Series Checked Out Id", "Version Series Checked Out Id", PropertyType.ID,
+ Cardinality.SINGLE, Updatability.READONLY, false, false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_CHECKIN_COMMENT, "Checkin Comment",
+ "Checkin Comment", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false,
+ false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_CONTENT_STREAM_LENGTH,
+ "Content Stream Length", "Content Stream Length", PropertyType.INTEGER, Cardinality.SINGLE,
+ Updatability.READONLY, false, false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_CONTENT_STREAM_MIME_TYPE,
+ "MIME Type", "MIME Type", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY,
+ false, false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_CONTENT_STREAM_FILE_NAME, "Filename",
+ "Filename", PropertyType.STRING, Cardinality.SINGLE, Updatability.READONLY, false, false));
+
+ type.addPropertyDefinition(createPropDef(PropertyIds.CMIS_CONTENT_STREAM_ID,
+ "Content Stream Id", "Content Stream Id", PropertyType.ID, Cardinality.SINGLE,
+ Updatability.READONLY, false, false));
+ }
+
+ /**
+ * Creates a property definition object.
+ */
+ private PropertyDefinition<?> createPropDef(String id, String displayName, String description,
+ PropertyType datatype, Cardinality cardinality, Updatability updateability,
+ boolean inherited, boolean required) {
+ AbstractPropertyDefinition<?> result = null;
+
+ switch (datatype) {
+ case BOOLEAN:
+ result = new PropertyBooleanDefinitionImpl();
+ break;
+ case DATETIME:
+ result = new PropertyDateTimeDefinitionImpl();
+ break;
+ case DECIMAL:
+ result = new PropertyDecimalDefinitionImpl();
+ break;
+ case HTML:
+ result = new PropertyHtmlDefinitionImpl();
+ break;
+ case ID:
+ result = new PropertyIdDefinitionImpl();
+ break;
+ case INTEGER:
+ result = new PropertyIntegerDefinitionImpl();
+ break;
+ case STRING:
+ result = new PropertyStringDefinitionImpl();
+ break;
+ case URI:
+ result = new PropertyUriDefinitionImpl();
+ break;
+ default:
+ throw new RuntimeException("Unknown datatype! Spec change?");
+ }
+
+ result.setId(id);
+ result.setLocalName(id);
+ result.setDisplayName(displayName);
+ result.setDescription(description);
+ result.setPropertyType(datatype);
+ result.setCardinality(cardinality);
+ result.setUpdatability(updateability);
+ result.setIsInherited(inherited);
+ result.setIsRequired(required);
+ result.setIsQueryable(false);
+ result.setQueryName(id);
+
+ return result;
+ }
+
+ /**
+ * Adds a type to collection with inheriting base type properties.
+ */
+ public boolean addType(TypeDefinition type) {
+ if (type == null) {
+ return false;
+ }
+
+ if (type.getBaseId() == null) {
+ return false;
+ }
+
+ // find base type
+ TypeDefinition baseType = null;
+ if (type.getBaseId() == BaseObjectTypeIds.CMIS_DOCUMENT) {
+ baseType = copyTypeDefintion(fTypes.get(DOCUMENT_TYPE_ID).getTypeDefinition());
+ }
+ else if (type.getBaseId() == BaseObjectTypeIds.CMIS_FOLDER) {
+ baseType = copyTypeDefintion(fTypes.get(FOLDER_TYPE_ID).getTypeDefinition());
+ }
+ else if (type.getBaseId() == BaseObjectTypeIds.CMIS_RELATIONSHIP) {
+ baseType = copyTypeDefintion(fTypes.get(RELATIONSHIP_TYPE_ID).getTypeDefinition());
+ }
+ else if (type.getBaseId() == BaseObjectTypeIds.CMIS_POLICY) {
+ baseType = copyTypeDefintion(fTypes.get(POLICY_TYPE_ID).getTypeDefinition());
+ }
+ else {
+ return false;
+ }
+
+ AbstractTypeDefinition newType = (AbstractTypeDefinition) copyTypeDefintion(type);
+
+ // copy property definition
+ for (PropertyDefinition<?> propDef : baseType.getPropertyDefinitions().values()) {
+ ((AbstractPropertyDefinition<?>) propDef).setIsInherited(true);
+ newType.addPropertyDefinition(propDef);
+ }
+
+ // add it
+ addTypeInteral(newType);
+
+ log.info("Added type '" + newType.getId() + "'.");
+
+ return true;
+ }
+
+ /**
+ * Adds a type to collection.
+ */
+ private void addTypeInteral(AbstractTypeDefinition type) {
+ if (type == null) {
+ return;
+ }
+
+ if (fTypes.containsKey(type.getId())) {
+ // can't overwrite a type
+ return;
+ }
+
+ TypeDefinitionContainerImpl tc = new TypeDefinitionContainerImpl();
+ tc.setTypeDefinition(type);
+
+ // add to parent
+ if (type.getParentId() != null) {
+ TypeDefinitionContainerImpl tdc = fTypes.get(type.getParentId());
+ if (tdc != null) {
+ if (tdc.getChildren() == null) {
+ tdc.setChildren(new ArrayList<TypeDefinitionContainer>());
+ }
+ tdc.getChildren().add(tc);
+ }
+ }
+
+ fTypes.put(type.getId(), tc);
+ fTypesList.add(tc);
+ }
+
+ /**
+ * CMIS getTypesChildren.
+ */
+ public TypeDefinitionList getTypesChildren(CallContext context, String typeId,
+ boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount) {
+ TypeDefinitionListImpl result = new TypeDefinitionListImpl();
+ result.setList(new ArrayList<TypeDefinition>());
+ result.setHasMoreItems(false);
+ result.setNumItems(BigInteger.valueOf(0));
+
+ int skip = (skipCount == null ? 0 : skipCount.intValue());
+ if (skip < 0) {
+ skip = 0;
+ }
+
+ int max = (maxItems == null ? Integer.MAX_VALUE : maxItems.intValue());
+ if (max < 1) {
+ return result;
+ }
+
+ if (typeId == null) {
+ if (skip < 1) {
+ result.getList().add(copyTypeDefintion(fTypes.get(FOLDER_TYPE_ID).getTypeDefinition()));
+ max--;
+ }
+ if ((skip < 2) && (max > 0)) {
+ result.getList().add(copyTypeDefintion(fTypes.get(DOCUMENT_TYPE_ID).getTypeDefinition()));
+ max--;
+ }
+
+ result.setHasMoreItems((result.getList().size() + skip) < 2);
+ result.setNumItems(BigInteger.valueOf(2));
+ }
+ else {
+ TypeDefinitionContainer tc = fTypes.get(typeId);
+ if ((tc == null) || (tc.getChildren() == null)) {
+ return result;
+ }
+
+ for (TypeDefinitionContainer child : tc.getChildren()) {
+ if (skip > 0) {
+ skip--;
+ continue;
+ }
+
+ result.getList().add(copyTypeDefintion(child.getTypeDefinition()));
+
+ max--;
+ if (max == 0) {
+ break;
+ }
+ }
+
+ result.setHasMoreItems((result.getList().size() + skip) < tc.getChildren().size());
+ result.setNumItems(BigInteger.valueOf(tc.getChildren().size()));
+ }
+
+ if (!includePropertyDefinitions) {
+ for (TypeDefinition type : result.getList()) {
+ type.getPropertyDefinitions().clear();
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * CMIS getTypesDescendants.
+ */
+ public List<TypeDefinitionContainer> getTypesDescendants(CallContext context, String typeId,
+ BigInteger depth, Boolean includePropertyDefinitions) {
+ List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
+
+ // check depth
+ int d = (depth == null ? -1 : depth.intValue());
+ if (d == 0) {
+ throw new CmisInvalidArgumentException("Depth must not be 0!");
+ }
+
+ // set property definition flag to default value if not set
+ boolean ipd = (includePropertyDefinitions == null ? false : includePropertyDefinitions
+ .booleanValue());
+
+ if (typeId == null) {
+ result.add(getTypesDescendants(d, fTypes.get(FOLDER_TYPE_ID), ipd));
+ result.add(getTypesDescendants(d, fTypes.get(DOCUMENT_TYPE_ID), ipd));
+ // result.add(getTypesDescendants(depth,
+ // fTypes.get(RELATIONSHIP_TYPE_ID), includePropertyDefinitions));
+ // result.add(getTypesDescendants(depth, fTypes.get(POLICY_TYPE_ID),
+ // includePropertyDefinitions));
+ }
+ else {
+ TypeDefinitionContainer tc = fTypes.get(typeId);
+ if (tc != null) {
+ result.add(getTypesDescendants(d, tc, ipd));
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Gathers the type descendants tree.
+ */
+ private TypeDefinitionContainer getTypesDescendants(int depth, TypeDefinitionContainer tc,
+ boolean includePropertyDefinitions) {
+ TypeDefinitionContainerImpl result = new TypeDefinitionContainerImpl();
+
+ TypeDefinition type = copyTypeDefintion(tc.getTypeDefinition());
+ if (!includePropertyDefinitions) {
+ type.getPropertyDefinitions().clear();
+ }
+
+ result.setTypeDefinition(type);
+
+ if (depth != 0) {
+ if (tc.getChildren() != null) {
+ result.setChildren(new ArrayList<TypeDefinitionContainer>());
+ for (TypeDefinitionContainer tdc : tc.getChildren()) {
+ result.getChildren().add(
+ getTypesDescendants(depth < 0 ? -1 : depth - 1, tdc, includePropertyDefinitions));
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * For internal use.
+ */
+ public TypeDefinition getType(String typeId) {
+ TypeDefinitionContainer tc = fTypes.get(typeId);
+ if (tc == null) {
+ return null;
+ }
+
+ return tc.getTypeDefinition();
+ }
+
+ /**
+ * CMIS getTypeDefinition.
+ */
+ public TypeDefinition getTypeDefinition(CallContext context, String typeId) {
+ TypeDefinitionContainer tc = fTypes.get(typeId);
+ if (tc == null) {
+ throw new CmisObjectNotFoundException("Type '" + typeId + "' is unknown!");
+ }
+
+ return copyTypeDefintion(tc.getTypeDefinition());
+ }
+
+ private TypeDefinition copyTypeDefintion(TypeDefinition type) {
+ return Converter.convert(Converter.convert(type));
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/TypeManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/VersioningService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/VersioningService.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/VersioningService.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/VersioningService.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,146 @@
+/*
+ * 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.fileshare;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.exceptions.CmisNotSupportedException;
+import org.apache.opencmis.commons.provider.AccessControlList;
+import org.apache.opencmis.commons.provider.ContentStreamData;
+import org.apache.opencmis.commons.provider.Holder;
+import org.apache.opencmis.commons.provider.ObjectData;
+import org.apache.opencmis.commons.provider.PropertiesData;
+import org.apache.opencmis.server.spi.CallContext;
+import org.apache.opencmis.server.spi.CmisVersioningService;
+import org.apache.opencmis.server.spi.ObjectInfoHolder;
+
+/**
+ * Versioning Service.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class VersioningService implements CmisVersioningService {
+
+ private RepositoryMap fRepositoryMap;
+
+ /**
+ * Constructor.
+ */
+ public VersioningService(RepositoryMap repositoryMap) {
+ fRepositoryMap = repositoryMap;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisVersioningService#cancelCheckOut(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, java.lang.String, org.apache.opencmis.commons.api.ExtensionsData)
+ */
+ public void cancelCheckOut(CallContext context, String repositoryId, String objectId,
+ ExtensionsData extension) {
+ throw new CmisNotSupportedException("cancelCheckOut not supported!");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CmisVersioningService#checkIn(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.Holder, java.lang.Boolean,
+ * org.apache.opencmis.commons.provider.PropertiesData, org.apache.opencmis.commons.provider.ContentStreamData,
+ * java.lang.String, java.util.List, org.apache.opencmis.commons.provider.AccessControlList,
+ * org.apache.opencmis.commons.provider.AccessControlList, org.apache.opencmis.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData checkIn(CallContext context, String repositoryId, Holder<String> objectId,
+ Boolean major, PropertiesData properties, ContentStreamData contentStream,
+ String checkinComment, List<String> policies, AccessControlList addAces,
+ AccessControlList removeAces, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ throw new CmisNotSupportedException("checkIn not supported!");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisVersioningService#checkOut(org.apache.opencmis.server.spi.CallContext,
+ * java.lang.String, org.apache.opencmis.commons.provider.Holder,
+ * org.apache.opencmis.commons.api.ExtensionsData, org.apache.opencmis.commons.provider.Holder,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData checkOut(CallContext context, String repositoryId, Holder<String> objectId,
+ ExtensionsData extension, Holder<Boolean> contentCopied, ObjectInfoHolder objectInfos) {
+ throw new CmisNotSupportedException("checkOut not supported!");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisVersioningService#getAllVersions(org.apache.opencmis.server.spi.CallContext
+ * , java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean,
+ * org.apache.opencmis.commons.api.ExtensionsData, org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public List<ObjectData> getAllVersions(CallContext context, String repositoryId,
+ String versionSeriesId, String filter, Boolean includeAllowableActions,
+ ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ ObjectData theVersion = fRepositoryMap.getAuthenticatedRepository(context, repositoryId)
+ .getObject(context, versionSeriesId, filter, includeAllowableActions, false, objectInfos);
+
+ return Collections.singletonList(theVersion);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisVersioningService#getObjectOfLatestVersion(org.apache.opencmis.server.
+ * spi.CallContext, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.String,
+ * java.lang.Boolean, org.apache.opencmis.commons.enums.IncludeRelationships, java.lang.String,
+ * java.lang.Boolean, java.lang.Boolean, org.apache.opencmis.commons.api.ExtensionsData,
+ * org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public ObjectData getObjectOfLatestVersion(CallContext context, String repositoryId,
+ String versionSeriesId, Boolean major, String filter, Boolean includeAllowableActions,
+ IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
+ Boolean includeAcl, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+ return fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getObject(context,
+ versionSeriesId, filter, includeAllowableActions, includeAcl, objectInfos);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.server.spi.CmisVersioningService#getPropertiesOfLatestVersion(org.apache.opencmis.server
+ * .spi.CallContext, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.String,
+ * org.apache.opencmis.commons.api.ExtensionsData, org.apache.opencmis.server.spi.ObjectInfoHolder)
+ */
+ public PropertiesData getPropertiesOfLatestVersion(CallContext context, String repositoryId,
+ String versionSeriesId, Boolean major, String filter, ExtensionsData extension) {
+ ObjectData object = fRepositoryMap.getAuthenticatedRepository(context, repositoryId).getObject(
+ context, versionSeriesId, filter, false, false, null);
+
+ return object.getProperties();
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/java/org/apache/opencmis/fileshare/VersioningService.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/resources/example-type.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/resources/example-type.xml?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/resources/example-type.xml (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/resources/example-type.xml Tue Feb 16 16:03:38 2010
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cmisra:type xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
+ xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:type="cmis:cmisTypeDocumentDefinitionType">
+ <cmis:id>myTestDocumentType</cmis:id>
+ <cmis:localName>myTestDocumentType</cmis:localName>
+ <cmis:localNamespace>http://opencmis.org/demo/</cmis:localNamespace>
+ <cmis:parentId>cmis:document</cmis:parentId>
+ <cmis:displayName>My Test Document Type</cmis:displayName>
+ <cmis:queryName>TESTDOCTYPE</cmis:queryName>
+ <cmis:description>My Test Document Type</cmis:description>
+ <cmis:baseId>cmis:document</cmis:baseId>
+ <cmis:creatable>true</cmis:creatable>
+ <cmis:fileable>true</cmis:fileable>
+ <cmis:queryable>false</cmis:queryable>
+ <cmis:fulltextindexed>false</cmis:fulltextindexed>
+ <cmis:includedInSupertypeQuery>true</cmis:includedInSupertypeQuery>
+ <cmis:controllablePolicy>false</cmis:controllablePolicy>
+ <cmis:controllableACL>false</cmis:controllableACL>
+ <cmis:versionable>false</cmis:versionable>
+ <cmis:contentStreamAllowed>required</cmis:contentStreamAllowed>
+ <cmis:propertyStringDefinition>
+ <cmis:id>testProperty</cmis:id>
+ <cmis:localName>testProperty</cmis:localName>
+ <cmis:displayName>A test property</cmis:displayName>
+ <cmis:queryName>testProperty</cmis:queryName>
+ <cmis:description>Just a string</cmis:description>
+ <cmis:propertyType>string</cmis:propertyType>
+ <cmis:cardinality>single</cmis:cardinality>
+ <cmis:updatability>readwrite</cmis:updatability>
+ <cmis:inherited>false</cmis:inherited>
+ <cmis:required>false</cmis:required>
+ <cmis:queryable>false</cmis:queryable>
+ <cmis:orderable>false</cmis:orderable>
+ </cmis:propertyStringDefinition>
+ <cmis:propertyStringDefinition>
+ <cmis:id>testProperty2</cmis:id>
+ <cmis:localName>testProperty2</cmis:localName>
+ <cmis:displayName>Another test property</cmis:displayName>
+ <cmis:queryName>testProperty2</cmis:queryName>
+ <cmis:description>Another string</cmis:description>
+ <cmis:propertyType>string</cmis:propertyType>
+ <cmis:cardinality>single</cmis:cardinality>
+ <cmis:updatability>readwrite</cmis:updatability>
+ <cmis:inherited>false</cmis:inherited>
+ <cmis:required>true</cmis:required>
+ <cmis:queryable>false</cmis:queryable>
+ <cmis:orderable>false</cmis:orderable>
+ <cmis:defaultValue>
+ <cmis:value>default value</cmis:value>
+ </cmis:defaultValue>
+ </cmis:propertyStringDefinition>
+</cmisra:type>
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/resources/example-type.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties Tue Feb 16 16:03:38 2010
@@ -0,0 +1,12 @@
+class=org.apache.opencmis.fileshare.ServicesFactory
+
+login.1 = test:test
+login.2 = cmisuser:password
+login.3 = reader:reader
+
+#type.1 = {user.home}{file.separator}type1.xml
+#type.2 = {user.home}{file.separator}type2.xml
+
+repository.test = {user.home}
+repository.test.readwrite = test, cmisuser
+repository.test.readonly = reader
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-fileshare/src/main/webapp/WEB-INF/classes/repository.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Feb 16 16:03:38 2010
@@ -0,0 +1,6 @@
+bin
+target
+*.iws
+*.ipr
+*.iml
+.*
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/pom.xml?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/pom.xml (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/pom.xml Tue Feb 16 16:03:38 2010
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.opencmis</groupId>
+ <artifactId>opencmis</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>opencmis-server-impl</artifactId>
+ <name>OpenCMIS Server Implementation</name>
+ <packaging>war</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.opencmis</groupId>
+ <artifactId>opencmis-commons-impl</artifactId>
+ <version>${version}</version>
+ <type>jar</type>
+ <overWrite>true</overWrite>
+ <includes>wsdl/*.xsd, wsdl/*.wsdl</includes>
+ </artifactItem>
+ </artifactItems>
+ <outputDirectory>${project.basedir}/src/main/webapp/WEB-INF</outputDirectory>
+ <overWriteReleases>true</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.opencmis</groupId>
+ <artifactId>opencmis-commons-api</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opencmis</groupId>
+ <artifactId>opencmis-commons-impl</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opencmis</groupId>
+ <artifactId>opencmis-server-spi</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.ws</groupId>
+ <artifactId>jaxws-rt</artifactId>
+ <version>2.1.7</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>maven-repository.dev.java.net</id>
+ <name>Java.net Repository for Maven 1</name>
+ <url>http://download.java.net/maven/1/</url>
+ <layout>legacy</layout>
+ </repository>
+ <repository>
+ <id>maven2-repository.dev.java.net</id>
+ <name>Java.net Repository for Maven 2</name>
+ <url>http://download.java.net/maven/2/</url>
+ </repository>
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>maven2-repository.dev.java.net</id>
+ <url>http://download.java.net/maven/2/</url>
+ </pluginRepository>
+ </pluginRepositories>
+</project>
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/src/main/java/org/apache/opencmis/server/impl/CallContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/src/main/java/org/apache/opencmis/server/impl/CallContextImpl.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/src/main/java/org/apache/opencmis/server/impl/CallContextImpl.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/src/main/java/org/apache/opencmis/server/impl/CallContextImpl.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,99 @@
+/*
+ * 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.server.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.opencmis.server.spi.CallContext;
+
+/**
+ * Implementation of the {@link CallContext} interface.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class CallContextImpl implements CallContext {
+
+ private String fBinding;
+ private Map<String, String> fParameter = new HashMap<String, String>();
+
+ public CallContextImpl(String binding) {
+ fBinding = binding;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CallContext#getBinding()
+ */
+ public String getBinding() {
+ return fBinding;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CallContext#get(java.lang.String)
+ */
+ public String get(String key) {
+ return fParameter.get(key);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CallContext#getUsername()
+ */
+ public String getUsername() {
+ return get(USERNAME);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CallContext#getPassword()
+ */
+ public String getPassword() {
+ return get(PASSWORD);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.server.spi.CallContext#getLocale()
+ */
+ public String getLocale() {
+ return get(LOCALE);
+ }
+
+ /**
+ * Adds a parameter.
+ */
+ public void put(String key, String value) {
+ fParameter.put(key, value);
+ }
+
+ /**
+ * Removes a parameter.
+ */
+ public String remove(String key) {
+ return fParameter.remove(key);
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-impl/src/main/java/org/apache/opencmis/server/impl/CallContextImpl.java
------------------------------------------------------------------------------
svn:eol-style = native