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 [3/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/...
Added: 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=912517&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java Mon Feb 22 08:58:39 2010
@@ -0,0 +1,333 @@
+package org.apache.opencmis.inmemory;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.opencmis.client.provider.factory.CmisProviderFactory;
+import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.SessionParameter;
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.enums.VersioningState;
+import org.apache.opencmis.commons.impl.dataobjects.ProviderObjectFactoryImpl;
+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.NavigationService;
+import org.apache.opencmis.commons.provider.ObjectData;
+import org.apache.opencmis.commons.provider.ObjectParentData;
+import org.apache.opencmis.commons.provider.ObjectService;
+import org.apache.opencmis.commons.provider.PropertiesData;
+import org.apache.opencmis.commons.provider.PropertyData;
+import org.apache.opencmis.commons.provider.ProviderObjectFactory;
+import org.apache.opencmis.commons.provider.RepositoryInfoData;
+import org.apache.opencmis.commons.provider.RepositoryService;
+import org.apache.opencmis.inmemory.RepositoryServiceTest.UnitTestRepositoryInfo;
+import org.apache.opencmis.inmemory.server.RuntimeContext;
+import org.apache.opencmis.inmemory.storedobj.impl.ContentStreamDataImpl;
+
+public class AbstractServiceTst extends TestCase {
+ private static Log LOG = LogFactory.getLog(AbstractServiceTst.class);
+ protected static final String REPOSITORY_ID = "UnitTestRepository";
+ protected ProviderObjectFactory fFactory = new ProviderObjectFactoryImpl();
+ protected String fRootFolderId;
+ protected String fRepositoryId;
+ protected ObjectService fObjSvc;
+ protected NavigationService fNavSvc;
+ protected RepositoryService fRepSvc;
+ private boolean fUseClientProviderInterface;
+
+ public AbstractServiceTst() {
+ // The in-memory server unit tests can either be run directly against the
+ // service implementation or against a client provider interface. The client
+ // provider interfaces offers some benefits like type system caching etc
+ // The default is using the direct implementation. Subclasses may override
+ // this behavior
+ fUseClientProviderInterface = false;
+ }
+
+ protected void setUp(String typeCreatorClassName) throws Exception {
+ LOG.debug("Initializing InMemory Test with type creator class: " + typeCreatorClassName);
+ Map<String, String> parameters = new HashMap<String, String>();
+ parameters.put(SessionParameter.BINDING_SPI_CLASS, CmisProviderFactory.BINDING_SPI_INMEMORY);
+ // attach TypeSystem to the session
+
+ // attach repository info to the session:
+ parameters.put(ConfigConstants.TYPE_CREATOR_CLASS, typeCreatorClassName);
+ parameters.put(ConfigConstants.REPOSITORY_ID, REPOSITORY_ID);
+
+ // attach repository info to the session:
+ parameters
+ .put(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS, UnitTestRepositoryInfo.class.getName());
+
+ // give subclasses a chance to provide additional parameters for special tests
+ addParameters(parameters);
+
+ if (fUseClientProviderInterface)
+ initializeUsingClientProvider(parameters);
+ else
+ initializeDirect(parameters);
+
+ assertNotNull(fRepSvc);
+ assertNotNull(fObjSvc);
+ assertNotNull(fNavSvc);
+
+ RepositoryInfoData rep = fRepSvc.getRepositoryInfo(REPOSITORY_ID, null);
+ fRootFolderId = rep.getRootFolderId();
+ fRepositoryId = rep.getRepositoryId();
+
+ assertNotNull(fRepositoryId);
+ assertNotNull(fRootFolderId);
+
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.getRuntimeConfig().attachCfg(new DummyCallContext());
+ }
+
+ // Override this method in subclasses if you want to provide additional configuration
+ // parameters. Default implementation is empty
+ protected void addParameters(Map<String, String> parameters) {
+ }
+
+ protected void setUp() throws Exception {
+ setUp(UnitTestTypeSystemCreator.class.getName());
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public void testDummy() {
+ // dummy test to make tools happy that complain if there are no tests available in a test class
+ }
+
+ protected String createFolder(String folderName, String parentFolderId, String typeId) {
+ PropertiesData props = createFolderProperties(folderName, typeId);
+ String id = null;
+ try {
+ id = fObjSvc.createFolder(fRepositoryId, props, parentFolderId, null, null, null, null);
+ if (null == id)
+ fail("createFolder failed.");
+ } catch (Exception e) {
+ fail("createFolder() failed with exception: " + e);
+ }
+ return id;
+ }
+
+ protected String createDocument(String name, String folderId, String typeId, boolean withContent) {
+ ContentStreamData contentStream = null;
+ VersioningState versioningState = VersioningState.NONE;
+ List<String> policies = null;
+ AccessControlList addACEs = null;
+ AccessControlList removeACEs = null;
+ ExtensionsData extension = null;
+
+ PropertiesData props = createDocumentProperties(name, typeId);
+
+ if (withContent)
+ contentStream = createContent();
+
+ String id = null;
+ try {
+ id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState,
+ policies, addACEs, removeACEs, extension);
+ if (null == id)
+ fail("createDocument failed.");
+ } catch (Exception e) {
+ fail("createDocument() failed with exception: " + e);
+ }
+ return id;
+ }
+
+ protected PropertiesData createDocumentProperties(String name, String typeId) {
+ List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+ properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME, name));
+ properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID, typeId));
+ PropertiesData props = fFactory.createPropertiesData(properties);
+ return props;
+ }
+
+ protected PropertiesData createFolderProperties(String folderName, String typeId) {
+ List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+ properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME, folderName));
+ properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID, typeId));
+ PropertiesData props = fFactory.createPropertiesData(properties);
+ return props;
+ }
+
+ protected ContentStreamData createContent() {
+ ContentStreamDataImpl content = new ContentStreamDataImpl();
+ content.setFileName("data.txt");
+ content.setMimeType("text/plain");
+ int len = 32 * 1024;
+ byte[] b = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+ 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a,
+ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+ 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a
+ }; // 32 Bytes
+ ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
+ try {
+ for (int i=0; i<1024; i++)
+ ba.write(b);
+ content.setContent(new ByteArrayInputStream(ba.toByteArray()));
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to fill content stream with data", e) ;
+ }
+ return content;
+ }
+
+ protected ContentStreamData createContent(char ch) {
+ ContentStreamDataImpl content = new ContentStreamDataImpl();
+ content.setFileName("data.txt");
+ content.setMimeType("text/plain");
+ int len = 32 * 1024;
+ byte[] b = new byte[32];
+ for (int i=0; i<32; i++)
+ b[i] = (byte) Character.getNumericValue(ch);
+ ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
+ try {
+ for (int i=0; i<1024; i++)
+ ba.write(b);
+ content.setContent(new ByteArrayInputStream(ba.toByteArray()));
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to fill content stream with data", e) ;
+ }
+ return content;
+ }
+ protected void verifyContentResult(ContentStreamData sd) {
+ assertEquals("text/plain", sd.getMimeType());
+ assertEquals("data.txt", sd.getFilename());
+ assertEquals(32 * 1024, sd.getLength().longValue());
+ byte[] ba = new byte[32];
+ InputStream is = sd.getStream();
+ int counter = 0;
+ try {
+ while (is.read(ba) == ba.length) {
+ ++counter;
+ assertEquals(0x61, ba[0]);
+ assertEquals(0x6e, ba[29]);
+ assertEquals(0x0c, ba[30]);
+ assertEquals(0x0a, ba[31]);
+ }
+ }
+ catch (IOException e) {
+ fail("reading from content stream failed");
+ }
+ assertEquals(1024, counter);
+ }
+
+ protected String getByPath(String id, String path) {
+ ObjectData res = null;
+ try {
+ res = fObjSvc.getObjectByPath(fRepositoryId, path, "*", false, IncludeRelationships.NONE,
+ null, false, false, null);
+ assertNotNull(res);
+ assertEquals(id, res.getId());
+ } catch (Exception e) {
+ fail("getObject() failed with exception: " + e);
+ }
+ return res.getId();
+ }
+
+ @SuppressWarnings("unchecked")
+ protected String getPathOfFolder(String id) {
+ String path=null;
+ try {
+ String filter = PropertyIds.CMIS_PATH;
+ PropertiesData res = fObjSvc.getProperties(fRepositoryId, id, filter, null);
+ assertNotNull(res);
+ PropertyData<String> pd = (PropertyData<String>) res.getProperties().get(PropertyIds.CMIS_PATH);
+ assertNotNull(pd);
+ path = pd.getFirstValue();
+ assertNotNull(path);
+ } catch (Exception e) {
+ fail("getProperties() failed with exception: " + e);
+ }
+ return path;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected String getPathOfDocument(String id) {
+ String path=null;
+ String filter = "*";
+ List<ObjectParentData> parentData = fNavSvc.getObjectParents(fRepositoryId, id, filter, false, IncludeRelationships.NONE, null, true, null);
+ String name = parentData.get(0).getRelativePathSegment();
+ PropertyData<String> pd = (PropertyData<String>) parentData.get(0).getObject().getProperties().getProperties().get(PropertyIds.CMIS_PATH);
+ assertNotNull(pd);
+ path = pd.getFirstValue() + "/" + name;
+ return path;
+ }
+
+ protected ObjectData getDocumentObjectData(String id) {
+ ObjectData res = null;
+ try {
+ String returnedId=null;
+ res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE,
+ null, false, false, null);
+ assertNotNull(res);
+ returnedId = res.getId();
+ testReturnedProperties(returnedId, res.getProperties().getProperties());
+ assertEquals(id, returnedId);
+ } catch (Exception e) {
+ fail("getObject() failed with exception: " + e);
+ }
+ return res;
+ }
+
+ protected String getDocument(String id) {
+ ObjectData res = getDocumentObjectData(id);
+ assertNotNull(res);
+ return res.getId();
+ }
+
+ protected void testReturnedProperties(String objectId, Map<String, PropertyData<?>> props) {
+ for (PropertyData<?> pd : props.values()) {
+ LOG.debug("return property id: " + pd.getId() + ", value: " + pd.getValues());
+ }
+
+ PropertyData<?> pd = props.get(PropertyIds.CMIS_OBJECT_ID);
+ assertNotNull(pd);
+ assertEquals(objectId, pd.getFirstValue());
+ }
+
+
+ /**
+ * Instantiates the services by using directly the service implementations.
+ * @param parameters
+ * configuration parameters for client provider interface and in-memory provider
+ */
+ private void initializeDirect(Map<String, String> parameters) {
+ CmisInMemoryProvider inMemSpi;
+ inMemSpi = new CmisInMemoryProvider(parameters);
+ fRepSvc = inMemSpi.getRepositoryService();
+ fObjSvc = inMemSpi.getObjectService();
+ fNavSvc = inMemSpi.getNavigationService();
+ }
+
+ /**
+ * Instantiates the services by using the client provider interface.
+ * @param parameters
+ * configuration parameters for client provider interface and in-memory provider
+ */
+ private void initializeUsingClientProvider(Map<String, String> parameters) {
+ CmisProvider provider;
+
+ // get factory and create provider
+ CmisProviderFactory factory = CmisProviderFactory.newInstance();
+ provider = factory.createCmisProvider(parameters);
+ assertNotNull(provider);
+ fFactory = provider.getObjectFactory();
+ fRepSvc = provider.getRepositoryService();
+ fObjSvc = provider.getObjectService();
+ fNavSvc = provider.getNavigationService();
+ }
+
+}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java Mon Feb 22 08:58:39 2010
@@ -20,38 +20,19 @@
import java.math.BigInteger;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.opencmis.client.provider.factory.CmisProviderFactory;
import org.apache.opencmis.commons.PropertyIds;
-import org.apache.opencmis.commons.SessionParameter;
import org.apache.opencmis.commons.enums.IncludeRelationships;
import org.apache.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.opencmis.commons.provider.CmisProvider;
-import org.apache.opencmis.commons.provider.NavigationService;
import org.apache.opencmis.commons.provider.ObjectData;
import org.apache.opencmis.commons.provider.ObjectInFolderContainer;
import org.apache.opencmis.commons.provider.ObjectInFolderData;
import org.apache.opencmis.commons.provider.ObjectInFolderList;
-import org.apache.opencmis.commons.provider.ObjectService;
import org.apache.opencmis.commons.provider.PropertiesData;
import org.apache.opencmis.commons.provider.PropertyData;
-import org.apache.opencmis.commons.provider.ProviderObjectFactory;
-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.ConfigMap;
-import org.apache.opencmis.inmemory.MapConfigReader;
-import org.apache.opencmis.inmemory.RepositoryServiceTest.UnitTestRepositoryInfo;
-import org.apache.opencmis.inmemory.clientprovider.CmisInMemorySpi;
-import org.apache.opencmis.inmemory.server.RuntimeContext;
-import org.apache.opencmis.inmemory.storedobj.impl.SessionConfigReader;
import org.apache.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
import org.apache.opencmis.util.repository.ObjectGenerator;
@@ -59,51 +40,27 @@
/**
* @author Jens
*/
-public class NavigationServiceTest extends TestCase {
+public class NavigationServiceTest extends AbstractServiceTst {
private static Log log = LogFactory.getLog(NavigationServiceTest.class);
- private static final String REPOSITORY_ID = "UnitTestRepository";
- private ProviderObjectFactory fFactory;
- private CmisProvider fProvider;
private static final int NUM_ROOT_FOLDERS = 10;
private String fLevel1FolderId;
- String fRootFolderId;
- private String fRepositoryId;
protected void setUp() throws Exception {
-
- Map<String, String> parameters = new HashMap<String, String>();
- parameters.put(SessionParameter.BINDING_SPI_CLASS, CmisProviderFactory.BINDING_SPI_INMEMORY);
- // attach repository info to the session:
- parameters
- .put(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS, UnitTestRepositoryInfo.class.getName());
- parameters.put(ConfigConstants.REPOSITORY_ID, REPOSITORY_ID);
-
- // get factory and create provider
- CmisProviderFactory factory = CmisProviderFactory.newInstance();
- fProvider = factory.createCmisProvider(parameters);
- assertNotNull(fProvider);
- fFactory = fProvider.getObjectFactory();
- RepositoryService repSvc = fProvider.getRepositoryService();
- RepositoryInfoData rep = repSvc.getRepositoryInfo(REPOSITORY_ID, null);
- fRootFolderId = rep.getRootFolderId();
- fRepositoryId = rep.getRepositoryId();
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- ConfigMap cfgReader = new MapConfigReader(parameters);
- RuntimeContext.getRuntimeConfig().attachCfg(cfgReader);
+ super.setUp();
}
protected void tearDown() throws Exception {
+ super.tearDown();
}
public void testGetChildren() {
log.info("starting testGetChildren() ...");
createLevel1Folders();
- NavigationService navSvc = fProvider.getNavigationService();
log.info("test getting all objects with getChildren");
BigInteger maxItems = BigInteger.valueOf(NUM_ROOT_FOLDERS *2);
BigInteger skipCount = BigInteger.valueOf(0);
- ObjectInFolderList result = navSvc.getChildren(fRepositoryId, fRootFolderId, "*", null, false,
+ ObjectInFolderList result = fNavSvc.getChildren(fRepositoryId, fRootFolderId, "*", null, false,
IncludeRelationships.NONE, null, true, maxItems, skipCount, null);
List<ObjectInFolderData> folders = result.getObjects();
log.info(" found " + folders.size() + " folders in getChildren()");
@@ -116,7 +73,7 @@
log.info("test paging with getChildren");
maxItems = BigInteger.valueOf(3);
skipCount = BigInteger.valueOf(3);
- result = navSvc.getChildren(fRepositoryId, fRootFolderId, "*", null, false,
+ result = fNavSvc.getChildren(fRepositoryId, fRootFolderId, "*", null, false,
IncludeRelationships.NONE, null, true, maxItems, skipCount, null);
folders = result.getObjects();
log.info(" found " + folders.size() + " folders in getChildren()");
@@ -132,8 +89,6 @@
public void testGetFolderTree() {
log.info("starting testGetFolderTree() ...");
createFolderHierachy(3, 5);
- //createLevel1Folders();
- NavigationService navSvc = fProvider.getNavigationService();
log.info("test getting all objects with getFolderTree");
BigInteger depth = BigInteger.valueOf(-1);
@@ -143,7 +98,7 @@
Boolean includeAllowableActions = false;
String objectId = fRootFolderId;
- List<ObjectInFolderContainer> tree = navSvc.getFolderTree(fRepositoryId, objectId,
+ List<ObjectInFolderContainer> tree = fNavSvc.getFolderTree(fRepositoryId, objectId,
depth, propertyFilter, includeAllowableActions, IncludeRelationships.NONE, renditionFilter,
includePathSegments, null);
@@ -174,10 +129,9 @@
final int numLevels = 3;
final int childrenPerLevel = 3;
int objCount = createFolderHierachy(numLevels, childrenPerLevel);
- NavigationService navSvc = fProvider.getNavigationService();
log.info("test getting all objects with getDescendants");
- List<ObjectInFolderContainer> result = navSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(-1),
+ List<ObjectInFolderContainer> result = fNavSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(-1),
"*", Boolean.TRUE, IncludeRelationships.NONE, null, Boolean.TRUE, null);
for (ObjectInFolderContainer obj: result) {
@@ -188,7 +142,7 @@
assertEquals(objCount, sizeOfDescs);
log.info("test getting one level with getDescendants");
- result = navSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(1),
+ result = fNavSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(1),
"*", Boolean.TRUE, IncludeRelationships.NONE, null, Boolean.TRUE, null);
for (ObjectInFolderContainer obj: result) {
@@ -199,7 +153,7 @@
assertEquals(childrenPerLevel, sizeOfDescs);
log.info("test getting two levels with getDescendants");
- result = navSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(2),
+ result = fNavSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(2),
"*", Boolean.TRUE, IncludeRelationships.NONE, null, Boolean.TRUE, null);
for (ObjectInFolderContainer obj: result) {
@@ -215,16 +169,15 @@
public void testGetFolderParent() {
log.info("starting testGetFolderParent() ...");
createLevel1Folders();
- NavigationService navSvc = fProvider.getNavigationService();
String folderId = fLevel1FolderId;
- ObjectData result = navSvc.getFolderParent(fRepositoryId, folderId, null, null);
+ ObjectData result = fNavSvc.getFolderParent(fRepositoryId, folderId, null, null);
log.info(" found parent for id \'" + folderId + "\' is \'" + result.getId() + "\'");
assertEquals(fRootFolderId, result.getId()); // should be root folder
folderId = fRootFolderId;
try {
- result = navSvc.getFolderParent(fRepositoryId, folderId, null, null);
+ result = fNavSvc.getFolderParent(fRepositoryId, folderId, null, null);
log.info(" found parent for id " + folderId + " is " + result.getId());
fail("Should not be possible to get parent for root folder");
} catch (Exception e) {
@@ -246,24 +199,21 @@
}
private void createLevel1Folders() {
- ObjectService objSvc = fProvider.getObjectService();
for (int i = 0; i < NUM_ROOT_FOLDERS; i++) {
List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME, "Folder " + i));
properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID,
InMemoryFolderTypeDefinition.getRootFolderType().getId()));
PropertiesData props = fFactory.createPropertiesData(properties);
- String id = objSvc.createFolder(fRepositoryId, props, fRootFolderId, null, null, null, null);
+ String id = fObjSvc.createFolder(fRepositoryId, props, fRootFolderId, null, null, null, null);
if (i==3) // store one
fLevel1FolderId = id;
}
}
private int createFolderHierachy(int levels, int childrenPerLevel) {
- NavigationService navSvc = fProvider.getNavigationService();
- ObjectService objSvc = fProvider.getObjectService();
- ObjectGenerator gen = new ObjectGenerator(fFactory, navSvc, objSvc, fRepositoryId);
+ ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepositoryId);
gen.createFolderHierachy(levels, childrenPerLevel, fRootFolderId);
int objCount = gen.getObjectsInTotal();
return objCount;
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=912517&r1=912516&r2=912517&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 Mon Feb 22 08:58:39 2010
@@ -18,10 +18,6 @@
*/
package org.apache.opencmis.inmemory;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
@@ -29,13 +25,9 @@
import java.util.List;
import java.util.Map;
-import junit.framework.TestCase;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.opencmis.client.provider.factory.CmisProviderFactory;
import org.apache.opencmis.commons.PropertyIds;
-import org.apache.opencmis.commons.SessionParameter;
import org.apache.opencmis.commons.api.ExtensionsData;
import org.apache.opencmis.commons.api.PropertyDefinition;
import org.apache.opencmis.commons.api.TypeDefinition;
@@ -46,30 +38,17 @@
import org.apache.opencmis.commons.exceptions.CmisNotSupportedException;
import org.apache.opencmis.commons.exceptions.CmisObjectNotFoundException;
import org.apache.opencmis.commons.exceptions.CmisUpdateConflictException;
-import org.apache.opencmis.commons.impl.dataobjects.ContentStreamDataImpl;
import org.apache.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
import org.apache.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
import org.apache.opencmis.commons.provider.AccessControlList;
import org.apache.opencmis.commons.provider.AllowableActionsData;
-import org.apache.opencmis.commons.provider.CmisProvider;
import org.apache.opencmis.commons.provider.ContentStreamData;
import org.apache.opencmis.commons.provider.Holder;
-import org.apache.opencmis.commons.provider.NavigationService;
import org.apache.opencmis.commons.provider.ObjectData;
import org.apache.opencmis.commons.provider.ObjectInFolderList;
import org.apache.opencmis.commons.provider.ObjectParentData;
-import org.apache.opencmis.commons.provider.ObjectService;
import org.apache.opencmis.commons.provider.PropertiesData;
import org.apache.opencmis.commons.provider.PropertyData;
-import org.apache.opencmis.commons.provider.ProviderObjectFactory;
-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.ConfigMap;
-import org.apache.opencmis.inmemory.MapConfigReader;
-import org.apache.opencmis.inmemory.TypeCreator;
-import org.apache.opencmis.inmemory.RepositoryServiceTest.UnitTestRepositoryInfo;
-import org.apache.opencmis.inmemory.server.RuntimeContext;
import org.apache.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
import org.apache.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
import org.apache.opencmis.inmemory.types.PropertyCreationHelper;
@@ -79,15 +58,9 @@
* @author Jens
*/
-public class ObjectServiceTest extends TestCase {
+public class ObjectServiceTest extends AbstractServiceTst {
private static Log log = LogFactory.getLog(ObjectServiceTest.class);
- private static final String REPOSITORY_ID = "UnitTestRepository";
- private ProviderObjectFactory fFactory;
- private CmisProvider fProvider;
- ObjectService fObjSvc;
- String fRepositoryId;
- String fRootFolderId;
private static final String TEST_FOLDER_TYPE_ID = "MyFolderType";
private static final String TEST_DOCUMENT_TYPE_ID = "MyDocumentType";
private static final String TEST_FOLDER_STRING_PROP_ID = "MyFolderStringProp";
@@ -98,76 +71,24 @@
private static final String TEST_DOCUMENT_MY_INT_PROP_ID = "MyCustomDocumentIntProp";
private static final String TEST_DOCUMENT_MY_SUB_STRING_PROP_ID = "MyInheritedStringProp";
private static final String TEST_DOCUMENT_MY_SUB_INT_PROP_ID = "MyInheritedIntProp";
+
+ private static final String DOCUMENT_TYPE_ID = InMemoryDocumentTypeDefinition.getRootDocumentType().getId();
+ private static final String DOCUMENT_ID = "Document_1";
+ private static final String FOLDER_TYPE_ID = InMemoryFolderTypeDefinition.getRootFolderType().getId();
+ private static final String FOLDER_ID = "Folder_1";
+ private static final String MY_CUSTOM_NAME = "My Custom Document";
+
ObjectCreator fCreator;
protected void setUp() throws Exception {
-
- Map<String, String> parameters = new HashMap<String, String>();
- parameters.put(SessionParameter.BINDING_SPI_CLASS, CmisProviderFactory.BINDING_SPI_INMEMORY);
- // attach repository info to the session:
- parameters
- .put(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS, UnitTestRepositoryInfo.class.getName());
-
- parameters.put(ConfigConstants.TYPE_CREATOR_CLASS, ObjectTestTypeSystemCreator.class.getName());
- parameters.put(ConfigConstants.REPOSITORY_ID, REPOSITORY_ID);
- parameters.put(ConfigConstants.USERNAME, "TestUser");
-
- // get factory and create provider
- CmisProviderFactory factory = CmisProviderFactory.newInstance();
- fProvider = factory.createCmisProvider(parameters);
- assertNotNull(fProvider);
- fFactory = fProvider.getObjectFactory();
- RepositoryService repSvc = fProvider.getRepositoryService();
- RepositoryInfoData rep = repSvc.getRepositoryInfo(REPOSITORY_ID, null);
- fObjSvc = fProvider.getObjectService();
- fRepositoryId = rep.getRepositoryId();
- fRootFolderId = rep.getRootFolderId();
+ super.setUp(ObjectTestTypeSystemCreator.class.getName());
fCreator = new ObjectCreator(fFactory, fObjSvc, fRepositoryId);
-
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- ConfigMap cfgReader = new MapConfigReader(parameters);
- RuntimeContext.getRuntimeConfig().attachCfg(cfgReader);
}
protected void tearDown() throws Exception {
+ super.tearDown();
}
- private String createDocument(String folderId, boolean withContent) {
- VersioningState versioningState = VersioningState.NONE;
- String id = null;
- id = fCreator.createDocument(DOCUMENT_ID, DOCUMENT_TYPE_ID, folderId, versioningState, null);
-
- return id;
- }
-
- private String createFolder() {
- PropertiesData props = createFolderProperties();
- String id = null;
- try {
- id = fObjSvc.createFolder(fRepositoryId, props, fRootFolderId, null, null, null, null);
- if (null == id)
- fail("createFolder failed.");
- } catch (Exception e) {
- fail("createFolder() failed with exception: " + e);
- }
- return id;
- }
-
- private String getDocument(String id) {
- String returnedId=null;
- try {
- ObjectData res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE,
- null, false, false, null);
- assertNotNull(res);
- testReturnedProperties(res.getProperties().getProperties());
- returnedId = res.getId();
- assertEquals(id, returnedId);
- } catch (Exception e) {
- fail("getObject() failed with exception: " + e);
- }
- return returnedId;
- }
-
public void testCreateDocument() {
log.info("starting testCreateObject() ...");
String id = createDocument(fRootFolderId, false);
@@ -185,10 +106,59 @@
log.info(" createDocument succeeded with created id: " + id);
log.info(" getting object");
- getDocument(id);
+ retrieveDocument(id);
log.info("... testGetObject() finished.");
}
+ public void testGetObjectByPath() {
+ log.info("starting testGetObjectByPath() ...");
+ log.info(" creating object");
+
+ // create a tree for testing paths
+ String f1 = createFolder("folder1", fRootFolderId, FOLDER_TYPE_ID);
+ String f2 = createFolder("folder2", fRootFolderId, FOLDER_TYPE_ID);
+ String f3 = createFolder("folder3", fRootFolderId, FOLDER_TYPE_ID);
+ String f11 = createFolder("folder1.1", f1, FOLDER_TYPE_ID);
+ String f12 = createFolder("folder1.2", f1, FOLDER_TYPE_ID);
+ String f13 = createFolder("folder1.3", f1, FOLDER_TYPE_ID);
+ String f31 = createFolder("folder3.1", f3, FOLDER_TYPE_ID);
+ String f32 = createFolder("folder3.2", f3, FOLDER_TYPE_ID);
+ String f33 = createFolder("folder3.3", f3, FOLDER_TYPE_ID);
+ String f121 = createFolder("folder1.2.1", f12, FOLDER_TYPE_ID);
+ String f122 = createFolder("folder1.2.2", f12, FOLDER_TYPE_ID);
+ String f123 = createFolder("folder1.2.3", f12, FOLDER_TYPE_ID);
+ String f331 = createFolder("folder3.3.1", f33, FOLDER_TYPE_ID);
+ String f332 = createFolder("folder3.3.2", f33, FOLDER_TYPE_ID);
+ String f333 = createFolder("folder3.3.3", f33, FOLDER_TYPE_ID);
+ String doc12 = createDocument("Document1.2.Doc", f12, false);
+ String doc33 = createDocument("Document3.3.Doc", f33, false);
+ String doc331 = createDocument("Document3.3.1.Doc", f331, false);
+ String doc333 = createDocument("Document3.3.3.Doc", f333, false);
+
+ log.info(" getting object by path");
+ getByPath(f1, "/folder1");
+ getByPath(f2, "/folder2");
+ getByPath(f3, "/folder3");
+ getByPath(f11, "/folder1/folder1.1");
+ getByPath(f12, "/folder1/folder1.2");
+ getByPath(f13, "/folder1/folder1.3");
+ getByPath(f31, "/folder3/folder3.1");
+ getByPath(f32, "/folder3/folder3.2");
+ getByPath(f33, "/folder3/folder3.3");
+ getByPath(f121, "/folder1/folder1.2/folder1.2.1");
+ getByPath(f122, "/folder1/folder1.2/folder1.2.2");
+ getByPath(f123, "/folder1/folder1.2/folder1.2.3");
+ getByPath(f331, "/folder3/folder3.3/folder3.3.1");
+ getByPath(f332, "/folder3/folder3.3/folder3.3.2");
+ getByPath(f333, "/folder3/folder3.3/folder3.3.3");
+ getByPath(doc12, "/folder1/folder1.2/Document1.2.Doc");
+ getByPath(doc33, "/folder3/folder3.3/Document3.3.Doc");
+ getByPath(doc331, "/folder3/folder3.3/folder3.3.1/Document3.3.1.Doc");
+ getByPath(doc333, "/folder3/folder3.3/folder3.3.3/Document3.3.3.Doc");
+
+ log.info("... testGetObjectByPath() finished.");
+ }
+
public void testCreateDocumentWithContent() {
log.info("starting testCreateDocumentWithContent() ...");
String id = createDocument(fRootFolderId, true);
@@ -303,10 +273,8 @@
public void testBuildFolderAndDocuments() {
// Create a hierarchy of folders and fill it with some documents
- NavigationService navSvc = fProvider.getNavigationService();
- ObjectService objSvc = fProvider.getObjectService();
- ObjectGenerator gen = new ObjectGenerator(fFactory, navSvc, objSvc, fRepositoryId);
+ ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepositoryId);
int levels = 2; // create a hierarchy with two levels
int childrenPerLevel = 2; // create two folders on each level
@@ -350,7 +318,7 @@
log.info(" createDocument succeeded with created id: " + id);
log.info(" getting object");
- getDocument(id);
+ retrieveDocument(id);
log.info(" deleting object");
try {
fObjSvc.deleteObject(fRepositoryId, id, true, null);
@@ -399,7 +367,7 @@
log.info("Testing to delete a folder with a contained document");
String folderId;
folderId = createFolder();
- id = createDocument(id, false);
+ id = createDocument(folderId, false);
try {
fObjSvc.deleteObject(fRepositoryId, folderId, true, null);
@@ -443,9 +411,7 @@
public void testDeleteTree() {
log.info("starting testDeleteTree() ...");
- NavigationService navSvc = fProvider.getNavigationService();
- ObjectService objSvc = fProvider.getObjectService();
- ObjectGenerator gen = new ObjectGenerator(fFactory, navSvc, objSvc, fRepositoryId);
+ ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepositoryId);
String rootFolderId = createFolder();
// Set the type id for all created documents:
gen.setDocumentTypeId(InMemoryDocumentTypeDefinition.getRootDocumentType().getId());
@@ -704,12 +670,17 @@
assertNotNull(actions.get(AllowableActionsData.ACTION_CAN_APPLY_ACL));
}
+ private String retrieveDocument(String id) {
+ ObjectData res = getDocumentObjectData(id);
+ String returnedId = res.getId();
+ testReturnedProperties(returnedId, DOCUMENT_ID, DOCUMENT_TYPE_ID, res.getProperties().getProperties());
+ return returnedId;
+ }
+
private void moveObjectTest(boolean isFolder) {
final String propertyFilter=PropertyIds.CMIS_OBJECT_ID+","+PropertyIds.CMIS_NAME; //+","+PropertyIds.CMIS_OBJECT_TYPE_ID+","+PropertyIds.CMIS_BASE_TYPE_ID;
String rootFolderId = createFolder();
- NavigationService navSvc = fProvider.getNavigationService();
- ObjectService objSvc = fProvider.getObjectService();
- ObjectGenerator gen = new ObjectGenerator(fFactory, navSvc, objSvc, fRepositoryId);
+ ObjectGenerator gen = new ObjectGenerator(fFactory, fNavSvc, fObjSvc, fRepositoryId);
// Set the type id for all created documents:
gen.setDocumentTypeId(InMemoryDocumentTypeDefinition.getRootDocumentType().getId());
// Set the type id for all created folders:
@@ -727,14 +698,14 @@
log.info("Id after moveObject: " + holder.getValue());
gen.dumpFolder(fRootFolderId, propertyFilter);
- List<ObjectParentData> result = navSvc.getObjectParents(fRepositoryId, holder.getValue(), null, Boolean.FALSE, IncludeRelationships.NONE, null, Boolean.FALSE, null);
+ List<ObjectParentData> result = fNavSvc.getObjectParents(fRepositoryId, holder.getValue(), null, Boolean.FALSE, IncludeRelationships.NONE, null, Boolean.FALSE, null);
// check that new parent is set correctly
String newParentId =result.get(0).getObject().getId();
assertEquals(rootFolderId, newParentId);
if (isFolder) {
log.info("testing moveFolder to a subfolder");
- ObjectInFolderList ch = navSvc.getChildren(fRepositoryId, holder.getValue(), propertyFilter, null,
+ 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 {
@@ -746,20 +717,18 @@
}
}
- private static final String DOCUMENT_TYPE_ID = InMemoryDocumentTypeDefinition.getRootDocumentType().getId();
- private static final String DOCUMENT_ID = "Document_1";
- private static final String FOLDER_TYPE_ID = InMemoryFolderTypeDefinition.getRootFolderType().getId();
- private static final String FOLDER_ID = "Folder_1";
- private static final String MY_CUSTOM_NAME = "My Custom Document";
-
- private PropertiesData createDocumentProperties() {
- List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
- properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME, DOCUMENT_ID));
- properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID, DOCUMENT_TYPE_ID));
- PropertiesData props = fFactory.createPropertiesData(properties);
- return props;
+ private String createFolder() {
+ return createFolder(FOLDER_ID, fRootFolderId, FOLDER_TYPE_ID);
+ }
+
+ private String createDocument(String folderId, boolean withContent) {
+ return createDocument(DOCUMENT_ID, folderId, withContent);
}
+ private String createDocument(String name, String folderId, boolean withContent) {
+ return createDocument(name, folderId, DOCUMENT_TYPE_ID, withContent);
+ }
+
private PropertiesData createDocumentPropertiesForDocumentFromSource(String name) {
// We only provide a name but not a type id, as spec says to copy missing attributes
// from the existing one
@@ -769,32 +738,15 @@
return props;
}
- private PropertiesData createDocumentProperties(String name) {
- List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
- properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME, name));
- properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID, DOCUMENT_TYPE_ID));
- PropertiesData props = fFactory.createPropertiesData(properties);
- return props;
- }
- private PropertiesData createFolderProperties() {
- List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
- properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME, FOLDER_ID));
- properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID, FOLDER_TYPE_ID));
- PropertiesData props = fFactory.createPropertiesData(properties);
- return props;
- }
-
- private void testReturnedProperties(Map<String, PropertyData<?>> props) {
- for (PropertyData<?> pd : props.values()) {
- log.info("return property id: " + pd.getId() + ", value: " + pd.getValues());
- }
+ private void testReturnedProperties(String objectId, String objectName, String typeId, Map<String, PropertyData<?>> props) {
+ super.testReturnedProperties(objectId, props);
PropertyData<?> pd = props.get(PropertyIds.CMIS_NAME);
assertNotNull(pd);
- assertEquals(DOCUMENT_ID, pd.getFirstValue());
+ assertEquals(objectName, pd.getFirstValue());
pd = props.get(PropertyIds.CMIS_OBJECT_TYPE_ID);
- assertEquals(DOCUMENT_TYPE_ID, pd.getFirstValue());
+ assertEquals(typeId, pd.getFirstValue());
}
private String createDocumentWithCustomType(String folderId, boolean withContent) {
@@ -804,7 +756,6 @@
AccessControlList addACEs = null;
AccessControlList removeACEs = null;
ExtensionsData extension = null;
- ObjectService objSvc = fProvider.getObjectService();
// create the properties:
List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
@@ -821,7 +772,7 @@
// create the document
String id = null;
- id = objSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState,
+ id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState,
policies, addACEs, removeACEs, extension);
if (null == id)
throw new RuntimeException("createDocument failed.");
@@ -835,7 +786,6 @@
AccessControlList addACEs = null;
AccessControlList removeACEs = null;
ExtensionsData extension = null;
- ObjectService objSvc = fProvider.getObjectService();
// create the properties:
List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
@@ -854,55 +804,12 @@
// create the document
String id = null;
- id = objSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState,
+ id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState,
policies, addACEs, removeACEs, extension);
if (null == id)
throw new RuntimeException("createDocument failed.");
return id;
}
-
- ContentStreamData createContent() {
- ContentStreamDataImpl content = new ContentStreamDataImpl();
- content.setFilename("data.txt");
- content.setMimeType("text/plain");
- int len = 32 * 1024;
- byte[] b = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
- 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a,
- 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
- 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a
- }; // 32 Bytes
- ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
- try {
- for (int i=0; i<1024; i++)
- ba.write(b);
- } catch (IOException e) {
- throw new RuntimeException("Failed to fill content stream with data", e) ;
- }
- content.setStream(new ByteArrayInputStream(ba.toByteArray()));
- return content;
- }
-
- private void verifyContentResult(ContentStreamData sd) {
- assertEquals("text/plain", sd.getMimeType());
- assertEquals("data.txt", sd.getFilename());
- assertEquals(32 * 1024, sd.getLength().longValue());
- byte[] ba = new byte[32];
- InputStream is = sd.getStream();
- int counter = 0;
- try {
- while (is.read(ba) == ba.length) {
- ++counter;
- assertEquals(0x61, ba[0]);
- assertEquals(0x6e, ba[29]);
- assertEquals(0x0c, ba[30]);
- assertEquals(0x0a, ba[31]);
- }
- }
- catch (IOException e) {
- junit.framework.Assert.fail("reading from content stream failed");
- }
- assertEquals(1024, counter);
- }
// Helper class to create some type for testing the ObjectService
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/RepositoryServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/RepositoryServiceTest.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/RepositoryServiceTest.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/RepositoryServiceTest.java Mon Feb 22 08:58:39 2010
@@ -26,17 +26,13 @@
import java.util.List;
import java.util.Map;
-import junit.framework.TestCase;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.opencmis.client.provider.factory.CmisProviderFactory;
import org.apache.opencmis.commons.PropertyIds;
-import org.apache.opencmis.commons.SessionParameter;
import org.apache.opencmis.commons.api.Choice;
import org.apache.opencmis.commons.api.PropertyDefinition;
-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.api.TypeDefinitionList;
import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
import org.apache.opencmis.commons.enums.CapabilityAcl;
@@ -45,8 +41,8 @@
import org.apache.opencmis.commons.enums.CapabilityJoin;
import org.apache.opencmis.commons.enums.CapabilityQuery;
import org.apache.opencmis.commons.enums.CapabilityRendition;
-import org.apache.opencmis.commons.exceptions.CmisObjectNotFoundException;
import org.apache.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.opencmis.commons.exceptions.CmisObjectNotFoundException;
import org.apache.opencmis.commons.impl.dataobjects.ChoiceImpl;
import org.apache.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
import org.apache.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
@@ -57,22 +53,16 @@
import org.apache.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
import org.apache.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesDataImpl;
import org.apache.opencmis.commons.impl.dataobjects.RepositoryInfoDataImpl;
-import org.apache.opencmis.commons.provider.CmisProvider;
import org.apache.opencmis.commons.provider.RepositoryInfoData;
-import org.apache.opencmis.inmemory.ConfigConstants;
-import org.apache.opencmis.inmemory.ConfigMap;
-import org.apache.opencmis.inmemory.MapConfigReader;
-import org.apache.opencmis.inmemory.RepositoryInfoCreator;
-import org.apache.opencmis.inmemory.server.RuntimeContext;
import org.apache.opencmis.inmemory.types.DocumentTypeCreationHelper;
import org.apache.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
import org.apache.opencmis.inmemory.types.PropertyCreationHelper;
/**
* @author Jens
*/
-public class RepositoryServiceTest extends TestCase {
+public class RepositoryServiceTest extends AbstractServiceTst {
- private CmisProvider fProvider;
+// private CmisProvider fProvider;
private static Log log = LogFactory.getLog(RepositoryServiceTest.class);
private static final String REPOSITORY_ID = "UnitTestRepository";
@@ -118,35 +108,18 @@
}
- /*
- * (non-Javadoc)
- *
- * @see junit.framework.TestCase#setUp()
- */
protected void setUp() throws Exception {
- // gather parameters
- Map<String, String> parameters = new HashMap<String, String>();
- parameters.put(SessionParameter.BINDING_SPI_CLASS, CmisProviderFactory.BINDING_SPI_INMEMORY);
-
- // attach repository info to the session:
- parameters.put(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS, UnitTestRepositoryInfo.class.getName());
- // attach TypeSystem to the session
- parameters.put(ConfigConstants.TYPE_CREATOR_CLASS, RepositoryTestTypeSystemCreator.class.getName());
- parameters.put(ConfigConstants.REPOSITORY_ID, REPOSITORY_ID);
-
- // get factory and create provider
- CmisProviderFactory factory = CmisProviderFactory.newInstance();
- fProvider = factory.createCmisProvider(parameters);
- assertNotNull(fProvider);
-
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- ConfigMap cfgReader = new MapConfigReader(parameters);
- RuntimeContext.getRuntimeConfig().attachCfg(cfgReader);
+ super.setUp(RepositoryTestTypeSystemCreator.class.getName());
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
}
+
public void testRepositoryInfo() throws Exception {
log.info("starting testRepositoryInfo() ...");
- List<RepositoryInfoData> repositories = fProvider.getRepositoryService().getRepositoryInfos(
+ List<RepositoryInfoData> repositories = fRepSvc.getRepositoryInfos(
null);
assertNotNull(repositories);
assertFalse(repositories.isEmpty());
@@ -154,7 +127,7 @@
log.info("geRepositoryInfo(), found " + repositories.size() + " repository/repositories).");
for (RepositoryInfoData repository : repositories) {
- RepositoryInfoData repository2 = fProvider.getRepositoryService().getRepositoryInfo(
+ RepositoryInfoData repository2 = fRepSvc.getRepositoryInfo(
repository.getRepositoryId(), null);
assertNotNull(repository2);
assertEquals(repository.getRepositoryId(), repository2.getRepositoryId());
@@ -170,7 +143,7 @@
String repositoryId = getRepositoryId();
String typeId = "MyDocType1";
TypeDefinition ref = RepositoryTestTypeSystemCreator.getTypeById(typeId);
- TypeDefinition type = fProvider.getRepositoryService().getTypeDefinition(repositoryId,
+ TypeDefinition type = fRepSvc.getTypeDefinition(repositoryId,
typeId, null);
assertEquals(ref.getId(), type.getId());
assertEquals(ref.getDescription(), type.getDescription());
@@ -187,7 +160,7 @@
String repositoryId = getRepositoryId();
// get types
- List<TypeDefinitionContainer> types = fProvider.getRepositoryService().getTypeDescendants(
+ List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(
repositoryId, null/* all types */, BigInteger.valueOf(-1), Boolean.TRUE, null);
assertNotNull(types);
log.info("Repository " + repositoryId + " contains " + types.size() + " type(s).");
@@ -220,7 +193,7 @@
// get types
int depth = 2;
- List<TypeDefinitionContainer> types = fProvider.getRepositoryService().getTypeDescendants(
+ List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(
repositoryId, null/* all types */, BigInteger.valueOf(depth), Boolean.TRUE, null);
assertNotNull(types);
log.info("Found in repository " + repositoryId + " " + types.size() + " type(s) with depth "
@@ -263,7 +236,7 @@
// get types
int depth = 2;
String typeId = "MyDocType1";
- List<TypeDefinitionContainer> types = fProvider.getRepositoryService().getTypeDescendants(
+ List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(
repositoryId, typeId, BigInteger.valueOf(depth), Boolean.TRUE, null);
assertNotNull(types);
log.info("Found in repository " + repositoryId + " for type " + typeId + ", " + types.size()
@@ -297,7 +270,7 @@
String typeId = BaseObjectTypeIds.CMIS_DOCUMENT.value();
// get types
- List<TypeDefinitionContainer> types = fProvider.getRepositoryService().getTypeDescendants(
+ List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(
repositoryId, typeId, BigInteger.valueOf(-1), false, null);
assertNotNull(types);
log.info("Repository " + repositoryId + " contains " + types.size() + " type(s).");
@@ -328,7 +301,7 @@
// get all children
BigInteger maxItems = BigInteger.valueOf(1000);
BigInteger skipCount = BigInteger.valueOf(0);
- TypeDefinitionList children = fProvider.getRepositoryService().getTypeChildren(repositoryId,
+ TypeDefinitionList children = fRepSvc.getTypeChildren(repositoryId,
typeId, true, maxItems, skipCount, null);
for (TypeDefinition type : children.getList()) {
@@ -342,7 +315,7 @@
// get a chunk
maxItems = BigInteger.valueOf(5);
skipCount = BigInteger.valueOf(3);
- children = fProvider.getRepositoryService().getTypeChildren(repositoryId, typeId, true,
+ children = fRepSvc.getTypeChildren(repositoryId, typeId, true,
maxItems, skipCount, null);
for (TypeDefinition type : children.getList()) {
@@ -367,7 +340,7 @@
String wrongTypeId = "UnknownType";
try {
- RepositoryInfoData repInf = fProvider.getRepositoryService().getRepositoryInfo(
+ RepositoryInfoData repInf = fRepSvc.getRepositoryInfo(
wrongRepositoryId, null);
log.debug("getRepositoryInfo(): " + repInf);
fail("getRepositoryInfo() with illegal repository id should throw InvalidArgumentException.");
@@ -377,7 +350,7 @@
}
try {
- List<TypeDefinitionContainer> types = fProvider.getRepositoryService().getTypeDescendants(
+ List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(
repositoryId, "CMISDocument", BigInteger.valueOf(0), Boolean.TRUE, null);
log.debug("getTypeDescendants(): " + types);
fail("getTypeDescendants() with depth 0 should throw InvalidArgumentException.");
@@ -387,7 +360,7 @@
}
try {
- List<TypeDefinitionContainer> types = fProvider.getRepositoryService().getTypeDescendants(
+ List<TypeDefinitionContainer> types = fRepSvc.getTypeDescendants(
repositoryId, wrongTypeId, BigInteger.valueOf(depth), Boolean.TRUE, null);
log.debug("getTypeDescendants(): " + types);
fail("getTypeDescendants() with unknown type should throw exception.");
@@ -397,7 +370,7 @@
}
try {
- TypeDefinition type = fProvider.getRepositoryService().getTypeDefinition(
+ TypeDefinition type = fRepSvc.getTypeDefinition(
wrongRepositoryId, "CMISDocument", null);
log.debug("getTypeDefinition(): " + type);
fail("getTypeDefinition() with unknown repository id should throw exception.");
@@ -407,7 +380,7 @@
}
try {
- TypeDefinition type = fProvider.getRepositoryService().getTypeDefinition(repositoryId,
+ TypeDefinition type = fRepSvc.getTypeDefinition(repositoryId,
wrongTypeId, null);
log.debug("getTypeDefinition(): " + type);
fail("getTypeDefinition() with unknown type should throw exception.");
@@ -417,7 +390,7 @@
}
try {
- TypeDefinitionList types = fProvider.getRepositoryService().getTypeChildren(
+ TypeDefinitionList types = fRepSvc.getTypeChildren(
wrongRepositoryId, "CMISDocument", Boolean.TRUE, BigInteger.valueOf(100),
BigInteger.ZERO, null);
log.debug("getTypeChildren(): " + types);
@@ -428,7 +401,7 @@
}
try {
- TypeDefinitionList types = fProvider.getRepositoryService().getTypeChildren(repositoryId,
+ TypeDefinitionList types = fRepSvc.getTypeChildren(repositoryId,
wrongTypeId, Boolean.TRUE, BigInteger.valueOf(100), BigInteger.ZERO, null);
log.debug("getTypeChildren(): " + types);
fail("getTypeDescendants() with unknown type should throw exception.");
@@ -448,7 +421,7 @@
String typeId = RepositoryTestTypeSystemCreator.TOPLEVEL_TYPE;
// get top level type
- TypeDefinition typeContainer = fProvider.getRepositoryService().getTypeDefinition(
+ TypeDefinition typeContainer = fRepSvc.getTypeDefinition(
repositoryId, typeId, null);
assertNotNull(typeContainer);
Map<String, PropertyDefinition<?>> propDefMap = typeContainer.getPropertyDefinitions();
@@ -460,7 +433,7 @@
// get level 1 type
typeId = RepositoryTestTypeSystemCreator.LEVEL1_TYPE;
- typeContainer = fProvider.getRepositoryService().getTypeDefinition(
+ typeContainer = fRepSvc.getTypeDefinition(
repositoryId, typeId, null);
assertNotNull(typeContainer);
propDefMap = typeContainer.getPropertyDefinitions();
@@ -473,7 +446,7 @@
// get level 2 type
typeId = RepositoryTestTypeSystemCreator.LEVEL2_TYPE;
- typeContainer = fProvider.getRepositoryService().getTypeDefinition(
+ typeContainer = fRepSvc.getTypeDefinition(
repositoryId, typeId, null);
assertNotNull(typeContainer);
propDefMap = typeContainer.getPropertyDefinitions();
@@ -489,7 +462,7 @@
}
private String getRepositoryId() {
- List<RepositoryInfoData> repositories = fProvider.getRepositoryService().getRepositoryInfos(
+ List<RepositoryInfoData> repositories = fRepSvc.getRepositoryInfos(
null);
RepositoryInfoData repository = repositories.get(0);
assertNotNull(repository);
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/TypeValidationTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/TypeValidationTest.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/TypeValidationTest.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/TypeValidationTest.java Mon Feb 22 08:58:39 2010
@@ -47,8 +47,6 @@
import org.apache.opencmis.commons.provider.PropertiesData;
import org.apache.opencmis.commons.provider.PropertyData;
import org.apache.opencmis.commons.provider.ProviderObjectFactory;
-import org.apache.opencmis.inmemory.TypeManager;
-import org.apache.opencmis.inmemory.TypeValidator;
import org.apache.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
import org.apache.opencmis.inmemory.types.PropertyCreationHelper;
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/UnitTestTypeSystemCreator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/UnitTestTypeSystemCreator.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/UnitTestTypeSystemCreator.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/UnitTestTypeSystemCreator.java Mon Feb 22 08:58:39 2010
@@ -41,7 +41,6 @@
import org.apache.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
import org.apache.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
import org.apache.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
-import org.apache.opencmis.inmemory.TypeCreator;
import org.apache.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
import org.apache.opencmis.inmemory.types.PropertyCreationHelper;
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/VersioningTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/VersioningTest.java?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/VersioningTest.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/VersioningTest.java Mon Feb 22 08:58:39 2010
@@ -30,8 +30,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.Before;
import org.apache.opencmis.client.provider.factory.CmisProviderFactory;
import org.apache.opencmis.commons.PropertyIds;
import org.apache.opencmis.commons.SessionParameter;
@@ -63,10 +61,12 @@
import org.apache.opencmis.inmemory.RepositoryServiceTest.UnitTestRepositoryInfo;
import org.apache.opencmis.inmemory.server.RuntimeContext;
import org.apache.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
-import org.apache.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
import org.apache.opencmis.inmemory.types.PropertyCreationHelper;
+import org.apache.opencmis.server.spi.CallContext;
+import org.junit.After;
+import org.junit.Before;
-public class VersioningTest extends TestCase {
+public class VersioningTest extends AbstractServiceTst {
private static Log log = LogFactory.getLog(ObjectServiceTest.class);
private static final String REPOSITORY_ID = "UnitTestRepository";
private static final String PROP_VALUE = "Mickey Mouse";
@@ -117,12 +117,11 @@
}
private void setRuntimeContext(String user) {
- Map<String, String> parameters = new HashMap<String, String>();
- parameters.put(ConfigConstants.USERNAME, user);
+ DummyCallContext ctx = new DummyCallContext();
+ ctx.put(CallContext.USERNAME, user);
// Attach the CallContext to a thread local context that can be accessed from everywhere
- ConfigMap cfgReader = new MapConfigReader(parameters);
- RuntimeContext.getRuntimeConfig().attachCfg(cfgReader);
+ RuntimeContext.getRuntimeConfig().attachCfg(ctx);
}
public void testCreateVersionedDocumentMinor() {
@@ -441,6 +440,13 @@
assertEquals(2, checkedOutDocuments.getObjects().size());
}
+ public void testModifyOldVersions() {
+ String versionSeriesId = createVersionSeriesWithThreeVersions();
+ List<ObjectData> allVersions = fVerSvc.getAllVersions(fRepositoryId, versionSeriesId, "*", false, null);
+ assertEquals(3, allVersions.size());
+
+ }
+
private String[] createLevel1Folders() {
ObjectService objSvc = fProvider.getObjectService();
final int num = 2;
@@ -551,7 +557,7 @@
}
- private String getDocument(String id) {
+ public String getDocument(String id) {
String returnedId=null;
try {
ObjectData res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE,
@@ -591,6 +597,62 @@
return id;
}
+ private String createVersionSeriesWithThreeVersions() {
+ String verIdV1 = createDocument(PROP_NAME, fRootFolderId, VersioningState.MAJOR);
+ getDocument(verIdV1);
+
+ ObjectData version = fObjSvc.getObject(fRepositoryId, verIdV1, "*", false, IncludeRelationships.NONE, null, false, false, null);
+ String verSeriesId = getVersionSeriesId(verIdV1, version.getProperties().getProperties());
+
+ // create second version with different content
+ Holder<String>idHolder = new Holder<String>(verIdV1);
+ Holder<Boolean>contentCopied = new Holder<Boolean>(false);
+ fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
+
+ ContentStreamData content2 = createContent('a');
+ PropertiesData newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, "PropertyFromVersion2");
+ idHolder = new Holder<String>(verIdV1);
+ // Test check-in and pass content and properties
+ String checkinComment = "Checkin from Unit Test-2.";
+ fVerSvc.checkIn(fRepositoryId, idHolder, true, newProps, content2, checkinComment, null, null, null,
+ null);
+ String verIdV2 = idHolder.getValue();
+
+ // create third version with different content
+ contentCopied = new Holder<Boolean>(false);
+ fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
+ ContentStreamData content3 = super.createContent('a');
+ newProps = fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, "PropertyFromVersion3");
+ // Test check-in and pass content and properties
+ checkinComment = "Checkin from Unit Test-3.";
+ fVerSvc.checkIn(fRepositoryId, idHolder, true, newProps, content3, checkinComment, null, null, null,
+ null);
+ String verIdV3 = idHolder.getValue();
+
+ // Try to update version2 which should fail (on a versioned document only a document that
+ // is checked out can be modified.
+ try {
+ fCreator.updateProperty(verIdV2, VersionTestTypeSystemCreator.PROPERTY_ID, "ChangeWithoutCheckout");
+ fail("updateProperty for an older version should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisUpdateConflictException);
+ }
+ // try to set content on an older version
+ ContentStreamData content4 = super.createContent('x');
+ idHolder = new Holder<String>(verIdV2);
+ try {
+ fObjSvc.setContentStream(fRepositoryId, idHolder, true, null, content4, null);
+ fail("setContentStream for an older version should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisUpdateConflictException);
+ }
+
+
+
+ return verSeriesId;
+ }
+
+
public static class VersionTestTypeSystemCreator implements TypeCreator {
static public String VERSION_TEST_DOCUMENT_TYPE_ID = "MyVersionedType";
static public String PROPERTY_ID = "StringProp";
Modified: incubator/chemistry/trunk/opencmis/src/site/apt/server-inmemory.apt
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/src/site/apt/server-inmemory.apt?rev=912517&r1=912516&r2=912517&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/src/site/apt/server-inmemory.apt (original)
+++ incubator/chemistry/trunk/opencmis/src/site/apt/server-inmemory.apt Mon Feb 22 08:58:39 2010
@@ -1,13 +1,48 @@
-----
- OpenCMIS InMemory Repository
+ OpenCMIS In-Memory Repository
-----
-OpenCMIS InMemory Repository
+OpenCMIS In-Memory Repository
+
+ The OpenCMIS In-Memory is an implementation of a CMIS repository that holds content and
+ all metadata in memory. After each restart therefore any data stored in the repository is
+ lost. This implementation has two main purposes:
+
+ [[1]] Provide a fast backend for testing purposes without any additional dependencies or
+ configuration.
+
+ [[2]] Provide a sample implementation for the server interface of OpenCMIS.
- <<This repository is not indented for productive use!>>
+* Status
-* Build and Deploy the Test Repository
+ The code is unstable and under development. Expect any interface to change at any time.
+ The following features are implemented:
+
+ * Type System and Repository Service
+
+ * Navigation
+
+ * Object Service
+
+ * Versioning
+
+ Not supported are currently:
+
+ * Query
+
+ * Relationships
+
+ * ACLs
+
+ * Policies
+
+ * Renditions
+
+ * Unfiling
+
+
+* Build and Deploy the Repository
[[1]] {{{./how-to-build.html}Build OpenCMIS}}.
@@ -17,3 +52,59 @@
* Configure the Repository
+
+ The in-memory server has a couple of parameters that can be set in the repository.properties file
+ ( <<</WEB-INF/classes/repository.properties>>> ).
+ The CMIS specification does currently not allow to put a repository in a usable state in a
+ bootstrap process. There is no administrative functionality available to create repositories
+ or types. The in-memory repository implementation therefore provides a couple of settings that
+ put the server in a usable state after startup. So, an initial repository is created and an initial
+ set of type definitions is loaded. The id of the created repository can be configured. The types
+ to be made available must be provided in a Java class as code. By default there is one such class
+ in file <<<org.apache.opencmis.inmemory.types.DefaultTypeSystemCreator.java>>> available. You can take
+ this as an example if you want to provide your own custom types. Such a class must implement the
+ <<<org.apache.opencmis.inmemory.TypeCreator>>> interface which consists of a single method that returns
+ a list of <<<TypeDefinition>>> objects. This method will be called once during startup.
+
+ Some clients just support read-only access. The in-memory repository supports such clients
+ by providing the possibility to fill a repository on start-up with data (folders and documents).
+ The folder and document types to be used can be configured and also the number of documents
+ and folders that are created. Those configuration parameters start with the prefix
+ <<<RepositoryFiller.>>>
+
+
++-----------------------------------------------------------------------------------------------------------------
+
+# In Memory Settings
+ # The class that enables the in-memory repository as server implementation
+class=org.apache.opencmis.inmemory.server.ServiceFactory
+
+ # A repository that is created on start-up
+InMemoryServer.RepositoryId=A1
+
+ # The class that used to initialize the type system (creates all types that are available)
+InMemoryServer.TypesCreatorClass=org.apache.opencmis.inmemory.types.DefaultTypeSystemCreator
+
+# settings to initialize a repository with data on start-up
+ # enable or disable
+RepositoryFiller.Enable=true
+ # Type id of documents that are created
+RepositoryFiller.DocumentTypeId=ComplexType
+ # Type id of folders that are created
+RepositoryFiller.FolderTypeId=cmis:folder
+ # Number of documents created per folder
+RepositoryFiller.DocsPerFolder=3
+ # Number of folders created per folder
+RepositoryFiller.FolderPerFolder=2
+ # number of folder levels created (depth of hierarchy)
+RepositoryFiller.Depth=3
+ # Size of content for documents (0=do not create content), default=0
+RepositoryFiller.ContentSizeInKB=32
+ # properties to set for a document
+RepositoryFiller.DocumentProperty.0=StringProp
+#RepositoryFiller.DocumentProperty.1=StringPropMV
+ # properties to set for a folder
+#RepositoryFiller.FolderProperty.0=StringFolderProp
+
++-----------------------------------------------------------------------------------------------------------------
+