You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2010/02/22 09:58:41 UTC
svn commit: r912517 [2/3] - in /incubator/chemistry/trunk/opencmis:
opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/
opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/clientprovider/...
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java Mon Feb 22 08:58:39 2010
@@ -19,6 +19,7 @@
package org.apache.opencmis.inmemory.server;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -32,7 +33,6 @@
import org.apache.opencmis.commons.provider.RepositoryInfoData;
import org.apache.opencmis.commons.provider.RepositoryService;
import org.apache.opencmis.inmemory.ConfigConstants;
-import org.apache.opencmis.inmemory.MapConfigReader;
import org.apache.opencmis.inmemory.NavigationServiceImpl;
import org.apache.opencmis.inmemory.ObjectServiceImpl;
import org.apache.opencmis.inmemory.RepositoryServiceImpl;
@@ -40,6 +40,7 @@
import org.apache.opencmis.inmemory.storedobj.impl.StoreManagerFactory;
import org.apache.opencmis.inmemory.storedobj.impl.StoreManagerImpl;
import org.apache.opencmis.server.spi.AbstractServicesFactory;
+import org.apache.opencmis.server.spi.CallContext;
import org.apache.opencmis.server.spi.CmisDiscoveryService;
import org.apache.opencmis.server.spi.CmisNavigationService;
import org.apache.opencmis.server.spi.CmisObjectService;
@@ -50,12 +51,7 @@
public class ServiceFactory extends AbstractServicesFactory {
private static final Log LOG = LogFactory.getLog(ServiceFactory.class.getName());
- private static StoreManager STORE_MANAGER; // singleton root of everything
- public static StoreManager getInstance() {
- if (null == STORE_MANAGER)
- throw new RuntimeException("Application not initialized correctly");
- return STORE_MANAGER;
- }
+ private StoreManager fStoreManager; // singleton root of everything
private InMemoryRepositoryService fRepositoryService;
private InMemoryNavigationService fNavigationService;
@@ -63,6 +59,10 @@
private InMemoryVersioningService fVersioningService;
private InMemoryDiscoveryService fDiscoveryService;
+ public StoreManager getStoreManager() {
+ return fStoreManager;
+ }
+
@Override
public void init(Map<String, String> parameters) {
LOG.info("Initializing in-memory repository...");
@@ -72,51 +72,44 @@
if (null==repositoryClassName)
repositoryClassName = StoreManagerImpl.class.getName();
- if (null == STORE_MANAGER)
- STORE_MANAGER = StoreManagerFactory.createInstance(repositoryClassName);
+ if (null == fStoreManager)
+ fStoreManager = StoreManagerFactory.createInstance(repositoryClassName);
- MapConfigReader cfgReader = new MapConfigReader(parameters);
- STORE_MANAGER.setConfigReader(cfgReader);
String repositoryId = parameters.get(ConfigConstants.REPOSITORY_ID);
- List<String> allAvailableRepositories = STORE_MANAGER.getAllRepositoryIds();
+ List<String> allAvailableRepositories = fStoreManager.getAllRepositoryIds();
// init existing repositories
for (String existingRepId : allAvailableRepositories)
- STORE_MANAGER.initRepository(existingRepId, false);
+ fStoreManager.initRepository(existingRepId);
- // create repository
+ // create repository if configured as a startup parameter
if (null != repositoryId) {
if (allAvailableRepositories.contains(repositoryId))
LOG.warn("Repostory " + repositoryId + " already exists and will not be created.");
else {
- STORE_MANAGER.createRepository(repositoryId);
- // then create/initialize type system
String typeCreatorClassName = parameters.get(ConfigConstants.TYPE_CREATOR_CLASS);
- STORE_MANAGER.initTypeSystem(repositoryId, typeCreatorClassName);
- // then init repository (note: loads root folder which requires cmis:folder type available)
-
- STORE_MANAGER.initRepository(repositoryId, true);
+ fStoreManager.createAndInitRepository(repositoryId, typeCreatorClassName);
}
}
- if (repositoryId != null) {
- String repoInfoCreatorClassName = parameters.get(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS);
- STORE_MANAGER.initRepositoryInfo(repositoryId, repoInfoCreatorClassName);
- }
+// if (repositoryId != null) {
+// String repoInfoCreatorClassName = parameters.get(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS);
+// fStoreManager.initRepositoryInfo(repositoryId, repoInfoCreatorClassName);
+// }
// initialize services
- fRepositoryService = new InMemoryRepositoryService(STORE_MANAGER);
- fNavigationService = new InMemoryNavigationService(STORE_MANAGER);
- fObjectService = new InMemoryObjectService(STORE_MANAGER);
- fVersioningService = new InMemoryVersioningService(STORE_MANAGER, fObjectService.getObjectService());
+ fRepositoryService = new InMemoryRepositoryService(fStoreManager);
+ fNavigationService = new InMemoryNavigationService(fStoreManager);
+ fObjectService = new InMemoryObjectService(fStoreManager);
+ fVersioningService = new InMemoryVersioningService(fStoreManager, fObjectService.getObjectService());
// Begin temporary implementation for discover service
- fDiscoveryService = new InMemoryDiscoveryService(STORE_MANAGER, fRepositoryService.getRepositoryService(), fNavigationService.getNavigationService());
+ fDiscoveryService = new InMemoryDiscoveryService(fStoreManager, fRepositoryService.getRepositoryService(), fNavigationService.getNavigationService());
// End temporary implementation
// With some special configuration settings fill the repository with some documents and folders if is empty
if (!allAvailableRepositories.contains(repositoryId))
- fillRepositoryIfConfigured(cfgReader, repositoryId);
+ fillRepositoryIfConfigured(parameters, repositoryId);
LOG.info("...initialized in-memory repository.");
}
@@ -151,9 +144,31 @@
return fDiscoveryService;
}
- private void fillRepositoryIfConfigured(MapConfigReader cfgReader, String repositoryId) {
+ private void fillRepositoryIfConfigured(Map<String, String> parameters, String repositoryId) {
+ class DummyCallContext implements CallContext {
+
+ public String get(String key) {
+ return null;
+ }
+
+ public String getBinding() {
+ return null;
+ }
+
+ public String getLocale() {
+ return null;
+ }
+
+ public String getPassword() {
+ return null;
+ }
+
+ public String getUsername() {
+ return null;
+ }
+ }
- String doFillRepositoryStr = cfgReader.get(ConfigConstants.USE_REPOSITORY_FILER);
+ String doFillRepositoryStr = parameters.get(ConfigConstants.USE_REPOSITORY_FILER);
boolean doFillRepository = doFillRepositoryStr == null ? false : Boolean
.parseBoolean(doFillRepositoryStr);
@@ -161,35 +176,35 @@
return;
ProviderObjectFactory objectFactory = new ProviderObjectFactoryImpl();
- NavigationService navSvc = new NavigationServiceImpl(STORE_MANAGER);
- ObjectService objSvc = new ObjectServiceImpl(STORE_MANAGER);
- RepositoryService repSvc = new RepositoryServiceImpl(STORE_MANAGER);
+ NavigationService navSvc = new NavigationServiceImpl(fStoreManager);
+ ObjectService objSvc = new ObjectServiceImpl(fStoreManager);
+ RepositoryService repSvc = new RepositoryServiceImpl(fStoreManager);
- String levelsStr = cfgReader.get(ConfigConstants.FILLER_DEPTH);
+ String levelsStr = parameters.get(ConfigConstants.FILLER_DEPTH);
int levels = 1;
if (null!=levelsStr)
levels = Integer.parseInt(levelsStr);
- String docsPerLevelStr = cfgReader.get(ConfigConstants.FILLER_DOCS_PER_FOLDER);
+ String docsPerLevelStr = parameters.get(ConfigConstants.FILLER_DOCS_PER_FOLDER);
int docsPerLevel = 1;
if (null!=docsPerLevelStr)
docsPerLevel = Integer.parseInt(docsPerLevelStr);
- String childrenPerLevelStr = cfgReader.get(ConfigConstants.FILLER_FOLDERS_PER_FOLDER);
+ String childrenPerLevelStr = parameters.get(ConfigConstants.FILLER_FOLDERS_PER_FOLDER);
int childrenPerLevel = 2;
if (null!=childrenPerLevelStr)
childrenPerLevel = Integer.parseInt(childrenPerLevelStr);
- String documentTypeId = cfgReader.get(ConfigConstants.FILLER_DOCUMENT_TYPE_ID);
+ String documentTypeId = parameters.get(ConfigConstants.FILLER_DOCUMENT_TYPE_ID);
if (null == documentTypeId)
documentTypeId = BaseObjectTypeIds.CMIS_DOCUMENT.value();
- String folderTypeId = cfgReader.get(ConfigConstants.FILLER_FOLDER_TYPE_ID);
+ String folderTypeId = parameters.get(ConfigConstants.FILLER_FOLDER_TYPE_ID);
if (null == folderTypeId)
folderTypeId = BaseObjectTypeIds.CMIS_FOLDER.value();
int contentSizeKB = 0;
- String contentSizeKBStr = cfgReader.get(ConfigConstants.FILLER_CONTENT_SIZE);
+ String contentSizeKBStr = parameters.get(ConfigConstants.FILLER_CONTENT_SIZE);
if (null!=contentSizeKBStr)
contentSizeKB = Integer.parseInt(contentSizeKBStr);
@@ -211,19 +226,19 @@
// set the properties the generator should fill with values for documents:
// Note: must be valid properties in configured document and folder type
- List<String> propsToSet = readPropertiesToSetFromConfig(cfgReader,
+ List<String> propsToSet = readPropertiesToSetFromConfig(parameters,
ConfigConstants.FILLER_DOCUMENT_PROPERTY);
if (null != propsToSet)
gen.setDocumentPropertiesToGenerate(propsToSet);
- propsToSet = readPropertiesToSetFromConfig(cfgReader,
+ propsToSet = readPropertiesToSetFromConfig(parameters,
ConfigConstants.FILLER_FOLDER_PROPERTY);
if (null != propsToSet)
gen.setFolderPropertiesToGenerate(propsToSet);
// Simulate a runtime context with configuration parameters
// Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(cfgReader);
+ RuntimeContext.getRuntimeConfig().attachCfg(new DummyCallContext());
// Build the tree
RepositoryInfoData rep = repSvc.getRepositoryInfo(repositoryId, null);
@@ -240,11 +255,11 @@
}
- private List<String> readPropertiesToSetFromConfig(MapConfigReader cfgReader, String keyPrefix) {
+ private List<String> readPropertiesToSetFromConfig(Map<String, String> parameters, String keyPrefix) {
List<String> propsToSet = new ArrayList<String>();
for (int i=0; ; ++i) {
String propertyKey = keyPrefix + Integer.toString(i);
- String propertyToAdd = cfgReader.get(propertyKey);
+ String propertyToAdd = parameters.get(propertyKey);
if (null == propertyToAdd)
break;
else
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Children.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/Children.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Children.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Children.java Mon Feb 22 08:58:39 2010
@@ -57,7 +57,7 @@
/**
* get all the children of this folder. To support paging an initial offset and a
- * maximum number of childrent to retrieve can be passed
+ * maximum number of children to retrieve can be passed
*
* @param maxItems
* max. number of items to return
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Content.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/Content.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Content.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/Content.java Mon Feb 22 08:58:39 2010
@@ -26,7 +26,7 @@
* @return
* object containing mime-type, length and a stream with content
*/
- ContentStreamData getContent();
+ ContentStreamData getContent(long offset, long length);
/**
* Assign content do a document. Existing content gets overwritten.
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/DocumentVersion.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/DocumentVersion.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/DocumentVersion.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/DocumentVersion.java Mon Feb 22 08:58:39 2010
@@ -27,6 +27,6 @@
* @author Jens
*
*/
-public interface DocumentVersion extends Version, Content, StoredObject {
+public interface DocumentVersion extends Version, Content, StoredObject, Path {
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/StoreManager.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/StoreManager.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/StoreManager.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/StoreManager.java Mon Feb 22 08:58:39 2010
@@ -24,7 +24,6 @@
import org.apache.opencmis.commons.api.TypeDefinitionContainer;
import org.apache.opencmis.commons.provider.ProviderObjectFactory;
import org.apache.opencmis.commons.provider.RepositoryInfoData;
-import org.apache.opencmis.inmemory.ConfigMap;
import org.apache.opencmis.inmemory.RepositoryInfo;
/**
@@ -44,14 +43,17 @@
List<String> getAllRepositoryIds();
/**
- * Initialize the store for the given repository (first call done on a StoreManager after creation)
+ * Initialize the store for the given repository. Only called for repositories
+ * that exist on startup (i.e. for each repository id returned in a previous
+ * getAllRepositoryIds() call.
+ *
* @param repositoryId
* id of repository to initialize
* @param isCreated
* true if the repository was just created and is initialized for the first time
* false if it existed before and is reloaded
*/
- public void initRepository(String repositoryId, boolean isCreated);
+ public void initRepository(String repositoryId);
/**
* get the object store for the given repository id.
@@ -62,12 +64,16 @@
ObjectStore getObjectStore(String repositoryId);
/**
- * create a new repository with the given id
+ * create a new repository with the given id. Create the repository, initiate
+ * the type system and initialize it so that it is ready for use
*
* @param repositoryId
* id of repository
+ * @param typeCreatorClassName
+ * class implementing the type creation, the class must implement the interface
+ * TypeCreator
*/
- void createRepository(String repositoryId);
+ void createAndInitRepository(String repositoryId, String typeCreatorClassName);
/**
* load an existing repository with the given id
@@ -79,16 +85,6 @@
/**
- * retrieve a parameter that a client has attached to a session
- *
- * @param parameter
- * name of the parameter
- * @return
- * value of the parameter
- */
- String getParameter(String parameter);
-
- /**
* retrieve a list with all type definitions.
* @param repositoryId
* id of repository
@@ -139,36 +135,4 @@
*/
RepositoryInfoData getRepositoryInfo(String repositoryId);
- /**
- * Initialize the type system. Helper class to create types in the repository
- * implemented in an implementation specific way. CMIS does not yet provide a
- * standard to create type definitions. The SPI will call this method in case
- * a class name was attached to the session. The implementation of this method
- * should call initTypeSystem of the StoreManager to add the types to the
- * system.
- *
- * @param repositoryId
- * id of repository where this type gets stored
- * @param typeCreatorClassName
- * class implementing the type creation, the class must implement the interface
- * TypeCreator
- *
- */
- void initTypeSystem(String repositoryId, String typeCreatorClassName);
-
- /**
- * Initialize the repository information. A client can assign specific values that
- * should be set for subsequent getRepositoryInfo() call. Mainly uses for unit tests.
- *
- * @param repoInfoCreatorClassName
- * class name of class setting repository information. The class must implement
- * the interface RepositoryInfoCreator
- */
- void initRepositoryInfo(String repositoryInfo, String repoInfoCreatorClassName);
-
- /**
- * Assign a reader that can retrieve context parameters to this repository manager
- * @param session
- */
- void setConfigReader(ConfigMap configMap);
}
\ No newline at end of file
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/StoredObject.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/StoredObject.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/StoredObject.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/StoredObject.java Mon Feb 22 08:58:39 2010
@@ -203,7 +203,7 @@
*/
void updateSystemBasePropertiesWhenModified(Map<String, PropertyData<?>> properties, String user);
- void fillProperties(List<PropertyData<?>> properties, ProviderObjectFactory objFactory,
+ void fillProperties(Map<String, PropertyData<?>> properties, ProviderObjectFactory objFactory,
List<String> requestedIds);
/**
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/VersionedDocument.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/VersionedDocument.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/VersionedDocument.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/api/VersionedDocument.java Mon Feb 22 08:58:39 2010
@@ -36,6 +36,17 @@
DocumentVersion addVersion(ContentStreamData content, VersioningState verState, String user);
+ /**
+ * delete a version from this object, throw exception if document is checked out
+ * or document does not contain this version
+ * @param version
+ * version to be removed
+ * @return
+ * true if version could be removed, and other versions exist,
+ * false if the deleted version was the last version in this document
+ */
+ boolean deleteVersion(DocumentVersion version);
+
boolean isCheckedOut();
void cancelCheckOut(String user);
@@ -44,7 +55,7 @@
void checkIn(boolean isMajor, String checkinComment, String user);
- List<DocumentVersion> getAllVersions(String filter);
+ List<DocumentVersion> getAllVersions();
DocumentVersion getLatestVersion(boolean major);
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=912517&r1=912516&r2=912517&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 Mon Feb 22 08:58:39 2010
@@ -40,20 +40,15 @@
Path {
protected FolderImpl fParent;
- protected ObjectStoreImpl fObjStore;
protected AbstractPathImpl(ObjectStoreImpl objStore) {
- fObjStore = objStore;
+ super(objStore);
}
-
- public String getId() {
- return getPath();
- }
-
+
/*
* (non-Javadoc)
*
- * @see org.apache.opencmis.client.provider.spi.inmemory.StoredObjectWithPath#getPath()
+ * @see org.opencmis.client.provider.spi.inmemory.StoredObjectWithPath#getPath()
*/
public String getPath() {
StringBuffer path= new StringBuffer(getName());
@@ -76,14 +71,14 @@
/*
* (non-Javadoc)
*
- * @see org.apache.opencmis.client.provider.spi.inmemory.StoredObjectWithPath#getParent()
+ * @see org.opencmis.client.provider.spi.inmemory.StoredObjectWithPath#getParent()
*/
public Folder getParent() {
return fParent;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.storedobj.api.StoredObjectWithPath#setParent(org.apache.opencmis.client.provider.spi.inmemory.storedobj.api.Folder)
+ * @see org.opencmis.client.provider.spi.inmemory.storedobj.api.StoredObjectWithPath#setParent(org.opencmis.client.provider.spi.inmemory.storedobj.api.Folder)
*/
public void setParent(Folder parent) {
fParent = (FolderImpl) parent;
@@ -98,16 +93,16 @@
throw new IllegalArgumentException("Cannot rename object to " + newName
+ ". This path already exists.");
- String oldPath = getPath();
+// String oldPath = getPath();
setName(newName);
- String newPath = getPath();
- fObjStore.changePath(this, oldPath, newPath);
+// String newPath = getPath();
+// fObjStore.changePath(this, oldPath, newPath);
}
public void move(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((Document) this, newParent);
+ fParent.moveChildDocument(this, newParent);
else {// it must be a folder
if (getParent() == null)
throw new IllegalArgumentException("Root folder cannot be moved.");
@@ -117,11 +112,11 @@
throw new IllegalArgumentException(
"Cannot move folder, this name already exists in target.");
- String oldPath = getPath(); // old path
+// String oldPath = getPath(); // old path
setParent(newParent);
- String newPath = getPath(); // new path
+// String newPath = getPath(); // new path
- fObjStore.renameAllIdsWithPrefix(oldPath, newPath);
+// fObjStore.renameAllIdsWithPrefix(oldPath, newPath);
// fId = newPath;
}
// fId = getPath(); // as we use path the id will change
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.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/ContentStreamDataImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java Mon Feb 22 08:58:39 2010
@@ -17,9 +17,14 @@
private String fFileName;
- byte[] fContent;
+ private byte[] fContent;
+
+ private long fStreamLimitOffset;
+
+ private long fStreamLimitLength;
public void setContent (InputStream in) throws IOException {
+ fStreamLimitOffset = fStreamLimitLength = -1;
if (null == in) {
fContent = null; // delete content
fLength = 0;
@@ -64,10 +69,25 @@
public InputStream getStream() {
if (null == fContent)
return null;
- else
+ else if (fStreamLimitOffset <= 0 && fStreamLimitLength < 0)
return new ByteArrayInputStream(fContent);
+ else
+ return new ByteArrayInputStream(fContent, (int)(fStreamLimitOffset<0 ? 0 : fStreamLimitOffset),
+ (int)(fStreamLimitLength<0 ? fLength : fStreamLimitLength));
+ }
+
+ public ContentStreamData getCloneWithLimits(long offset, long length) {
+ ContentStreamDataImpl clone = new ContentStreamDataImpl();
+ clone.fFileName = fFileName;
+ clone.fLength = fLength;
+ clone.fContent = fContent;
+ clone.fMimeType = fMimeType;
+ clone.fStreamLimitOffset = offset;
+ clone.fStreamLimitLength = length;
+ return clone;
}
-
+
+
public List<Object> getExtensions() {
return null;
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentImpl.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/DocumentImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/DocumentImpl.java Mon Feb 22 08:58:39 2010
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.util.List;
+import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -49,17 +50,20 @@
/*
* (non-Javadoc)
*
- * @see org.apache.opencmis.client.provider.spi.inmemory.IDocument#getContent()
+ * @see org.opencmis.client.provider.spi.inmemory.IDocument#getContent()
*/
- public ContentStreamData getContent() {
- return fContent;
+ public ContentStreamData getContent(long offset, long length) {
+ if (offset<=0 && length<0)
+ return fContent;
+ else
+ return fContent.getCloneWithLimits(offset, length);
}
/*
* (non-Javadoc)
*
* @see
- * org.apache.opencmis.client.provider.spi.inmemory.IDocument#setContent(org.apache.opencmis.client.provider
+ * org.opencmis.client.provider.spi.inmemory.IDocument#setContent(org.opencmis.client.provider
* .ContentStreamData)
*/
public void setContent(ContentStreamData content, boolean mustPersist) {
@@ -80,12 +84,7 @@
}
}
- public void persist() {
- // The in-memory provider doesn't have to do anything here, but sets the id
- fId = getPath();
- }
-
- public void fillProperties(List<PropertyData<?>> properties, ProviderObjectFactory objFactory,
+ public void fillProperties(Map<String, PropertyData<?>> properties, ProviderObjectFactory objFactory,
List<String> requestedIds) {
super.fillProperties(properties, objFactory, requestedIds);
@@ -93,29 +92,29 @@
// fill the version related properties (versions should override this but the spec requires some
// properties always to be set
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_LATEST_VERSION, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_LATEST_VERSION, true));
+ properties.put(PropertyIds.CMIS_IS_LATEST_VERSION, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_LATEST_VERSION, true));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_MAJOR_VERSION, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_MAJOR_VERSION, true));
+ properties.put(PropertyIds.CMIS_IS_MAJOR_VERSION, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_MAJOR_VERSION, true));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, true));
+ properties.put(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, true));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_ID, requestedIds)) {
// return id of document itself
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_ID, getId()));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_ID, objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_ID, getId()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, false));
+ properties.put(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, false));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, (String)null));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, objFactory.createPropertyStringData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, (String)null));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, requestedIds)) {
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, (String)null));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, (String)null));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_CHECKIN_COMMENT, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_CHECKIN_COMMENT, (String)null));
+ properties.put(PropertyIds.CMIS_CHECKIN_COMMENT, objFactory.createPropertyStringData(PropertyIds.CMIS_CHECKIN_COMMENT, (String)null));
}
// optional:
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=912517&r1=912516&r2=912517&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 Mon Feb 22 08:58:39 2010
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
import org.apache.opencmis.commons.PropertyIds;
@@ -30,6 +31,7 @@
import org.apache.opencmis.commons.provider.ProviderObjectFactory;
import org.apache.opencmis.inmemory.FilterParser;
import org.apache.opencmis.inmemory.storedobj.api.DocumentVersion;
+import org.apache.opencmis.inmemory.storedobj.api.Folder;
import org.apache.opencmis.inmemory.storedobj.api.VersionedDocument;
/**
@@ -47,7 +49,8 @@
boolean fIsPwc; // true if this is the PWC
public DocumentVersionImpl(String repositoryId, VersionedDocument container, ContentStreamData content,
- VersioningState verState) {
+ VersioningState verState, ObjectStoreImpl objStore) {
+ super(objStore);
setRepositoryId(repositoryId);
fContainer = container;
setContent(content, false);
@@ -80,7 +83,7 @@
public String getVersionLabel() {
int majorNo = 0;
int minorNo = 0;
- List<DocumentVersion> allVersions = fContainer.getAllVersions(null);
+ List<DocumentVersion> allVersions = fContainer.getAllVersions();
for (DocumentVersion ver : allVersions) {
if (ver.isMajor()) {
++majorNo;
@@ -105,8 +108,11 @@
fIsMajor = isMajor;
}
- public ContentStreamData getContent() {
- return fContent;
+ public ContentStreamData getContent(long offset, long length) {
+ if (offset<=0 && length<0)
+ return fContent;
+ else
+ return fContent.getCloneWithLimits(offset, length);
}
public VersionedDocument getParentDocument() {
@@ -114,7 +120,7 @@
}
private boolean isLatestVersion() {
- List<DocumentVersion> allVers = fContainer.getAllVersions(null);
+ List<DocumentVersion> allVers = fContainer.getAllVersions();
boolean isLatestVersion;
if (isPwc())
isLatestVersion = allVers.size()>1 && allVers.get(allVers.size()-2).equals(this);
@@ -127,7 +133,7 @@
if (!fIsMajor)
return false;
- List<DocumentVersion> allVersions = fContainer.getAllVersions(null);
+ List<DocumentVersion> allVersions = fContainer.getAllVersions();
DocumentVersion latestMajor=null;
for (DocumentVersion ver : allVersions)
@@ -138,12 +144,12 @@
return isLatestMajorVersion;
}
- public void persist() {
- if (null==fId)
- fId = UUID.randomUUID().toString();
- }
+// public void persist() {
+// if (null==fId)
+// fId = UUID.randomUUID().toString();
+// }
- public void fillProperties(List<PropertyData<?>> properties, ProviderObjectFactory objFactory,
+ public void fillProperties(Map<String, PropertyData<?>> properties, ProviderObjectFactory objFactory,
List<String> requestedIds) {
DocumentVersion pwc = fContainer.getPwc();
@@ -157,32 +163,48 @@
// fill the version related properties
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_LATEST_VERSION, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_LATEST_VERSION, isLatestVersion()));
+ properties.put(PropertyIds.CMIS_IS_LATEST_VERSION, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_LATEST_VERSION, isLatestVersion()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_MAJOR_VERSION, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_MAJOR_VERSION, fIsMajor));
+ properties.put(PropertyIds.CMIS_IS_MAJOR_VERSION, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_MAJOR_VERSION, fIsMajor));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, isLatestMajorVersion()));
+ properties.put(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, isLatestMajorVersion()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_ID, requestedIds)) {
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_ID, fContainer.getId()));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_ID, objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_ID, fContainer.getId()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, fContainer.isCheckedOut()));
+ properties.put(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, fContainer.isCheckedOut()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, fContainer.getCheckedOutBy()));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, objFactory.createPropertyStringData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, fContainer.getCheckedOutBy()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, requestedIds)) {
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, pwc == null ? null : pwc.getId()));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, pwc == null ? null : pwc.getId()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_CHECKIN_COMMENT, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_CHECKIN_COMMENT, fComment));
+ properties.put(PropertyIds.CMIS_CHECKIN_COMMENT, objFactory.createPropertyStringData(PropertyIds.CMIS_CHECKIN_COMMENT, fComment));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_LABEL, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_VERSION_LABEL, getVersionLabel()));
+ properties.put(PropertyIds.CMIS_VERSION_LABEL, objFactory.createPropertyStringData(PropertyIds.CMIS_VERSION_LABEL, getVersionLabel()));
}
}
+
+ public Folder getParent() {
+ return fContainer.getParent();
+ }
+
+ public String getPath() {
+ return fContainer.getPath();
+ }
+
+ public void move(Folder newParent) {
+ fContainer.move(newParent);
+ }
+
+ public void setParent(Folder parent) {
+ fContainer.setParent(parent);
+ }
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/FolderImpl.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/FolderImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/FolderImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/FolderImpl.java Mon Feb 22 08:58:39 2010
@@ -4,6 +4,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
+import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -13,6 +14,7 @@
import org.apache.opencmis.inmemory.FilterParser;
import org.apache.opencmis.inmemory.NameValidator;
import org.apache.opencmis.inmemory.storedobj.api.Document;
+import org.apache.opencmis.inmemory.storedobj.api.DocumentVersion;
import org.apache.opencmis.inmemory.storedobj.api.Folder;
import org.apache.opencmis.inmemory.storedobj.api.Path;
import org.apache.opencmis.inmemory.storedobj.api.StoredObject;
@@ -38,14 +40,14 @@
throw new RuntimeException("Cannot create folder " + name
+ ". Name already exists in parent folder");
folder.setParent(this);
- fObjStore.storeObject(folder.getPath(), folder);
+ folder.persist();
}
/*
* (non-Javadoc)
*
* @see
- * org.apache.opencmis.client.provider.spi.inmemory.IFolder#addChildDocument(org.apache.opencmis.client.provider
+ * org.opencmis.client.provider.spi.inmemory.IFolder#addChildDocument(org.opencmis.client.provider
* .spi.inmemory.storedobj.impl.DocumentImpl)
*/
public void addChildDocument(Document doc) {
@@ -73,23 +75,28 @@
else
documentPath += PATH_SEPARATOR + name;
((Path)so).setParent(this);
- fObjStore.storeObject(documentPath, so);
+ so.persist();
}
/*
* (non-Javadoc)
*
- * @see org.apache.opencmis.client.provider.spi.inmemory.IFolder#getChildren()
+ * @see org.opencmis.client.provider.spi.inmemory.IFolder#getChildren()
*/
public List<StoredObject> getChildren(int maxItems, int skipCount) {
List<StoredObject> result = new ArrayList<StoredObject>();
- String path = getPath();
for (String id : fObjStore.getIds()) {
StoredObject obj = fObjStore.getObject(id);
- if (obj instanceof Path) {
- Path pathObj = (Path) obj;
- if (pathObj.getParent() != null && path.equals(pathObj.getParent().getPath()))
- result.add(obj);
+ Path pathObj = (Path) obj;
+ if (pathObj.getParent() == this) {
+ if (pathObj instanceof VersionedDocument) {
+ DocumentVersion ver = ((VersionedDocument) pathObj).getLatestVersion(false);
+ result.add(ver);
+ } else if (pathObj instanceof DocumentVersion) {
+ // ignore
+ } else {
+ result.add(obj);
+ }
}
}
sortFolderList(result);
@@ -107,19 +114,16 @@
/*
* (non-Javadoc)
*
- * @see org.apache.opencmis.client.provider.spi.inmemory.IFolder#getFolderChildren()
+ * @see org.opencmis.client.provider.spi.inmemory.IFolder#getFolderChildren()
*/
public List<Folder> getFolderChildren(int maxItems, int skipCount) {
List<Folder> result = new ArrayList<Folder>();
- String path = getPath();
for (String id : fObjStore.getIds()) {
StoredObject obj = fObjStore.getObject(id);
if (obj instanceof Path) {
Path pathObj = (Path) obj;
- if (pathObj.getParent() != null && path.equals(pathObj.getParent().getPath())
- && pathObj instanceof Folder)
+ if (pathObj.getParent() == this && pathObj instanceof Folder)
result.add((Folder)obj);
-
}
}
sortFolderList(result);
@@ -132,48 +136,48 @@
/*
* (non-Javadoc)
*
- * @see org.apache.opencmis.client.provider.spi.inmemory.IFolder#hasChild(java.lang.String)
+ * @see org.opencmis.client.provider.spi.inmemory.IFolder#hasChild(java.lang.String)
*/
public boolean hasChild(String name) {
- String path = getPath();
- if (path.equals(PATH_SEPARATOR))
- path = path + name;
- else
- path = path + PATH_SEPARATOR + name;
- for (String objPath : fObjStore.getIds()) {
- if (path.equals(objPath))
- return true;
+// String path = getPath();
+// if (path.equals(PATH_SEPARATOR))
+// path = path + name;
+// else
+// path = path + PATH_SEPARATOR + name;
+ for (String id : fObjStore.getIds()) {
+ StoredObject obj = fObjStore.getObject(id);
+ if (obj instanceof Path) {
+ Path pathObj = (Path) obj;
+ if (pathObj.getParent() == this && obj.getName().equals(name))
+ return true;
+ }
}
return false;
}
- public void fillProperties(List<PropertyData<?>> properties, ProviderObjectFactory objFactory,
+ public void fillProperties(Map<String, PropertyData<?>> properties, ProviderObjectFactory objFactory,
List<String> requestedIds) {
super.fillProperties(properties, objFactory, requestedIds);
// add folder specific properties
- if (FilterParser.isContainedInFilter(PropertyIds.CMIS_OBJECT_ID, requestedIds)) {
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_ID, getPath()));
- // for folders we use the path as id in this provider
- }
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_PARENT_ID, requestedIds)) {
String parentId = getParent() == null ? null : getParent().getId();
if ( parentId != null )
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_PARENT_ID, parentId));
+ properties.put(PropertyIds.CMIS_PARENT_ID, objFactory.createPropertyStringData(PropertyIds.CMIS_PARENT_ID, parentId));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_ALLOWED_CHILD_OBJECT_TYPE_IDS,
requestedIds)) {
String allowedChildObjects = "*"; // TODO: not yet supported
- properties.add(objFactory.createPropertyStringData(
+ properties.put(PropertyIds.CMIS_ALLOWED_CHILD_OBJECT_TYPE_IDS, objFactory.createPropertyStringData(
PropertyIds.CMIS_ALLOWED_CHILD_OBJECT_TYPE_IDS, allowedChildObjects));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_PATH, requestedIds)) {
String path = getPath();
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_PATH, path));
+ properties.put(PropertyIds.CMIS_PATH, objFactory.createPropertyStringData(PropertyIds.CMIS_PATH, path));
}
}
@@ -201,21 +205,17 @@
Collections.sort(list, new FolderComparator());
}
- public void persist() {
- // The in-memory implementation doesn't have to do anything here, but sets the id
-// fId = getPath();
- }
-
- public void moveChildDocument(Document doc, Folder newParent) {
- if (newParent.hasChild(doc.getName()))
+ public void moveChildDocument(StoredObject so, Folder newParent) {
+ if (newParent.hasChild(so.getName()))
throw new IllegalArgumentException(
- "Cannot move folder, this name already exists in target.");
-
- String oldPath = doc.getPath(); // old path of document to move
- doc.setParent(newParent);
- String newPath = doc.getPath(); // new path of document to move
- fObjStore.removeObject(oldPath);
- fObjStore.storeObject(newPath, doc);
+ "Cannot move object, this name already exists in target.");
+ if (!(so instanceof Path))
+ throw new IllegalArgumentException(
+ "Cannot move object, object does not have a path.");
+
+ Path pathObj = (Path) so;
+ pathObj.setParent(newParent);
+ // so.persist(); // not needed for in memory
}
public List<String> getAllowedChildObjectTypeIds() {
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.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/ObjectStoreImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java Mon Feb 22 08:58:39 2010
@@ -29,6 +29,7 @@
import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
import org.apache.opencmis.commons.exceptions.CmisConstraintException;
import org.apache.opencmis.inmemory.storedobj.api.Document;
+import org.apache.opencmis.inmemory.storedobj.api.DocumentVersion;
import org.apache.opencmis.inmemory.storedobj.api.Folder;
import org.apache.opencmis.inmemory.storedobj.api.ObjectStore;
import org.apache.opencmis.inmemory.storedobj.api.Path;
@@ -45,6 +46,11 @@
public class ObjectStoreImpl implements ObjectStore {
/**
+ * Simple id generator that uses just an integer
+ */
+ private static int NEXT_UNUSED_ID = 100;
+
+ /**
* Maps the absolute folder path to the corresponding folder object
*/
private Map<String, StoredObject> fStoredObjectMap = new HashMap<String, StoredObject>();
@@ -56,12 +62,15 @@
createRootFolder();
}
+ private static synchronized Integer getNextId() {
+ return NEXT_UNUSED_ID++;
+ }
/*
* (non-Javadoc)
*
- * @see org.apache.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getRootFolder()
+ * @see org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getRootFolder()
*/
public Folder getRootFolder() {
return fRootFolder;
@@ -71,19 +80,26 @@
* (non-Javadoc)
*
* @see
- * org.apache.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getFolderByPath(java.lang
+ * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getFolderByPath(java.lang
* .String)
*/
public StoredObject getObjectByPath(String path) {
- StoredObject obj = fStoredObjectMap.get(path);
- return obj;
+
+ for (StoredObject so : fStoredObjectMap.values()) {
+ if (so instanceof Path) {
+ String soPath = ((Path) so).getPath();
+ if (soPath.equals(path))
+ return so;
+ }
+ }
+ return null;
}
/*
* (non-Javadoc)
*
* @see
- * org.apache.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getObjectById(java.lang
+ * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getObjectById(java.lang
* .String)
*/
public StoredObject getObjectById(String objectId) {
@@ -96,7 +112,7 @@
* (non-Javadoc)
*
* @see
- * org.apache.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#deleteObject(java.lang
+ * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#deleteObject(java.lang
* .String)
*/
public void deleteObject(String objectId) {
@@ -110,23 +126,47 @@
if (obj instanceof FolderImpl) {
deleteFolder(objectId);
}
+ else if (obj instanceof DocumentVersion ){
+ DocumentVersion vers = (DocumentVersion) obj;
+ VersionedDocument parentDoc = vers.getParentDocument();
+ fStoredObjectMap.remove(path);
+ boolean otherVersionsExist = vers.getParentDocument().deleteVersion(vers);
+ if (!otherVersionsExist)
+ fStoredObjectMap.remove(parentDoc.getId());
+ }
else {
fStoredObjectMap.remove(path);
}
}
+ public void removeVersion(DocumentVersion vers) {
+ StoredObject found = fStoredObjectMap.remove(vers.getId());
- public void changePath(StoredObject obj, String oldPath, String newPath) {
- fStoredObjectMap.remove(oldPath);
- fStoredObjectMap.put(newPath, obj);
+ if (null == found)
+ throw new RuntimeException("Cannot delete object with id " + vers.getId()
+ + ". Object does not exist.");
}
+
+// public void changePath(StoredObject obj, String oldPath, String newPath) {
+// fStoredObjectMap.remove(oldPath);
+// fStoredObjectMap.put(newPath, obj);
+// }
// /////////////////////////////////////////
// methods used by folders and documents, but not for public use
- void storeObject(String id, StoredObject sop) {
- fStoredObjectMap.put(id, sop);
+// void storeObject(String id, StoredObject sop) {
+// fStoredObjectMap.put(id, sop);
+// }
+
+ public String storeObject(StoredObject so) {
+ String id = so.getId();
+ // check if update or create
+ if (null == id)
+ id = getNextId().toString();
+ fStoredObjectMap.put(id, so);
+ return id;
}
-
+
StoredObject getObject(String id) {
return fStoredObjectMap.get(id);
}
@@ -140,24 +180,24 @@
return entries;
}
- void renameAllIdsWithPrefix(String oldPath, String newPath) {
- Iterator<Entry<String, StoredObject>> it = fStoredObjectMap.entrySet().iterator();
- Map<String, StoredObject> newMap = new HashMap<String, StoredObject>();
- while (it.hasNext()) {
- Map.Entry<String, StoredObject> entry = (Map.Entry<String, StoredObject>) it
- .next();
-
- if (entry.getKey().startsWith(oldPath)) {
- if (entry.getValue() instanceof Path) {
- newPath = ((Path)entry.getValue()).getPath();
- it.remove(); // the only safe way to modify while iteration
- newMap.put(newPath, entry.getValue()); // we can't add to the current collection while
- // iterating
- }
- }
- }
- fStoredObjectMap.putAll(newMap); // add all at once when iteration is complete
- }
+// void renameAllIdsWithPrefix(String oldPath, String newPath) {
+// Iterator<Entry<String, StoredObject>> it = fStoredObjectMap.entrySet().iterator();
+// Map<String, StoredObject> newMap = new HashMap<String, StoredObject>();
+// while (it.hasNext()) {
+// Map.Entry<String, StoredObject> entry = (Map.Entry<String, StoredObject>) it
+// .next();
+//
+// if (entry.getKey().startsWith(oldPath)) {
+// if (entry.getValue() instanceof Path) {
+// newPath = ((Path)entry.getValue()).getPath();
+// it.remove(); // the only safe way to modify while iteration
+// newMap.put(newPath, entry.getValue()); // we can't add to the current collection while
+// // iterating
+// }
+// }
+// }
+// fStoredObjectMap.putAll(newMap); // add all at once when iteration is complete
+// }
// /////////////////////////////////////////
// private helper methods
@@ -171,8 +211,7 @@
rootFolder.setModifiedBy("Admin");
rootFolder.setModifiedAtNow();
rootFolder.setRepositoryId(fRepositoryId);
-
- fStoredObjectMap.put(Path.PATH_SEPARATOR, rootFolder);
+ rootFolder.persist();
fRootFolder = rootFolder;
}
@@ -212,23 +251,20 @@
}
private void deleteFolder(String folderId) {
- String path = folderId; // we use path as id
- StoredObject obj = fStoredObjectMap.get(path);
- if (obj != null) {
- if (!(obj instanceof FolderImpl))
- throw new RuntimeException("Cannot delete folder with path: " + path
+ StoredObject folder = fStoredObjectMap.get(folderId);
+ if (folder != null) {
+ if (!(folder instanceof FolderImpl))
+ throw new RuntimeException("Cannot delete folder with id: " + folderId
+ ". Object exists but is not a folder.");
}
// check if children exist
- fStoredObjectMap.remove(path);
- for (String objPath : fStoredObjectMap.keySet()) {
- if (objPath.startsWith(path)) {
- fStoredObjectMap.put(path, obj); // restore object
- throw new CmisConstraintException("Cannot delete folder with path: " + path
- + ". Folder is not empty.");
- }
- }
+ List<StoredObject> children = ((Folder)folder).getChildren(-1, -1);
+ if (children!=null && !children.isEmpty())
+ throw new CmisConstraintException("Cannot delete folder with id: " + folderId
+ + ". Folder is not empty.");
+
+ fStoredObjectMap.remove(folderId);
}
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/StoreManagerImpl.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/StoreManagerImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java Mon Feb 22 08:58:39 2010
@@ -27,6 +27,7 @@
import org.apache.opencmis.commons.api.TypeDefinition;
import org.apache.opencmis.commons.api.TypeDefinitionContainer;
+import org.apache.opencmis.commons.enums.CapabilityAcl;
import org.apache.opencmis.commons.enums.CapabilityChanges;
import org.apache.opencmis.commons.enums.CapabilityContentStreamUpdates;
import org.apache.opencmis.commons.enums.CapabilityJoin;
@@ -37,7 +38,6 @@
import org.apache.opencmis.commons.impl.dataobjects.RepositoryInfoDataImpl;
import org.apache.opencmis.commons.provider.ProviderObjectFactory;
import org.apache.opencmis.commons.provider.RepositoryInfoData;
-import org.apache.opencmis.inmemory.ConfigMap;
import org.apache.opencmis.inmemory.RepositoryInfo;
import org.apache.opencmis.inmemory.RepositoryInfoCreator;
import org.apache.opencmis.inmemory.TypeCreator;
@@ -54,7 +54,6 @@
public class StoreManagerImpl implements StoreManager {
protected ProviderObjectFactory fObjectFactory;
- protected ConfigMap fConfigMap;
protected RepositoryInfoData fRepositoryInfo;
/**
@@ -77,10 +76,6 @@
fObjectFactory = new ProviderObjectFactoryImpl();
}
- public void setConfigReader(ConfigMap configMap) {
- fConfigMap = configMap;
- }
-
public List<String> getAllRepositoryIds() {
Set<String> repIds = fMapRepositoryToObjectStore.keySet();
List<String> result = new ArrayList<String>();
@@ -88,18 +83,24 @@
return result;
}
- public void initRepository(String repositoryId, boolean isCreated) {
- TypeManager typeManager;
- if (isCreated)
- typeManager = fMapRepositoryToTypeManager.get(repositoryId);
- else {
- typeManager = new TypeManager();
- fMapRepositoryToObjectStore.put(repositoryId, new ObjectStoreImpl(repositoryId));
- fMapRepositoryToTypeManager.put(repositoryId, typeManager);
- }
-
+ public void initRepository(String repositoryId) {
+ fMapRepositoryToObjectStore.put(repositoryId, new ObjectStoreImpl(repositoryId));
+ fMapRepositoryToTypeManager.put(repositoryId, new TypeManager());
}
+ public void createAndInitRepository(String repositoryId, String typeCreatorClassName) {
+ if (fMapRepositoryToObjectStore.containsKey(repositoryId)
+ || fMapRepositoryToTypeManager.containsKey(repositoryId))
+ throw new RuntimeException("Cannot add repository, repository " + repositoryId
+ + " already exists.");
+
+ fMapRepositoryToObjectStore.put(repositoryId, new ObjectStoreImpl(repositoryId));
+ fMapRepositoryToTypeManager.put(repositoryId, new TypeManager());
+
+ // initialize the type system:
+ initTypeSystem(repositoryId, typeCreatorClassName);
+ }
+
public ObjectStore getObjectStore(String repositoryId) {
return fMapRepositoryToObjectStore.get(repositoryId);
}
@@ -108,10 +109,6 @@
return fObjectFactory;
}
- public String getParameter(String parameter) {
- return fConfigMap.get(parameter);
- }
-
public TypeDefinitionContainer getTypeById(String repositoryId, String typeId) {
TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
if (null == typeManager)
@@ -150,7 +147,7 @@
return repoInfo;
}
- public void initTypeSystem(String repositoryId, String typeCreatorClassName) {
+ private void initTypeSystem(String repositoryId, String typeCreatorClassName) {
List<TypeDefinition> typeDefs = null;
TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
@@ -209,22 +206,14 @@
createDefaultRepositoryInfo(repositoryId);
}
}
-
- public void createRepository(String repositoryId) {
- if (fMapRepositoryToObjectStore.containsKey(repositoryId)
- || fMapRepositoryToTypeManager.containsKey(repositoryId))
- throw new RuntimeException("Cannot add repository, repository " + repositoryId
- + " already exists.");
-
- fMapRepositoryToObjectStore.put(repositoryId, new ObjectStoreImpl(repositoryId));
- fMapRepositoryToTypeManager.put(repositoryId, new TypeManager());
- }
public RepositoryInfo loadRepository(String repositoryId) {
return null;
}
private RepositoryInfoData createDefaultRepositoryInfo(String repositoryId) {
+ ObjectStore objStore = getObjectStore(repositoryId);
+ String rootFolderId = objStore.getRootFolder().getId();
// repository info
RepositoryInfoDataImpl repoInfo;
repoInfo = new RepositoryInfoDataImpl();
@@ -233,7 +222,7 @@
repoInfo.setRepositoryDescription("InMemory Test Repository");
repoInfo.setCmisVersionSupported("1.0");
repoInfo.setRepositoryCapabilities(null);
- repoInfo.setRootFolder("/");
+ repoInfo.setRootFolder(rootFolderId);
repoInfo.setPrincipalAnonymous("anonymous");
repoInfo.setPrincipalAnyone("anyone");
repoInfo.setThinClientUri(null);
@@ -247,9 +236,9 @@
// set capabilities
RepositoryCapabilitiesDataImpl caps = new RepositoryCapabilitiesDataImpl();
caps.setAllVersionsSearchable(false);
- caps.setCapabilityAcl(org.apache.opencmis.commons.enums.CapabilityAcl.NONE);
+ caps.setCapabilityAcl(CapabilityAcl.NONE);
caps.setCapabilityChanges(CapabilityChanges.PROPERTIES); // just for testing
- caps.setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates.ANYTIME);
+ caps.setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates.PWCONLY);
caps.setCapabilityJoin(CapabilityJoin.NONE);
caps.setCapabilityQuery(CapabilityQuery.METADATAONLY); // just for testing
caps.setCapabilityRendition(CapabilityRendition.NONE);
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/StoredObjectImpl.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/StoredObjectImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java Mon Feb 22 08:58:39 2010
@@ -54,100 +54,102 @@
protected GregorianCalendar fModifiedAt;
protected String fRepositoryId;
protected Map<String, PropertyData<?>> fProperties;
+ protected ObjectStoreImpl fObjStore;
- StoredObjectImpl() { // visibility should be package
+ StoredObjectImpl(ObjectStoreImpl objStore) { // visibility should be package
GregorianCalendar now = getNow();
now.setTime(new Date());
fCreatedAt = now;
fModifiedAt = now;
+ fObjStore = objStore;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#getId()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#getId()
*/
public String getId() {
return fId;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#getName()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#getName()
*/
public String getName() {
return fName;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#setName(java.lang.String)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#setName(java.lang.String)
*/
public void setName(String name) {
fName = name;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#getTypeId()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#getTypeId()
*/
public String getTypeId() {
return fTypeId;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#setTypeId(java.lang.String)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#setTypeId(java.lang.String)
*/
public void setTypeId(String type) {
fTypeId = type;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#getCreatedBy()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#getCreatedBy()
*/
public String getCreatedBy() {
return fCreatedBy;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#setCreatedBy(java.lang.String)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#setCreatedBy(java.lang.String)
*/
public void setCreatedBy(String createdBy) {
this.fCreatedBy = createdBy;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#getModifiedBy()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#getModifiedBy()
*/
public String getModifiedBy() {
return fModifiedBy;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#setModifiedBy(java.lang.String)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#setModifiedBy(java.lang.String)
*/
public void setModifiedBy(String modifiedBy) {
this.fModifiedBy = modifiedBy;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#getCreatedAt()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#getCreatedAt()
*/
public GregorianCalendar getCreatedAt() {
return fCreatedAt;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#setCreatedAt(java.util.GregorianCalendar)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#setCreatedAt(java.util.GregorianCalendar)
*/
public void setCreatedAt(GregorianCalendar createdAt) {
this.fCreatedAt = createdAt;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#getModifiedAt()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#getModifiedAt()
*/
public GregorianCalendar getModifiedAt() {
return fModifiedAt;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#setModifiedAtNow()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#setModifiedAtNow()
*/
public void setModifiedAtNow() {
this.fModifiedAt = getNow();
@@ -162,20 +164,20 @@
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#setProperties(java.util.Map)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#setProperties(java.util.Map)
*/
public void setProperties(Map<String, PropertyData<?>> props) {
fProperties = props;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#getProperties()
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#getProperties()
*/
public Map<String, PropertyData<?>> getProperties() {
return fProperties;
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.storedobj.api.StoredObject#getChangeToken()
+ * @see org.opencmis.client.provider.spi.inmemory.storedobj.api.StoredObject#getChangeToken()
*/
public String getChangeToken() {
GregorianCalendar lastModified = getModifiedAt();
@@ -189,7 +191,7 @@
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#createSystemBasePropertiesWhenCreated(java.util.Map, java.lang.String)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#createSystemBasePropertiesWhenCreated(java.util.Map, java.lang.String)
*/
public void createSystemBasePropertiesWhenCreated(
Map<String, PropertyData<?>> properties,
@@ -198,7 +200,7 @@
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#updateSystemBasePropertiesWhenModified(java.util.Map, java.lang.String)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#updateSystemBasePropertiesWhenModified(java.util.Map, java.lang.String)
*/
public void updateSystemBasePropertiesWhenModified(
Map<String, PropertyData<?>> properties,
@@ -207,45 +209,45 @@
}
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#fillProperties(java.util.List, org.apache.opencmis.client.provider.ProviderObjectFactory, java.util.List)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#fillProperties(java.util.List, org.opencmis.client.provider.ProviderObjectFactory, java.util.List)
*/
- public void fillProperties(List<PropertyData<?>> properties,
+ public void fillProperties(Map<String, PropertyData<?>> properties,
ProviderObjectFactory objFactory, List<String> requestedIds) {
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_NAME, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_NAME, getName()));
+ properties.put(PropertyIds.CMIS_NAME, objFactory.createPropertyStringData(PropertyIds.CMIS_NAME, getName()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_OBJECT_ID, requestedIds)) {
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_ID, getId()));
+ properties.put(PropertyIds.CMIS_OBJECT_ID, objFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_ID, getId()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_OBJECT_TYPE_ID, requestedIds)) {
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID, getTypeId()));
+ properties.put(PropertyIds.CMIS_OBJECT_TYPE_ID, objFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID, getTypeId()));
}
// set the base type id outside becaus it requires the type definition
// if (FilterParser.isContainedInFilter(PropertyIds.CMIS_BASE_TYPE_ID, requestedIds)) {
// properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_BASE_TYPE_ID, getBaseTypeId()));
// }
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_CREATED_BY, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_CREATED_BY, getCreatedBy()));
+ properties.put(PropertyIds.CMIS_CREATED_BY, objFactory.createPropertyStringData(PropertyIds.CMIS_CREATED_BY, getCreatedBy()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_CREATION_DATE, requestedIds)) {
- properties.add(objFactory.createPropertyDateTimeData(PropertyIds.CMIS_CREATION_DATE, getCreatedAt()));
+ properties.put(PropertyIds.CMIS_CREATION_DATE, objFactory.createPropertyDateTimeData(PropertyIds.CMIS_CREATION_DATE, getCreatedAt()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_LAST_MODIFIED_BY, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_LAST_MODIFIED_BY, getModifiedBy()));
+ properties.put(PropertyIds.CMIS_LAST_MODIFIED_BY, objFactory.createPropertyStringData(PropertyIds.CMIS_LAST_MODIFIED_BY, getModifiedBy()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_LAST_MODIFICATION_DATE, requestedIds)) {
- properties.add(objFactory.createPropertyDateTimeData(PropertyIds.CMIS_LAST_MODIFICATION_DATE, getModifiedAt()));
+ properties.put(PropertyIds.CMIS_LAST_MODIFICATION_DATE, objFactory.createPropertyDateTimeData(PropertyIds.CMIS_LAST_MODIFICATION_DATE, getModifiedAt()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_CHANGE_TOKEN, requestedIds)) {
String token = getChangeToken();
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_CHANGE_TOKEN, token));
+ properties.put(PropertyIds.CMIS_CHANGE_TOKEN, objFactory.createPropertyStringData(PropertyIds.CMIS_CHANGE_TOKEN, token));
}
// add custom properties of type definition to the collection
if (null != fProperties) {
for (Entry<String, PropertyData<?>> prop: fProperties.entrySet()) {
- properties.add(prop.getValue());
+ properties.put(prop.getKey(), prop.getValue());
}
}
}
@@ -255,7 +257,7 @@
// private helper methods
/* (non-Javadoc)
- * @see org.apache.opencmis.client.provider.spi.inmemory.IStoredObject#setCustomProperties(java.util.Map)
+ * @see org.opencmis.client.provider.spi.inmemory.IStoredObject#setCustomProperties(java.util.Map)
*/
public void setCustomProperties(Map<String, PropertyData<?>> properties) {
properties = new HashMap<String, PropertyData<?>>(properties); // get a writable collection
@@ -407,6 +409,8 @@
public void persist() {
// in-memory implementation does not need to to anything to persist,
// but after this call the id should be set.
+ fId = fObjStore.storeObject(this);
+
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.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/VersionedDocumentImpl.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java Mon Feb 22 08:58:39 2010
@@ -20,6 +20,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import org.apache.opencmis.commons.PropertyIds;
import org.apache.opencmis.commons.enums.VersioningState;
@@ -50,10 +51,9 @@
if (isCheckedOut())
throw new CmisConstraintException("Cannot add a version to document, document is checked out.");
- DocumentVersionImpl ver = new DocumentVersionImpl(fRepositoryId, this, content, verState);
+ DocumentVersionImpl ver = new DocumentVersionImpl(fRepositoryId, this, content, verState, fObjStore);
ver.setSystemBasePropertiesWhenCreatedDirect(getName(), getTypeId(), user); // copy name and type id from version series.
ver.persist();
- fObjStore.storeObject(ver.getId(), ver);
fVersions.add(ver);
if (verState == VersioningState.CHECKEDOUT) {
fCheckedOutUser = user;
@@ -63,10 +63,23 @@
return ver;
}
+ public boolean deleteVersion(DocumentVersion version) {
+ if (fIsCheckedOut)
+ throw new RuntimeException("version cannot be deleted if document is checked-out: " + version.getId());
+ boolean found = fVersions.remove(version);
+ if (!found)
+ throw new RuntimeException("Version is not contained in the document:" + version.getId());
+
+ return !fVersions.isEmpty();
+ }
+
+
public void cancelCheckOut(String user) {
DocumentVersion pwc = getPwc();
fVersions.remove(pwc);
- fObjStore.deleteObject(pwc.getId());
+ fObjStore.removeVersion(pwc);
+ fIsCheckedOut = false;
+ fCheckedOutUser = null;
}
public void checkIn(boolean isMajor, String checkinComment, String user) {
@@ -96,8 +109,7 @@
return pwc;
}
- public List<DocumentVersion> getAllVersions(String filter) {
- //TODO: implement filter
+ public List<DocumentVersion> getAllVersions() {
return fVersions;
}
@@ -131,7 +143,7 @@
return null;
}
- public void fillProperties(List<PropertyData<?>> properties, ProviderObjectFactory objFactory,
+ public void fillProperties(Map<String, PropertyData<?>> properties, ProviderObjectFactory objFactory,
List<String> requestedIds) {
DocumentVersion pwc = getPwc();
@@ -140,16 +152,16 @@
// overwrite the version related properties
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_ID, requestedIds)) {
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_ID, getId()));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_ID, objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_ID, getId()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, requestedIds)) {
- properties.add(objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, isCheckedOut()));
+ properties.put(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, objFactory.createPropertyBooleanData(PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, isCheckedOut()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, requestedIds)) {
- properties.add(objFactory.createPropertyStringData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, getCheckedOutBy()));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, objFactory.createPropertyStringData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, getCheckedOutBy()));
}
if (FilterParser.isContainedInFilter(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, requestedIds)) {
- properties.add(objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, pwc == null ? null : pwc.getId()));
+ properties.put(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, objFactory.createPropertyIdData(PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, pwc == null ? null : pwc.getId()));
}
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java Mon Feb 22 08:58:39 2010
@@ -20,15 +20,17 @@
import java.util.ArrayList;
import java.util.Collections;
+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.Choice;
import org.apache.opencmis.commons.api.ExtensionsData;
-import org.apache.opencmis.commons.api.TypeDefinitionContainer;
import org.apache.opencmis.commons.api.TypeDefinition;
+import org.apache.opencmis.commons.api.TypeDefinitionContainer;
import org.apache.opencmis.commons.enums.Cardinality;
import org.apache.opencmis.commons.enums.IncludeRelationships;
import org.apache.opencmis.commons.enums.PropertyType;
@@ -206,7 +208,7 @@
// build properties collection
ProviderObjectFactory objectFactory = storeManager.getObjectFactory();
- List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+ Map<String, PropertyData<?>> properties = new HashMap<String, PropertyData<?>>();
so.fillProperties(properties, objectFactory, requestedIds);
String typeId = so.getTypeId();
@@ -219,10 +221,11 @@
} else {
TypeDefinition typeDef = typeDefC.getTypeDefinition();
String baseTypeId = typeDef.getBaseId().value();
- properties.add(objectFactory.createPropertyIdData(PropertyIds.CMIS_BASE_TYPE_ID, baseTypeId));
+ properties.put(PropertyIds.CMIS_BASE_TYPE_ID, objectFactory.createPropertyIdData(PropertyIds.CMIS_BASE_TYPE_ID, baseTypeId));
}
}
- PropertiesData props = objectFactory.createPropertiesData(properties);
+ List<PropertyData<?>> propertiesList = new ArrayList<PropertyData<?>> (properties.values());
+ PropertiesData props = objectFactory.createPropertiesData(propertiesList);
return props;
}