You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2010/02/23 15:32:24 UTC
svn commit: r915357 - in
/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src:
main/java/org/apache/opencmis/inmemory/
main/java/org/apache/opencmis/inmemory/clientprovider/
main/java/org/apache/opencmis/inmemory/server/ mai...
Author: jens
Date: Tue Feb 23 14:32:23 2010
New Revision: 915357
URL: http://svn.apache.org/viewvc?rev=915357&view=rev
Log:
Prepare code for unfiling and multifiling
Added:
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/MultiFilingServiceImpl.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryMultiFilingService.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/MultiFilingTest.java
Modified:
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Path.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/AbstractPathImpl.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java
incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectServiceTest.java
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/CmisInMemoryProvider.java Tue Feb 23 14:32:23 2010
@@ -49,6 +49,7 @@
protected NavigationService fNavigationService;
protected ObjectService fObjectService;
protected VersioningService fVersioningService;
+ protected MultiFilingService fMultiService;
protected RepositoryInfoData fRepositoryInfo;
public CmisInMemoryProvider(Map<String, String> cfgParams) {
@@ -83,7 +84,7 @@
}
MultiFilingService getMultiFilingService() {
- return null;
+ return fMultiService;
}
AclService getAclService() {
@@ -120,6 +121,7 @@
fNavigationService = new NavigationServiceImpl(fStoreManager);
fObjectService = new ObjectServiceImpl(fStoreManager);
fVersioningService = new VersioningServiceImpl(fStoreManager, fObjectService);
+ fMultiService = new MultiFilingServiceImpl(fStoreManager);
}
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/MultiFilingServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/MultiFilingServiceImpl.java?rev=915357&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/MultiFilingServiceImpl.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/MultiFilingServiceImpl.java Tue Feb 23 14:32:23 2010
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.opencmis.inmemory;
+
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.provider.MultiFilingService;
+import org.apache.opencmis.inmemory.storedobj.api.StoreManager;
+
+public class MultiFilingServiceImpl extends AbstractServiceImpl implements MultiFilingService {
+
+ public MultiFilingServiceImpl(StoreManager storeManager) {
+ super(storeManager);
+ }
+
+ public void addObjectToFolder(String repositoryId, String objectId, String folderId,
+ Boolean allVersions, ExtensionsData extension) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void removeObjectFromFolder(String repositoryId, String objectId, String folderId,
+ ExtensionsData extension) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/NavigationServiceImpl.java Tue Feb 23 14:32:23 2010
@@ -45,6 +45,7 @@
import org.apache.opencmis.commons.provider.ObjectList;
import org.apache.opencmis.commons.provider.ObjectParentData;
import org.apache.opencmis.commons.provider.PropertiesData;
+import org.apache.opencmis.inmemory.storedobj.api.Children;
import org.apache.opencmis.inmemory.storedobj.api.DocumentVersion;
import org.apache.opencmis.inmemory.storedobj.api.Folder;
import org.apache.opencmis.inmemory.storedobj.api.ObjectStore;
@@ -207,6 +208,7 @@
/* (non-Javadoc)
* @see org.opencmis.client.provider.NavigationService#getObjectParents(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.opencmis.client.provider.ExtensionsData)
*/
+ @SuppressWarnings("unchecked")
public List<ObjectParentData> getObjectParents(String repositoryId, String objectId,
String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
String renditionFilter, Boolean includeRelativePathSegment, ExtensionsData extension) {
@@ -216,7 +218,7 @@
// for now we have only folders that have a parent and the in-memory provider only has one
// parent for each object (no multi-filing)
- ObjectParentDataImpl result = new ObjectParentDataImpl();
+ ObjectParentDataImpl result = null;
ObjectStore fs = fStoreManager.getObjectStore(repositoryId);
StoredObject so = fs.getObjectById(objectId);
@@ -229,14 +231,18 @@
+ objectId);
if (null != spo) {
- result.setObject(getFolderParentIntern(repositoryId, spo, filter));
- String path = spo.getPath();
- int beginIndex = path.lastIndexOf(Path.PATH_SEPARATOR)+1; // Note: if / not found results in 0
- String relPathSeg = path.substring(beginIndex, path.length());
- result.setRelativePathSegment(relPathSeg);
+ ObjectData parents = getFolderParentIntern(repositoryId, spo, filter);
+ if (null != parents) {
+ result = new ObjectParentDataImpl();
+ result.setObject(parents);
+ String path = spo.getPath();
+ int beginIndex = path.lastIndexOf(Path.PATH_SEPARATOR)+1; // Note: if / not found results in 0
+ String relPathSeg = path.substring(beginIndex, path.length());
+ result.setRelativePathSegment(relPathSeg);
+ }
}
log.debug("stop getObjectParents()");
- return Collections.singletonList((ObjectParentData)result);
+ return null == result ? (List<ObjectParentData>) Collections.EMPTY_LIST : Collections.singletonList((ObjectParentData)result);
}
// private helpers
@@ -333,9 +339,13 @@
Folder parentFolder = sop.getParent();
- if (parentFolder == null)
- throw new CmisInvalidArgumentException("Cannot get parent of a root folder");
-
+ 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
+ }
+
List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
PropertiesData props = PropertyCreationHelper.getPropertiesFromObject(repositoryId,
parentFolder, fStoreManager, requestedIds);
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/ObjectServiceImpl.java Tue Feb 23 14:32:23 2010
@@ -92,7 +92,7 @@
AccessControlList addACEs, AccessControlList removeACEs, ExtensionsData extension) {
log.debug("start createDocument()");
- checkStandardParameters(repositoryId, folderId);
+ checkRepositoryId(repositoryId);
ObjectStore folderStore = fStoreManager.getObjectStore(repositoryId);
@@ -101,22 +101,26 @@
String name = (String) pd.getFirstValue();
// Validation stuff
- StoredObject so = folderStore.getObjectById(folderId);
- Folder folder = null;
-
- if (null == so)
- throw new CmisInvalidArgumentException(" Cannot create document, folderId: " + folderId
- + " is invalid");
-
- if (so instanceof Folder)
- folder = (Folder) so;
- else
- throw new CmisInvalidArgumentException(
- "Can't creat document, folderId does not refer to a folder: " + folderId);
-
TypeValidator.validateRequiredSystemProperties(properties);
TypeDefinition typeDef = getTypeDefinition(repositoryId, properties);
- TypeValidator.validateAllowedChildObjectTypes(typeDef, folder.getAllowedChildObjectTypeIds());
+
+ Folder folder = null;
+ if (null != folderId) {
+ StoredObject so = folderStore.getObjectById(folderId);
+
+ if (null == so)
+ throw new CmisInvalidArgumentException(" Cannot create document, folderId: " + folderId
+ + " is invalid");
+
+ if (so instanceof Folder)
+ folder = (Folder) so;
+ else
+ throw new CmisInvalidArgumentException(
+ "Can't creat document, folderId does not refer to a folder: " + folderId);
+
+ TypeValidator.validateAllowedChildObjectTypes(typeDef, folder.getAllowedChildObjectTypeIds());
+ }
+
// check if the given type is a document type
if (!typeDef.getBaseId().equals(
@@ -139,8 +143,10 @@
verDoc.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);
verDoc.setCustomProperties(properties.getProperties());
DocumentVersion version = verDoc.addVersion(contentStream, versioningState, user);
- // add document to folder
- folder.addChildDocument(verDoc); // sets parent in doc
+ if (null != folder)
+ folder.addChildDocument(verDoc); // add document to folder and set parent in doc
+ else
+ verDoc.persist();
version.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);
version.setCustomProperties(properties.getProperties());
version.persist();
@@ -151,7 +157,10 @@
// add document to folder
doc.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);
doc.setCustomProperties(properties.getProperties());
- folder.addChildDocument(doc); // sets parent in doc
+ if (null != folder)
+ folder.addChildDocument(doc); // add document to folder and set parent in doc
+ else
+ doc.persist();
resId = doc.getId();
}
@@ -585,6 +594,7 @@
log.debug("start moveObject()");
checkStandardParameters(repositoryId, objectId.getValue());
Folder targetFolder = null;
+ Folder sourceFolder = null;
ObjectStore folderStore = fStoreManager.getObjectStore(repositoryId);
StoredObject so = folderStore.getObjectById(objectId.getValue());
Path spo = null;
@@ -598,16 +608,30 @@
+ objectId.getValue());
StoredObject soTarget = folderStore.getObjectById(targetFolderId);
- if (soTarget instanceof Folder)
+ if (null == soTarget)
+ throw new CmisObjectNotFoundException("Unknown target folder: " + targetFolderId);
+ else if (soTarget instanceof Folder)
targetFolder = (Folder) soTarget;
else
- throw new CmisNotSupportedException("Destination of a move operation must be a folder");
+ throw new CmisNotSupportedException("Destination " + targetFolderId + " of a move operation must be a folder");
+ StoredObject soSource = folderStore.getObjectById(sourceFolderId);
+ if (null == soSource)
+ throw new CmisObjectNotFoundException("Unknown source folder: " + sourceFolderId);
+ else if (soSource instanceof Folder)
+ sourceFolder = (Folder) soSource;
+ else
+ throw new CmisNotSupportedException("Source " + sourceFolderId + " of a move operation must be a folder");
+
+ if (spo.getParent() != soSource)
+ throw new CmisNotSupportedException("Cannot move object, source folder " + sourceFolderId + "is not a parent of object " + objectId.getValue());
+
if (so instanceof Folder && hasDescendant((Folder) so, targetFolder)) {
throw new CmisNotSupportedException(
"Destination of a move cannot be a subfolder of the source");
}
- spo.move(targetFolder);
+
+ spo.move(sourceFolder, targetFolder);
objectId.setValue(so.getId());
log.debug("stop moveObject()");
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/CmisInMemorySpi.java Tue Feb 23 14:32:23 2010
@@ -107,8 +107,7 @@
* @see org.apache.opencmis.client.provider.spi.CMISSPI#getMultiFilingService()
*/
public MultiFilingService getMultiFilingService() {
- // TODO to be completed if multi-filing implemented
- return null;
+ return fMultiService;
}
/*
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryMultiFilingService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryMultiFilingService.java?rev=915357&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryMultiFilingService.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryMultiFilingService.java Tue Feb 23 14:32:23 2010
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.opencmis.inmemory.server;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.provider.MultiFilingService;
+import org.apache.opencmis.commons.provider.ObjectData;
+import org.apache.opencmis.commons.provider.ObjectService;
+import org.apache.opencmis.inmemory.MultiFilingServiceImpl;
+import org.apache.opencmis.inmemory.storedobj.api.StoreManager;
+import org.apache.opencmis.server.spi.CallContext;
+import org.apache.opencmis.server.spi.CmisMultiFilingService;
+import org.apache.opencmis.server.spi.ObjectInfoHolder;
+
+public class InMemoryMultiFilingService implements CmisMultiFilingService {
+
+ private static final Log LOG = LogFactory.getLog(InMemoryMultiFilingService.class.getName());
+
+ MultiFilingService fMultiService;
+ ObjectService fObjectService;
+ AtomLinkInfoProvider fAtomLinkProvider;
+
+ public InMemoryMultiFilingService(StoreManager storeMgr, ObjectService objService) {
+ fAtomLinkProvider = new AtomLinkInfoProvider(storeMgr);
+ fMultiService = new MultiFilingServiceImpl(storeMgr);
+ fObjectService = objService;
+ }
+
+ public ObjectData addObjectToFolder(CallContext context, String repositoryId, String objectId,
+ String folderId, Boolean allVersions, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+
+ LOG.debug("Begin addObjectToFolder()");
+
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.getRuntimeConfig().attachCfg(context);
+
+ fMultiService.addObjectToFolder(repositoryId, objectId, folderId, allVersions, extension);
+
+ // Make a call to getObject to convert the resulting id into an ObjectData
+ ObjectData res = fObjectService.getObject(repositoryId, objectId, "*", false,
+ IncludeRelationships.NONE, null, false, false, extension);
+
+ // To be able to provide all Atom links in the response we need additional information:
+ fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, objectId, objectInfos);
+ fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, folderId, objectInfos);
+
+ LOG.debug("End addObjectToFolder()");
+ return res;
+ }
+
+ public ObjectData removeObjectFromFolder(CallContext context, String repositoryId,
+ String objectId, String folderId, ExtensionsData extension, ObjectInfoHolder objectInfos) {
+
+ LOG.debug("Begin removeObjectFromFolder()");
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.getRuntimeConfig().attachCfg(context);
+
+ fMultiService.removeObjectFromFolder(repositoryId, objectId, folderId, extension);
+
+ // Make a call to getObject to convert the resulting id into an ObjectData
+ ObjectData res = fObjectService.getObject(repositoryId, objectId, "*", false,
+ IncludeRelationships.NONE, null, false, false, extension);
+
+ // To be able to provide all Atom links in the response we need additional information:
+ fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, objectId, objectInfos);
+ fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, folderId, objectInfos);
+
+ LOG.debug("End removeObjectFromFolder()");
+
+ return res;
+ }
+
+}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Path.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Path.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Path.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Path.java Tue Feb 23 14:32:23 2010
@@ -60,6 +60,6 @@
* @param newParent
* new parent folder for the object
*/
- public void move(Folder newParent);
+ public void move(Folder oldParent, Folder newParent);
}
\ No newline at end of file
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/AbstractPathImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/AbstractPathImpl.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/AbstractPathImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/AbstractPathImpl.java Tue Feb 23 14:32:23 2010
@@ -99,7 +99,7 @@
// fObjStore.changePath(this, oldPath, newPath);
}
- public void move(Folder newParent) {
+ public void move(Folder oldParent, Folder newParent) {
// we delegate this to the folder class because we need access to the global map to move
if (this instanceof Document || this instanceof VersionedDocument)
fParent.moveChildDocument(this, newParent);
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java Tue Feb 23 14:32:23 2010
@@ -203,8 +203,8 @@
return fContainer.getPath();
}
- public void move(Folder newParent) {
- fContainer.move(newParent);
+ public void move(Folder oldParent, Folder newParent) {
+ fContainer.move(oldParent, newParent);
}
public void setParent(Folder parent) {
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java Tue Feb 23 14:32:23 2010
@@ -23,6 +23,7 @@
import org.apache.opencmis.commons.provider.AccessControlList;
import org.apache.opencmis.commons.provider.CmisProvider;
import org.apache.opencmis.commons.provider.ContentStreamData;
+import org.apache.opencmis.commons.provider.MultiFilingService;
import org.apache.opencmis.commons.provider.NavigationService;
import org.apache.opencmis.commons.provider.ObjectData;
import org.apache.opencmis.commons.provider.ObjectParentData;
@@ -47,6 +48,8 @@
protected NavigationService fNavSvc;
protected RepositoryService fRepSvc;
protected VersioningService fVerSvc;
+ protected MultiFilingService fMultiSvc;
+
private String fTypeCreatorClassName;
private boolean fUseClientProviderInterface;
@@ -319,6 +322,7 @@
fObjSvc = inMemSpi.getObjectService();
fNavSvc = inMemSpi.getNavigationService();
fVerSvc = inMemSpi.getVersioningService();
+ fMultiSvc = inMemSpi.getMultiFilingService();
}
/**
@@ -338,6 +342,14 @@
fObjSvc = provider.getObjectService();
fNavSvc = provider.getNavigationService();
fVerSvc = provider.getVersioningService();
+ fMultiSvc = provider.getMultiFilingService();
+ }
+
+ protected String getStringProperty(ObjectData objData, String propertyKey) {
+ PropertyData<? extends Object> pd = (PropertyData<? extends Object>) objData.getProperties()
+ .getProperties().get(PropertyIds.CMIS_PATH);
+ assertNotNull(pd.getFirstValue());
+ assertTrue(pd.getFirstValue() instanceof String);
+ return (String)pd.getFirstValue();
}
-
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java Tue Feb 23 14:32:23 2010
@@ -126,14 +126,16 @@
public void testMoveFolder() {
String oldPath = f1.getPath();
- f1.move(f3);
+ Folder f1Parent = f1.getParent();
+ f1.move(f1Parent, f3);
assertNull(fStore.getObjectByPath(oldPath));
assertEquals(f1.getPath(), "/Folder 3/Folder 1");
assertEquals(f1, fStore.getObjectByPath("/Folder 3/Folder 1"));
f2.rename("Folder 1");
try {
- f2.move(f3);
+ Folder f2Parent = f2.getParent();
+ f2.move(f2Parent, f3);
fail("Should not be possible to move folder to a folder that has a child with same name");
} catch (Exception e) {
}
@@ -149,8 +151,6 @@
fail("Should not be possible to move folder that has children");
} catch (Exception e) {
}
-
-
}
private void createFolders() {
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/MultiFilingTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/MultiFilingTest.java?rev=915357&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/MultiFilingTest.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/MultiFilingTest.java Tue Feb 23 14:32:23 2010
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.opencmis.inmemory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.exceptions.CmisNotSupportedException;
+import org.apache.opencmis.commons.provider.ObjectParentData;
+import org.apache.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
+
+public class MultiFilingTest extends AbstractServiceTst {
+
+ private static Log LOG = LogFactory.getLog(MultiFilingTest.class);
+ private static final String DOCUMENT_TYPE_ID = UnitTestTypeSystemCreator.COMPLEX_TYPE;
+ private static final String FOLDER_TYPE_ID = InMemoryFolderTypeDefinition.getRootFolderType().getId();
+
+ private String fId1;
+ private String fId2;
+ private String fId11;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testCreateUnfiledDocument() {
+ LOG.debug("Begin testCreatUnfiledDocument()");
+ String docId = createUnfiledDocument();
+ String docId2 = getDocument(docId);
+ assertEquals(docId, docId2);
+
+ // get object parents, must be empty
+ List<ObjectParentData> res = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
+ IncludeRelationships.NONE, null, true, null);
+
+ assertNotNull(res);
+ assertEquals(res.size(), 0);
+
+ LOG.debug("End testCreatUnfiledDocument()");
+ }
+
+ public void xtestMakeFiledDocumentUnfiled() {
+ LOG.debug("Begin testMakeFiledDocumentUnfiled()");
+
+ String docId = createDocument("Filed document", fRootFolderId, DOCUMENT_TYPE_ID, true);
+
+ fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, fRootFolderId, null);
+ List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
+ IncludeRelationships.NONE, null, true, null);
+ assertEquals(0, parents.size());
+
+ LOG.debug("End testMakeFiledDocumentUnfiled()");
+ }
+
+ public void xtestAddDocumentToFolder() {
+ LOG.debug("Begin testAddDocumentToFolder()");
+
+ String docId = createUnfiledDocument();
+ List<String> folderIds = prepareMultiFiledDocument(docId);
+
+ // get object parents, must contain all folders
+ List<ObjectParentData> res = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
+ IncludeRelationships.NONE, null, true, null);
+ assertEquals(3, res.size());
+ for (ObjectParentData opd : res) {
+ assertTrue(folderIds.contains(opd.getObject().getId()));
+ assertEquals(BaseObjectTypeIds.CMIS_FOLDER.value(), opd.getObject().getBaseTypeId());
+ String name = getStringProperty(opd.getObject(), PropertyIds.CMIS_NAME);
+ assertEquals(name, opd.getRelativePathSegment());
+ }
+
+ // try version specific filing, should fail
+ try {
+ fMultiSvc.addObjectToFolder(fRepositoryId, docId, fId1, false, null);
+ fail("Adding not all versions to a folder should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisNotSupportedException);
+ }
+ LOG.debug("End testAddDocumentToFolder()");
+ }
+
+ public void xtestRemoveDocumentFromFolder() {
+ LOG.debug("Begin testRemoveDocumentFromFolder()");
+
+ String docId = createUnfiledDocument();
+ prepareMultiFiledDocument(docId);
+
+ fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, fId1, null);
+ List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
+ IncludeRelationships.NONE, null, true, null);
+ assertEquals(2, parents.size());
+ for (ObjectParentData opd : parents) {
+ assertFalse(fId1.equals(opd.getObject().getId()));
+ }
+
+ fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, fId2, null);
+ parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
+ IncludeRelationships.NONE, null, true, null);
+ assertEquals(1, parents.size());
+ for (ObjectParentData opd : parents) {
+ assertFalse(fId1.equals(opd.getObject().getId()));
+ }
+
+ fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, fId11, null);
+ parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
+ IncludeRelationships.NONE, null, true, null);
+ assertEquals(0, parents.size());
+
+ LOG.debug("End testRemoveDocumentFromFolder()");
+ }
+
+ private void createFolders() {
+ fId1 = createFolder("folder1", fRootFolderId, FOLDER_TYPE_ID);
+ fId2 = createFolder("folder2", fRootFolderId, FOLDER_TYPE_ID);
+ fId11 = createFolder("folder1.1", fId1, FOLDER_TYPE_ID);
+ }
+
+ private String createUnfiledDocument() {
+ return createDocument("Unfiled document", null, DOCUMENT_TYPE_ID, true);
+ }
+
+ private List<String> prepareMultiFiledDocument(String docId) {
+ createFolders();
+
+ // add the document to three folders
+ fMultiSvc.addObjectToFolder(fRepositoryId, docId, fId1, true, null);
+ fMultiSvc.addObjectToFolder(fRepositoryId, docId, fId2, true, null);
+ fMultiSvc.addObjectToFolder(fRepositoryId, docId, fId11, true, null);
+
+ List<String> folderIds = new ArrayList<String>();
+ folderIds.add(fId1);
+ folderIds.add(fId2);
+ folderIds.add(fId11);
+
+ return folderIds;
+ }
+}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectServiceTest.java?rev=915357&r1=915356&r2=915357&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectServiceTest.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectServiceTest.java Tue Feb 23 14:32:23 2010
@@ -694,8 +694,9 @@
if (!isFolder) // get first document in this folder
sourceIdToMove = gen.getDocumentId(sourceIdToMove, 0);
holder.setValue(sourceIdToMove); // "/Folder_1/My Folder 0/My Folder 1");
+ String sourceFolderId = getSourceFolder(sourceIdToMove);
log.info("Id before moveObject: " + holder.getValue());
- fObjSvc.moveObject(fRepositoryId, holder, rootFolderId, null, null);
+ fObjSvc.moveObject(fRepositoryId, holder, rootFolderId, sourceFolderId, null);
log.info("Id after moveObject: " + holder.getValue());
gen.dumpFolder(fRootFolderId, propertyFilter);
@@ -709,8 +710,9 @@
ObjectInFolderList ch = fNavSvc.getChildren(fRepositoryId, holder.getValue(), propertyFilter, null,
false, IncludeRelationships.NONE, null, false, null, null, null);
String subFolderId = ch.getObjects().get(0).getObject().getId();
+
try {
- fObjSvc.moveObject(fRepositoryId, holder, subFolderId, null, null);
+ fObjSvc.moveObject(fRepositoryId, holder, subFolderId, sourceFolderId, null);
fail("moveObject to a folder that is a descendant of the source must fail.");
} catch (Exception e) {
assertTrue(e instanceof CmisNotSupportedException );
@@ -812,6 +814,12 @@
return id;
}
+ private String getSourceFolder(String objectId) {
+ // return the first parent found in the result list of all parents
+ List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, objectId, "*", false,
+ IncludeRelationships.NONE, null, true, null);
+ return parents.get(0).getObject().getId();
+ }
// Helper class to create some type for testing the ObjectService