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/04/21 12:13:01 UTC

svn commit: r936243 - in /incubator/chemistry/opencmis/trunk: chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/ chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/...

Author: jens
Date: Wed Apr 21 10:13:00 2010
New Revision: 936243

URL: http://svn.apache.org/viewvc?rev=936243&view=rev
Log:
Adjust thread local storage model for InMemory server to the one used be Fileshare
reenable disabled testAssert

Modified:
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/ServiceFactory.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/ReadOnlyObjectIT.java

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java Wed Apr 21 10:13:00 2010
@@ -50,7 +50,7 @@ import org.apache.chemistry.opencmis.inm
  */
 public class DataObjectCreator {
 
-	public static AllowableActions fillAllowableActions(ObjectStore objStore, StoredObject so) {
+	public static AllowableActions fillAllowableActions(ObjectStore objStore, StoredObject so, String user) {
 
 		boolean isFolder = so instanceof Folder;
 		boolean isDocument = so instanceof Content;
@@ -60,7 +60,6 @@ public class DataObjectCreator {
 		boolean isVersioned = so instanceof Version || so instanceof VersionedDocument;
 		boolean hasContent = so instanceof Content && ((Content) so).hasContent();
 
-		String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
 		if (so instanceof Version) {
 			isCheckedOut = ((Version) so).isPwc();
 			canCheckIn = isCheckedOut && ((Version) so).getParentDocument().getCheckedOutBy().equals(user);

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java Wed Apr 21 10:13:00 2010
@@ -66,7 +66,8 @@ public class InMemoryMultiFilingServiceI
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, folder, objectInfos);
 
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false,
+		String user = context.getUsername();
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, user, false,
 				IncludeRelationships.NONE, null, false, false, extension);
 
 		LOG.debug("End addObjectToFolder()");
@@ -92,7 +93,8 @@ public class InMemoryMultiFilingServiceI
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, folder, objectInfos);
 
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false,
+		String user = context.getUsername();
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, user, false,
 				IncludeRelationships.NONE, null, false, false, extension);
 
 		LOG.debug("End removeObjectFromFolder()");

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java Wed Apr 21 10:13:00 2010
@@ -87,19 +87,20 @@ public class InMemoryNavigationServiceIm
 		else
 			checkRepositoryId(repositoryId);
 
+		String user = context.getUsername();
 		if (null == folderId) {
-			List<VersionedDocument> checkedOuts = fStoreManager.getObjectStore(repositoryId)
-			.getCheckedOutDocuments(orderBy);
+			List<VersionedDocument> checkedOuts = fStoreManager.getObjectStore(repositoryId).getCheckedOutDocuments(
+					orderBy);
 			for (VersionedDocument checkedOut : checkedOuts) {
-				ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, checkedOut, filter,
+				ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, checkedOut, filter, user,
 						includeAllowableActions, includeRelationships, renditionFilter, false, false, extension);
 				fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, checkedOut, objectInfos);
 				odList.add(od);
 			}
 		} else {
 			ObjectInFolderList children = getChildrenIntern(repositoryId, folderId, filter, orderBy,
-					includeAllowableActions, includeRelationships, renditionFilter, false, -1, -1, false,
-					objectInfos);
+					includeAllowableActions, includeRelationships, renditionFilter, false, -1, -1, false, objectInfos,
+					user);
 			for (ObjectInFolderData child : children.getObjects()) {
 				ObjectData obj = child.getObject();
 				StoredObject so = fStoreManager.getObjectStore(repositoryId).getObjectById(obj.getId());
@@ -128,9 +129,10 @@ public class InMemoryNavigationServiceIm
 
 		int maxItemsInt = maxItems == null ? -1 : maxItems.intValue();
 		int skipCountInt = skipCount == null ? -1 : skipCount.intValue();
-		ObjectInFolderList res = getChildrenIntern(repositoryId, folderId, filter, orderBy,
-				includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItemsInt,
-				skipCountInt, false, objectInfos);
+		String user = context.getUsername();
+		ObjectInFolderList res = getChildrenIntern(repositoryId, folderId, filter, orderBy, includeAllowableActions,
+				includeRelationships, renditionFilter, includePathSegment, maxItemsInt, skipCountInt, false,
+				objectInfos, user);
 		LOG.debug("stop getChildren()");
 		return res;
 	}
@@ -154,9 +156,10 @@ public class InMemoryNavigationServiceIm
 			levels = depth.intValue();
 
 		int level = 0;
+		String user = context.getUsername();
 		List<ObjectInFolderContainer> result = getDescendantsIntern(repositoryId, folderId, filter,
 				includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, level, levels,
-				false, objectInfos);
+				false, objectInfos, user);
 
 		LOG.debug("stop getDescendants()");
 		return result;
@@ -200,9 +203,10 @@ public class InMemoryNavigationServiceIm
 
 		int levels = depth == null ? 2 : depth.intValue();
 		int level = 0;
+		String user = context.getUsername();
 		List<ObjectInFolderContainer> result = getDescendantsIntern(repositoryId, folderId, filter,
 				includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, level, levels,
-				true, objectInfos);
+				true, objectInfos, user);
 
 		LOG.debug("stop getFolderTree()");
 		return result;
@@ -243,7 +247,8 @@ public class InMemoryNavigationServiceIm
 
 	private ObjectInFolderList getChildrenIntern(String repositoryId, String folderId, String filter, String orderBy,
 			Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-			Boolean includePathSegments, int maxItems, int skipCount, boolean folderOnly, ObjectInfoHolder objectInfos) {
+			Boolean includePathSegments, int maxItems, int skipCount, boolean folderOnly, ObjectInfoHolder objectInfos,
+			String user) {
 
 		ObjectInFolderListImpl result = new ObjectInFolderListImpl();
 		List<ObjectInFolderData> folderList = new ArrayList<ObjectInFolderData>();
@@ -270,7 +275,7 @@ public class InMemoryNavigationServiceIm
 			if (includePathSegments != null && includePathSegments)
 				oifd.setPathSegment(spo.getName());
 			if (includeAllowableActions != null && includeAllowableActions) {
-				AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(fs, spo);
+				AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(fs, spo, user);
 				objectData.setAllowableActions(allowableActions);
 			}
 			if (includeRelationships != null && includeRelationships != IncludeRelationships.NONE) {
@@ -278,9 +283,9 @@ public class InMemoryNavigationServiceIm
 			}
 			if (renditionFilter != null && renditionFilter.length() > 0) {
 				objectData.setRelationships(null /*
-				 * f.getRenditions(renditionFilter
-				 * )
-				 */);
+												 * f.getRenditions(renditionFilter
+												 * )
+												 */);
 			}
 
 			Properties props = PropertyCreationHelper.getPropertiesFromObject(repositoryId, spo, fStoreManager,
@@ -300,7 +305,8 @@ public class InMemoryNavigationServiceIm
 
 	private List<ObjectInFolderContainer> getDescendantsIntern(String repositoryId, String folderId, String filter,
 			Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-			Boolean includePathSegments, int level, int maxLevels, boolean folderOnly, ObjectInfoHolder objectInfos) {
+			Boolean includePathSegments, int level, int maxLevels, boolean folderOnly, ObjectInfoHolder objectInfos,
+			String user) {
 
 		// log.info("getDescendantsIntern: " + folderId + ", in level " + level
 		// + ", max levels " + maxLevels);
@@ -310,7 +316,7 @@ public class InMemoryNavigationServiceIm
 			String orderBy = PropertyIds.NAME;
 			ObjectInFolderList children = getChildrenIntern(repositoryId, folderId, filter, orderBy,
 					includeAllowableActions, includeRelationships, renditionFilter, includePathSegments, 1000, 0,
-					folderOnly, objectInfos);
+					folderOnly, objectInfos, user);
 
 			childrenOfFolderId = new ArrayList<ObjectInFolderContainer>();
 			if (null != children) {
@@ -320,7 +326,7 @@ public class InMemoryNavigationServiceIm
 					String childId = child.getObject().getId();
 					List<ObjectInFolderContainer> subChildren = getDescendantsIntern(repositoryId, childId, filter,
 							includeAllowableActions, includeRelationships, renditionFilter, includePathSegments,
-							level + 1, maxLevels, folderOnly, objectInfos);
+							level + 1, maxLevels, folderOnly, objectInfos, user);
 
 					oifc.setObject(child);
 					if (null != subChildren)
@@ -395,7 +401,7 @@ public class InMemoryNavigationServiceIm
 	void copyFilteredProperties(String repositoryId, StoredObject so, String filter, ObjectDataImpl objData) {
 		List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
 		Properties props = PropertyCreationHelper
-		.getPropertiesFromObject(repositoryId, so, fStoreManager, requestedIds);
+				.getPropertiesFromObject(repositoryId, so, fStoreManager, requestedIds);
 		objData.setProperties(props);
 	}
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java Wed Apr 21 10:13:00 2010
@@ -93,8 +93,9 @@ public class InMemoryObjectServiceImpl e
 		// Attach the CallContext to a thread local context that can be
 		// accessed from everywhere
 
+		String user = context.getUsername();
 		StoredObject so = createDocumentIntern(repositoryId, properties, folderId, contentStream, versioningState,
-				policies, addAces, removeAces, extension);
+				policies, addAces, removeAces, extension, user);
 		LOG.debug("stop createDocument()");
 		return so.getId();
 	}
@@ -139,8 +140,8 @@ public class InMemoryObjectServiceImpl e
 			List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
 		LOG.debug("start createFolder()");
 
-		Folder folder = createFolderIntern(repositoryId, properties, folderId, policies, addAces, removeAces,
-				extension);
+		String user = context.getUsername();
+		Folder folder = createFolderIntern(repositoryId, properties, folderId, policies, addAces, removeAces, extension, user);
 		LOG.debug("stop createFolder()");
 		return folder.getId();
 	}
@@ -163,8 +164,7 @@ public class InMemoryObjectServiceImpl e
 		// TODO to be completed if relationships are implemented
 		LOG.debug("start createRelationship()");
 		checkRepositoryId(repositoryId);
-		StoredObject so = createRelationshipIntern(repositoryId, properties, policies, addAces, removeAces,
-				extension);
+		StoredObject so = createRelationshipIntern(repositoryId, properties, policies, addAces, removeAces, extension);
 		LOG.debug("stop createRelationship()");
 		return so == null ? null : so.getId();
 	}
@@ -191,7 +191,6 @@ public class InMemoryObjectServiceImpl e
 			ContentStream contentStream, VersioningState versioningState, List<String> policies,
 			ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
-
 		if (null == properties || null == properties.getProperties())
 			throw new RuntimeException("Cannot create object, without properties.");
 
@@ -200,7 +199,7 @@ public class InMemoryObjectServiceImpl e
 		String typeId = pd == null ? null : pd.getFirstValue();
 		if (null == typeId)
 			throw new RuntimeException(
-			"Cannot create object, without a type (no property with id CMIS_OBJECT_TYPE_ID).");
+					"Cannot create object, without a type (no property with id CMIS_OBJECT_TYPE_ID).");
 
 		TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, typeId);
 		if (typeDefC == null)
@@ -209,11 +208,12 @@ public class InMemoryObjectServiceImpl e
 		// check if the given type is a document type
 		BaseTypeId typeBaseId = typeDefC.getTypeDefinition().getBaseTypeId();
 		StoredObject so = null;
+		String user = context.getUsername();
 		if (typeBaseId.equals(InMemoryDocumentTypeDefinition.getRootDocumentType().getBaseTypeId())) {
-			so = createDocumentIntern(repositoryId, properties, folderId, contentStream, versioningState, null,
-					null, null, null);
+			so = createDocumentIntern(repositoryId, properties, folderId, contentStream, versioningState, null, null,
+					null, null, user);
 		} else if (typeBaseId.equals(InMemoryFolderTypeDefinition.getRootFolderType().getBaseTypeId())) {
-			so = createFolderIntern(repositoryId, properties, folderId, null, null, null, null);
+			so = createFolderIntern(repositoryId, properties, folderId, null, null, null, null, user);
 		} else if (typeBaseId.equals(InMemoryPolicyTypeDefinition.getRootPolicyType().getBaseTypeId())) {
 			so = createPolicyIntern(repositoryId, properties, folderId, null, null, null, null);
 		} else if (typeBaseId.equals(InMemoryRelationshipTypeDefinition.getRootRelationshipType().getBaseTypeId())) {
@@ -223,7 +223,7 @@ public class InMemoryObjectServiceImpl e
 
 		// Make a call to getObject to convert the resulting id into an
 		// ObjectData
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false,
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, user, false,
 				IncludeRelationships.NONE, null, false, false, extension);
 
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
@@ -312,7 +312,8 @@ public class InMemoryObjectServiceImpl e
 		if (so == null)
 			throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
 
-		AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(objectStore, so);
+		String user = context.getUsername();
+		AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(objectStore, so, user);
 		LOG.debug("stop getAllowableActions()");
 		return allowableActions;
 	}
@@ -346,7 +347,8 @@ public class InMemoryObjectServiceImpl e
 		if (so == null)
 			throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
 
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, filter, includeAllowableActions,
+		String user = context.getUsername();
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, filter, user, includeAllowableActions,
 				includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
 
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
@@ -368,7 +370,8 @@ public class InMemoryObjectServiceImpl e
 		if (so == null)
 			throw new CmisObjectNotFoundException("Unknown path: " + path);
 
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, filter, includeAllowableActions,
+		String user = context.getUsername();
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, filter, user, includeAllowableActions,
 				includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
 
 		LOG.debug("stop getObjectByPath()");
@@ -391,8 +394,8 @@ public class InMemoryObjectServiceImpl e
 
 		// build properties collection
 		List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
-		Properties props = PropertyCreationHelper.getPropertiesFromObject(repositoryId, so, fStoreManager,
-				requestedIds);
+		Properties props = PropertyCreationHelper
+				.getPropertiesFromObject(repositoryId, so, fStoreManager, requestedIds);
 		LOG.debug("stop getProperties()");
 		return props;
 	}
@@ -439,8 +442,7 @@ public class InMemoryObjectServiceImpl e
 		else if (soSource instanceof Folder)
 			sourceFolder = (Folder) soSource;
 		else
-			throw new CmisNotSupportedException("Source " + sourceFolderId
-					+ " of a move operation must be a folder");
+			throw new CmisNotSupportedException("Source " + sourceFolderId + " of a move operation must be a folder");
 
 		boolean foundOldParent = false;
 		for (Folder parent : spo.getParents()) {
@@ -465,7 +467,8 @@ public class InMemoryObjectServiceImpl e
 		// additional information:
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
 
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false,
+		String user = context.getUsername();
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, user, false,
 				IncludeRelationships.NONE, null, false, false, extension);
 
 		return od;
@@ -490,7 +493,7 @@ public class InMemoryObjectServiceImpl e
 		else if (so instanceof DocumentVersion) {
 			// something that is versionable check the proper status of the
 			// object
-			String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+			String user = context.getUsername();
 			testHasProperCheckedOutStatus(so, user);
 			content = (DocumentVersion) so;
 		} else
@@ -516,7 +519,7 @@ public class InMemoryObjectServiceImpl e
 
 		// if the object is a versionable object it must be checked-out
 		if (so instanceof VersionedDocument || so instanceof DocumentVersion) {
-			String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+			String user = context.getUsername();
 			// VersionedDocument verDoc =
 			// testIsNotCheckedOutBySomeoneElse(so, user);
 			testHasProperCheckedOutStatus(so, user);
@@ -548,18 +551,18 @@ public class InMemoryObjectServiceImpl e
 				if (propDef.isRequired())
 					throw new CmisConstraintException(
 							"updateProperties failed, following property can't be deleted, because it is required: "
-							+ key);
+									+ key);
 				oldProperties.remove(key);
 				hasUpdatedOtherProps = true;
 			} else {
 				if (propDef.getUpdatability().equals(Updatability.WHENCHECKEDOUT) && !isCheckedOut)
 					throw new CmisConstraintException(
 							"updateProperties failed, following property can't be updated, because it is not checked-out: "
-							+ key);
+									+ key);
 				else if (!propDef.getUpdatability().equals(Updatability.READWRITE))
 					throw new CmisConstraintException(
 							"updateProperties failed, following property can't be updated, because it is not writable: "
-							+ key);
+									+ key);
 				oldProperties.put(key, value);
 				hasUpdatedOtherProps = true;
 			}
@@ -577,7 +580,7 @@ public class InMemoryObjectServiceImpl e
 			for (Folder parent : parents) {
 				if (parent.hasChild(newName))
 					throw new CmisConstraintException(
-					"updateProperties failed, cannot rename because path already exists.");
+							"updateProperties failed, cannot rename because path already exists.");
 			}
 			so.rename((String) pd.getFirstValue()); // note: this does
 			// persist
@@ -586,7 +589,7 @@ public class InMemoryObjectServiceImpl e
 
 		if (hasUpdatedOtherProps) {
 			// set user, creation date, etc.
-			String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+			String user = context.getUsername();
 
 			if (user == null)
 				user = "unknown";
@@ -616,7 +619,8 @@ public class InMemoryObjectServiceImpl e
 		// additional information:
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
 
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false,
+		String user = context.getUsername();
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, user, false,
 				IncludeRelationships.NONE, null, false, false, extension);
 
 		LOG.debug("stop updateProperties()");
@@ -629,7 +633,7 @@ public class InMemoryObjectServiceImpl e
 
 	private StoredObject createDocumentIntern(String repositoryId, Properties properties, String folderId,
 			ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addACEs,
-			Acl removeACEs, ExtensionsData extension) {
+			Acl removeACEs, ExtensionsData extension, String user) {
 		checkRepositoryId(repositoryId);
 
 		ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
@@ -670,7 +674,6 @@ public class InMemoryObjectServiceImpl e
 		TypeValidator.validateProperties(typeDef, properties, true);
 
 		// set user, creation date, etc.
-		String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
 		if (user == null)
 			user = "unknown";
 
@@ -712,7 +715,7 @@ public class InMemoryObjectServiceImpl e
 	}
 
 	private Folder createFolderIntern(String repositoryId, Properties properties, String folderId,
-			List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
+			List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension, String user) {
 
 		// Attach the CallContext to a thread local context that can be accessed
 		// from everywhere
@@ -759,7 +762,6 @@ public class InMemoryObjectServiceImpl e
 			ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
 			Folder newFolder = objStore.createFolder(folderName);
 			// set default system attributes
-			String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
 			if (user == null)
 				user = "unknown";
 			newFolder.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java Wed Apr 21 10:13:00 2010
@@ -73,7 +73,8 @@ public class InMemoryService  extends Ab
 
 	private static final Log LOG = LogFactory.getLog(InMemoryService.class.getName());
 
-	private StoreManager fStoreManager; // singleton root of everything
+	private StoreManager storeManager; // singleton root of everything
+	private CallContext context;
 
 	private InMemoryRepositoryServiceImpl fRepSvc;
 	private InMemoryObjectServiceImpl fObjSvc;
@@ -83,7 +84,7 @@ public class InMemoryService  extends Ab
 	private InMemoryMultiFilingServiceImpl fMultiSvc;
 
 	public StoreManager getStoreManager() {
-		return fStoreManager;
+		return storeManager;
 	}
 
 	public InMemoryService(Map<String, String> parameters) {
@@ -93,16 +94,16 @@ public class InMemoryService  extends Ab
 		if (null == repositoryClassName)
 			repositoryClassName = StoreManagerImpl.class.getName();
 
-		if (null == fStoreManager)
-			fStoreManager = StoreManagerFactory.createInstance(repositoryClassName);
+		if (null == storeManager)
+			storeManager = StoreManagerFactory.createInstance(repositoryClassName);
 
 		String repositoryId = parameters.get(ConfigConstants.REPOSITORY_ID);
 
-		List<String> allAvailableRepositories = fStoreManager.getAllRepositoryIds();
+		List<String> allAvailableRepositories = storeManager.getAllRepositoryIds();
 
 		// init existing repositories
 		for (String existingRepId : allAvailableRepositories)
-			fStoreManager.initRepository(existingRepId);
+			storeManager.initRepository(existingRepId);
 
 		// create repository if configured as a startup parameter
 		if (null != repositoryId) {
@@ -110,7 +111,7 @@ public class InMemoryService  extends Ab
 				LOG.warn("Repostory " + repositoryId + " already exists and will not be created.");
 			else {
 				String typeCreatorClassName = parameters.get(ConfigConstants.TYPE_CREATOR_CLASS);
-				fStoreManager.createAndInitRepository(repositoryId, typeCreatorClassName);
+				storeManager.createAndInitRepository(repositoryId, typeCreatorClassName);
 			}
 		}
 
@@ -121,39 +122,46 @@ public class InMemoryService  extends Ab
 			fillRepositoryIfConfigured(parameters, repositoryId);
 
 		
-		fRepSvc = new InMemoryRepositoryServiceImpl(fStoreManager);
-		fNavSvc = new InMemoryNavigationServiceImpl(fStoreManager);
-		fObjSvc = new InMemoryObjectServiceImpl(fStoreManager);
-		fVerSvc = new InMemoryVersioningServiceImpl(fStoreManager, fObjSvc);
-		fDisSvc = new InMemoryDiscoveryServiceImpl(fStoreManager, fRepSvc, fNavSvc);
-	    fMultiSvc = new InMemoryMultiFilingServiceImpl(fStoreManager);
+		fRepSvc = new InMemoryRepositoryServiceImpl(storeManager);
+		fNavSvc = new InMemoryNavigationServiceImpl(storeManager);
+		fObjSvc = new InMemoryObjectServiceImpl(storeManager);
+		fVerSvc = new InMemoryVersioningServiceImpl(storeManager, fObjSvc);
+		fDisSvc = new InMemoryDiscoveryServiceImpl(storeManager, fRepSvc, fNavSvc);
+	    fMultiSvc = new InMemoryMultiFilingServiceImpl(storeManager);
 
 	}
 	
+	public CallContext getCallContext() {
+		return context;
+	}
+
+	public void setCallContext(CallContext context) {
+		this.context = context;
+	}
 
 	// --- repository service ---
 
 	@Override
 	public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
-		return fRepSvc.getRepositoryInfos(null, extension);
+		return fRepSvc.getRepositoryInfos(getCallContext(), extension);
 	}
 
 	public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
-		return fRepSvc.getRepositoryInfo(null, repositoryId, extension);
+		return fRepSvc.getRepositoryInfo(getCallContext(), repositoryId, extension);
 	}
 
 	public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
 			BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-		return fRepSvc.getTypeChildren(null, repositoryId, typeId, includePropertyDefinitions, maxItems, skipCount, extension);
+		return fRepSvc.getTypeChildren(getCallContext(), repositoryId, typeId, includePropertyDefinitions, maxItems, skipCount, extension);
 	}
 
 	public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
-		return fRepSvc.getTypeDefinition(null, repositoryId, typeId, extension);
+		return fRepSvc.getTypeDefinition(getCallContext(), repositoryId, typeId, extension);
 	}
 
 	public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
 			Boolean includePropertyDefinitions, ExtensionsData extension) {
-		return fRepSvc.getTypeDescendants(null, repositoryId, typeId, depth, includePropertyDefinitions, extension);
+		return fRepSvc.getTypeDescendants(getCallContext(), repositoryId, typeId, depth, includePropertyDefinitions, extension);
 	}
 
 	// --- navigation service ---
@@ -161,49 +169,42 @@ public class InMemoryService  extends Ab
 	public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
 			Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
 			BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-		return fNavSvc.getCheckedOutDocs(null, repositoryId, folderId, filter, orderBy, includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension, null);
+		return fNavSvc.getCheckedOutDocs(getCallContext(), repositoryId, folderId, filter, orderBy, includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension, null);
 	}
 
 	public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
 			Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
 			Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-		return fNavSvc.getChildren(null, repositoryId, folderId, filter, orderBy, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension, null);
+		return fNavSvc.getChildren(getCallContext(), repositoryId, folderId, filter, orderBy, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension, null);
 	}
 
 	public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
 			String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
 			String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-//		List<ObjectInFolderContainer> res =  super.getDescendants(repositoryId, folderId, depth, filter, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension);
-		return fNavSvc.getDescendants(null, repositoryId, folderId, depth, filter, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension, null);
-//		return res;
+		return fNavSvc.getDescendants(getCallContext(), repositoryId, folderId, depth, filter, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension, null);
 	}
 
 	public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
-//		ObjectData res =  super.getFolderParent(repositoryId, folderId, filter, extension);
-		return fNavSvc.getFolderParent(null, repositoryId, folderId, filter, extension, null);
-//		return res;
+		return fNavSvc.getFolderParent(getCallContext(), repositoryId, folderId, filter, extension, null);
 	}
 
 	public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
 			String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
 			String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
-//		List<ObjectInFolderContainer> res = super.getFolderTree(repositoryId, folderId, depth, filter, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension);
-		return fNavSvc.getFolderTree(null, repositoryId, folderId, depth, filter, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension, null);
-//		return res;
+		return fNavSvc.getFolderTree(getCallContext(), repositoryId, folderId, depth, filter, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, extension, null);
 	}
 
 	public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
 			Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
 			Boolean includeRelativePathSegment, ExtensionsData extension) {
-		return fNavSvc.getObjectParents(null, repositoryId, objectId, filter, includeAllowableActions, includeRelationships, renditionFilter, includeRelativePathSegment, extension, null);
+		return fNavSvc.getObjectParents(getCallContext(), repositoryId, objectId, filter, includeAllowableActions, includeRelationships, renditionFilter, includeRelativePathSegment, extension, null);
 	}
 
 	// --- object service ---
 
 	public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
 			VersioningState versioningState, List<String> policies, ExtensionsData extension) {
-//		super.create(repositoryId, properties, folderId, contentStream, versioningState, policies, extension);
-		ObjectData od = fObjSvc.create(null, repositoryId, properties, folderId, contentStream, versioningState, policies, extension, null);
+		ObjectData od = fObjSvc.create(getCallContext(), repositoryId, properties, folderId, contentStream, versioningState, policies, extension, null);
 		return od.getId();
 
 	}
@@ -211,148 +212,125 @@ public class InMemoryService  extends Ab
 	public String createDocument(String repositoryId, Properties properties, String folderId,
 			ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
 			Acl removeAces, ExtensionsData extension) {
-//		super.createDocument(repositoryId, properties, folderId, contentStream, versioningState, policies, addAces, removeAces, extension);
-		return fObjSvc.createDocument(null, repositoryId, properties, folderId, contentStream, versioningState, policies, addAces, removeAces, extension);
+		return fObjSvc.createDocument(getCallContext(), repositoryId, properties, folderId, contentStream, versioningState, policies, addAces, removeAces, extension);
 	}
 
 	public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
 			String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
 			ExtensionsData extension) {
-//		super.createDocumentFromSource(repositoryId, sourceId, properties, folderId, versioningState, policies, addAces, removeAces, extension);
-		return fObjSvc.createDocumentFromSource(null, repositoryId, sourceId, properties, folderId, versioningState, policies, addAces, removeAces, extension);
+		return fObjSvc.createDocumentFromSource(getCallContext(), repositoryId, sourceId, properties, folderId, versioningState, policies, addAces, removeAces, extension);
 	}
 
 	public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
 			Acl addAces, Acl removeAces, ExtensionsData extension) {
-//		super.createFolder(repositoryId, properties, folderId, policies, addAces, removeAces, extension);
-		return fObjSvc.createFolder(null, repositoryId, properties, folderId, policies, addAces, removeAces, extension);
+		return fObjSvc.createFolder(getCallContext(), repositoryId, properties, folderId, policies, addAces, removeAces, extension);
 	}
 
 	public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
 			Acl addAces, Acl removeAces, ExtensionsData extension) {
-//		super.createPolicy(repositoryId, properties, folderId, policies, addAces, removeAces, extension);
-		return fObjSvc.createPolicy(null, repositoryId, properties, folderId, policies, addAces, removeAces, extension);
+		return fObjSvc.createPolicy(getCallContext(), repositoryId, properties, folderId, policies, addAces, removeAces, extension);
 	}
 
 	public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
 			Acl removeAces, ExtensionsData extension) {
-//		super.createRelationship(repositoryId, properties, policies, addAces, removeAces, extension);
-		return fObjSvc.createRelationship(null, repositoryId, properties, policies, addAces, removeAces, extension);
+		return fObjSvc.createRelationship(getCallContext(), repositoryId, properties, policies, addAces, removeAces, extension);
 	}
 
 	public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
 			ExtensionsData extension) {
-//		super.deleteContentStream(repositoryId, objectId, changeToken, extension);
-		fObjSvc.deleteContentStream(null, repositoryId, objectId, changeToken, extension);
+		fObjSvc.deleteContentStream(getCallContext(), repositoryId, objectId, changeToken, extension);
 	}
 
 	public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
-//		super.deleteObject(repositoryId, objectId, allVersions, extension);
-		fObjSvc.deleteObjectOrCancelCheckOut(null, repositoryId, objectId, allVersions, extension);
+		fObjSvc.deleteObjectOrCancelCheckOut(getCallContext(), repositoryId, objectId, allVersions, extension);
 	}
 
 	public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
 			ExtensionsData extension) {
-//		super.deleteObjectOrCancelCheckOut(repositoryId, objectId, allVersions, extension);
-		fObjSvc.deleteObjectOrCancelCheckOut(null, repositoryId, objectId, allVersions, extension);
+		fObjSvc.deleteObjectOrCancelCheckOut(getCallContext(), repositoryId, objectId, allVersions, extension);
 	}
 
 	public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
 			UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
-//		super.deleteTree(repositoryId, folderId, allVersions, unfileObjects, continueOnFailure, extension);
-		return fObjSvc.deleteTree(null, repositoryId, folderId, allVersions, unfileObjects, continueOnFailure, extension);
+		return fObjSvc.deleteTree(getCallContext(), repositoryId, folderId, allVersions, unfileObjects, continueOnFailure, extension);
 	}
 
 	public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
-//		super.getAllowableActions(repositoryId, objectId, extension);
-		return fObjSvc.getAllowableActions(null, repositoryId, objectId, extension);
+		return fObjSvc.getAllowableActions(getCallContext(), repositoryId, objectId, extension);
 	}
 
 	public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
 			BigInteger length, ExtensionsData extension) {
-//		super.getContentStream(repositoryId, objectId, streamId, offset, length, extension);
-		return fObjSvc.getContentStream(null, repositoryId, objectId, streamId, offset, length, extension);
+		return fObjSvc.getContentStream(getCallContext(), repositoryId, objectId, streamId, offset, length, extension);
 	}
 
 	public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
 			IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
 			Boolean includeAcl, ExtensionsData extension) {
-		return fObjSvc.getObject(null, repositoryId, objectId, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, null);
+		return fObjSvc.getObject(getCallContext(), repositoryId, objectId, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, null);
 	}
 
 	public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
 			IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
 			Boolean includeAcl, ExtensionsData extension) {
-//		super.getObjectByPath(repositoryId, path, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-		return fObjSvc.getObjectByPath(null, repositoryId, path, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, null);
+		return fObjSvc.getObjectByPath(getCallContext(), repositoryId, path, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, null);
 	}
 
 	public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
-//		super.getProperties(repositoryId, objectId, filter, extension);
-		return fObjSvc.getProperties(null, repositoryId, objectId, filter, extension);
+		return fObjSvc.getProperties(getCallContext(), repositoryId, objectId, filter, extension);
 	}
 
 	public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
 			BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
-//		super.getRenditions(repositoryId, objectId, renditionFilter, maxItems, skipCount, extension);
-		return fObjSvc.getRenditions(null, repositoryId, objectId, renditionFilter, maxItems, skipCount, extension);		
+		return fObjSvc.getRenditions(getCallContext(), repositoryId, objectId, renditionFilter, maxItems, skipCount, extension);		
 	}
 
 	public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
 			ExtensionsData extension) {
-//		super.moveObject(repositoryId, objectId, targetFolderId, sourceFolderId, extension);
-		fObjSvc.moveObject(null, repositoryId, objectId, targetFolderId, sourceFolderId, extension, null);
+		fObjSvc.moveObject(getCallContext(), repositoryId, objectId, targetFolderId, sourceFolderId, extension, null);
 	}
 
 	public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
 			Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
-//		super.setContentStream(repositoryId, objectId, overwriteFlag, changeToken, contentStream, extension);
-		fObjSvc.setContentStream(null, repositoryId, objectId, overwriteFlag, changeToken, contentStream, extension);
+		fObjSvc.setContentStream(getCallContext(), repositoryId, objectId, overwriteFlag, changeToken, contentStream, extension);
 	}
 
 	public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
 			Properties properties, ExtensionsData extension) {
-//		super.updateProperties(repositoryId, objectId, changeToken, properties, extension);
-		fObjSvc.updateProperties(null, repositoryId, objectId, changeToken, properties, null, extension, null);
+		fObjSvc.updateProperties(getCallContext(), repositoryId, objectId, changeToken, properties, null, extension, null);
 	}
 
 	// --- versioning service ---
 
 	public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
-//		super.cancelCheckOut(repositoryId, objectId, extension);
-		fVerSvc.cancelCheckOut(null, repositoryId, objectId, extension);
+		fVerSvc.cancelCheckOut(getCallContext(), repositoryId, objectId, extension);
 	}
 
 	public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
 			ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
 			ExtensionsData extension) {
-//		super.checkIn(repositoryId, objectId, major, properties, contentStream, checkinComment, policies, addAces, removeAces, extension);
-		fVerSvc.checkIn(null, repositoryId, objectId, major, properties, contentStream, checkinComment, policies, addAces, removeAces, extension, null);
+		fVerSvc.checkIn(getCallContext(), repositoryId, objectId, major, properties, contentStream, checkinComment, policies, addAces, removeAces, extension, null);
 	}
 
 	public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
 			Holder<Boolean> contentCopied) {
-//		super.checkOut(repositoryId, objectId, extension, contentCopied);
-		fVerSvc.checkOut(null, repositoryId, objectId, extension, contentCopied, null);
+		fVerSvc.checkOut(getCallContext(), repositoryId, objectId, extension, contentCopied, null);
 	}
 
 	public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
 			Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
 			String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
-//		super.getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
-		return fVerSvc.getObjectOfLatestVersion(null, repositoryId, versionSeriesId, major, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, null);
+		return fVerSvc.getObjectOfLatestVersion(getCallContext(), repositoryId, versionSeriesId, major, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, null);
 	}
 
 	public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
 			Boolean major, String filter, ExtensionsData extension) {
-//		super.getPropertiesOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter, extension);
-		return fVerSvc.getPropertiesOfLatestVersion(null, repositoryId, versionSeriesId, major, filter, extension);
+		return fVerSvc.getPropertiesOfLatestVersion(getCallContext(), repositoryId, versionSeriesId, major, filter, extension);
 	}
 
 	public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
 			Boolean includeAllowableActions, ExtensionsData extension) {
-//		super.getAllVersions(repositoryId, objectId, versionSeriesId, filter, includeAllowableActions, extension);
-		return fVerSvc.getAllVersions(null, repositoryId, versionSeriesId, filter, includeAllowableActions, extension, null);
+		return fVerSvc.getAllVersions(getCallContext(), repositoryId, versionSeriesId, filter, includeAllowableActions, extension, null);
 	}
 
 	// --- discovery service ---
@@ -372,13 +350,11 @@ public class InMemoryService  extends Ab
 
 	public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
 			ExtensionsData extension) {
-//		super.addObjectToFolder(repositoryId, objectId, folderId, allVersions, extension);
-		fMultiSvc.addObjectToFolder(null, repositoryId, objectId, folderId, allVersions, extension, null);
+		fMultiSvc.addObjectToFolder(getCallContext(), repositoryId, objectId, folderId, allVersions, extension, null);
 	}
 
 	public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
-//		super.removeObjectFromFolder(repositoryId, objectId, folderId, extension);
-		fMultiSvc.removeObjectFromFolder(null, repositoryId, objectId, folderId, extension, null);
+		fMultiSvc.removeObjectFromFolder(getCallContext(), repositoryId, objectId, folderId, extension, null);
 	}
 
 	// --- relationship service ---
@@ -522,7 +498,7 @@ public class InMemoryService  extends Ab
 		// Simulate a runtime context with configuration parameters
 		// Attach the CallContext to a thread local context that can be accessed
 		// from everywhere
-		RuntimeContext.attachCfg(new DummyCallContext());
+//		RuntimeContext.attachCfg(new DummyCallContext());
 
 		// Build the tree
 		RepositoryInfo rep = repSvc.getRepositoryInfo(repositoryId, null);

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java Wed Apr 21 10:13:00 2010
@@ -39,7 +39,8 @@ public class InMemoryServiceFactoryImpl 
 	private static CallContext OVERRIDE_CTX;
 
 	private InMemoryService inMemoryService;
-	private CmisService wrapperService;
+//	private CmisServiceWrapper<InMemoryService> wrapperService;
+	private ThreadLocal<CmisServiceWrapper<InMemoryService>> threadLocalService = new ThreadLocal<CmisServiceWrapper<InMemoryService>>();
 	private boolean fUseOverrideCtx = false;
 	
 	@Override
@@ -48,8 +49,8 @@ public class InMemoryServiceFactoryImpl 
 
 
 		inMemoryService = new InMemoryService(parameters);
-		wrapperService = new CmisServiceWrapper(inMemoryService, DEFAULT_MAX_ITEMS_TYPES, DEFAULT_DEPTH_TYPES,
-				DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_DEPTH_OBJECTS);
+//		wrapperService = new CmisServiceWrapper<InMemoryService>(inMemoryService, DEFAULT_MAX_ITEMS_TYPES, DEFAULT_DEPTH_TYPES,
+//				DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_DEPTH_OBJECTS);
 		String overrideCtx = parameters.get(ConfigConstants.OVERRIDE_CALL_CONTEXT);
 		if (null != overrideCtx)
 			fUseOverrideCtx = true;
@@ -63,23 +64,34 @@ public class InMemoryServiceFactoryImpl 
 	
 	@Override
 	public CmisService getService(CallContext context) {
-		try {
-			LOG.debug("start getService()");
+		LOG.debug("start getService()");
 
-			// Attach the CallContext to a thread local context that can be
-			// accessed from everywhere
-			// Some unit tests set their own context. So if we find one then we use
-			// this one and ignore the provided one. Otherwise we set a new context.
-			if (fUseOverrideCtx && null != OVERRIDE_CTX) {
-				RuntimeContext.attachCfg(OVERRIDE_CTX);
-			} else {
-				RuntimeContext.attachCfg(context);				
-			}
-			LOG.debug("stop getService()");
-			return inMemoryService; //wrapperService;
-			
-		} finally {
-//			RuntimeContext.remove();
+		// Attach the CallContext to a thread local context that can be
+		// accessed from everywhere
+		// Some unit tests set their own context. So if we find one then we use
+		// this one and ignore the provided one. Otherwise we set a new context.
+		if (fUseOverrideCtx && null != OVERRIDE_CTX) {
+			context = OVERRIDE_CTX;
+		}
+		
+		CmisServiceWrapper<InMemoryService> wrapperService = threadLocalService.get();
+		if (wrapperService == null) {
+			wrapperService = new CmisServiceWrapper<InMemoryService>(inMemoryService, DEFAULT_MAX_ITEMS_TYPES, DEFAULT_DEPTH_TYPES,
+					DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_DEPTH_OBJECTS);
+			threadLocalService.set(wrapperService);
 		}
+
+		wrapperService.getWrappedService().setCallContext(context);
+
+		LOG.debug("stop getService()");
+		return inMemoryService; //wrapperService;
+			
 	}
+	
+	@Override
+	public void destroy() {
+		threadLocalService = null;
+//		RuntimeContext.remove();
+	}
+	
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java Wed Apr 21 10:13:00 2010
@@ -63,7 +63,7 @@ public class InMemoryVersioningServiceIm
 	public void cancelCheckOut(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {
 
 		StoredObject so = checkStandardParameters(repositoryId, objectId);
-		String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+		String user = context.getUsername();
 		VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
 
 		verDoc.cancelCheckOut(user);
@@ -74,7 +74,7 @@ public class InMemoryVersioningServiceIm
 			Acl addAces, Acl removeAces, ExtensionsData extension, ObjectInfoHolder objectInfos) {
 
 		StoredObject so = checkStandardParameters(repositoryId, objectId.getValue());
-		String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+		String user = context.getUsername();
 		VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
 
 		DocumentVersion pwc = verDoc.getPwc();
@@ -91,8 +91,8 @@ public class InMemoryVersioningServiceIm
 		// additional information:
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
 
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false, IncludeRelationships.NONE,
-				null, false, false, extension);
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, user, false,
+				IncludeRelationships.NONE, null, false, false, extension);
 
 		return od;
 	}
@@ -123,7 +123,7 @@ public class InMemoryVersioningServiceIm
 		if (verDoc.isCheckedOut())
 			throw new CmisUpdateConflictException("Document " + objectId.getValue() + " is already checked out.");
 
-		String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+		String user = context.getUsername();
 		checkHasUser(user);
 
 		DocumentVersion pwc = verDoc.checkOut(content, user);
@@ -133,8 +133,8 @@ public class InMemoryVersioningServiceIm
 		// additional information:
 		fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
 
-		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false, IncludeRelationships.NONE,
-				null, false, false, extension);
+		ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, user, false,
+				IncludeRelationships.NONE, null, false, false, extension);
 
 		return od;
 	}

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/ServiceFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/ServiceFactory.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/ServiceFactory.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/ServiceFactory.java Wed Apr 21 10:13:00 2010
@@ -261,7 +261,7 @@ public class ServiceFactory extends Abst
 		// Simulate a runtime context with configuration parameters
 		// Attach the CallContext to a thread local context that can be accessed
 		// from everywhere
-		RuntimeContext.attachCfg(new DummyCallContext());
+//		RuntimeContext.attachCfg(new DummyCallContext());
 
 		// Build the tree
 		RepositoryInfo rep = repSvc.getRepositoryInfo(repositoryId, null);

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java Wed Apr 21 10:13:00 2010
@@ -231,7 +231,7 @@ public class PropertyCreationHelper {
 		return props;
 	}
 
-	public static ObjectData getObjectData(StoreManager sm, StoredObject so, String filter,
+	public static ObjectData getObjectData(StoreManager sm, StoredObject so, String filter, String user,
 			Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
 			Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
 
@@ -247,7 +247,7 @@ public class PropertyCreationHelper {
 		// fill output object
 		if (null != includeAllowableActions && includeAllowableActions) {
 			ObjectStore objectStore = sm.getObjectStore(so.getRepositoryId());
-			AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(objectStore, so);
+			AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(objectStore, so, user);
 			od.setAllowableActions(allowableActions);
 		}
 		if (null != includeACL && includeACL)

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java Wed Apr 21 10:13:00 2010
@@ -96,7 +96,7 @@ public class AbstractServiceTst /* exten
 		fTestCallContext = new DummyCallContext();
 		// Attach a standatrd CallContext to a thread before the services are
 		// initialized.
-		RuntimeContext.attachCfg(fTestCallContext);
+//		RuntimeContext.attachCfg(fTestCallContext);
 
 		if (fUseClientProviderInterface)
 			initializeUsingLocalBinding(parameters);

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/ReadOnlyObjectIT.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/ReadOnlyObjectIT.java?rev=936243&r1=936242&r2=936243&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/ReadOnlyObjectIT.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/ReadOnlyObjectIT.java Wed Apr 21 10:13:00 2010
@@ -67,9 +67,9 @@ public class ReadOnlyObjectIT extends Ab
 		Assert.assertEquals(ObjectType.FOLDER_BASETYPE_ID, folder.getBaseType().getId());
 
 		Assert.assertNotNull(folder.getCreatedBy());
-//		Assert.assertEquals(Fixture.getParamter().get(SessionParameter.USER), folder.getCreatedBy());
+		Assert.assertEquals(Fixture.getParamter().get(SessionParameter.USER), folder.getCreatedBy());
 		Assert.assertNotNull(folder.getLastModifiedBy());
-//		Assert.assertEquals(Fixture.getParamter().get(SessionParameter.USER), folder.getLastModifiedBy());
+		Assert.assertEquals(Fixture.getParamter().get(SessionParameter.USER), folder.getLastModifiedBy());
 		Assert.assertNotNull(folder.getLastModificationDate());
 		Assert.assertNotNull(folder.getCreationDate());