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/03/23 13:23:29 UTC
svn commit: r926534 [2/2] - in
/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src:
main/java/org/apache/opencmis/inmemory/clientprovider/
main/java/org/apache/opencmis/inmemory/server/
test/java/org/apache/opencmis/inmemory/
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java?rev=926534&r1=926533&r2=926534&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java Tue Mar 23 12:23:29 2010
@@ -38,160 +38,186 @@ import org.apache.opencmis.inmemory.stor
import org.apache.opencmis.server.spi.CallContext;
import org.apache.opencmis.server.spi.CmisRepositoryService;
-public class InMemoryRepositoryServiceImpl extends AbstractServiceImpl implements CmisRepositoryService {
-
+public class InMemoryRepositoryServiceImpl extends AbstractServiceImpl implements
+ CmisRepositoryService {
+
public InMemoryRepositoryServiceImpl(StoreManager storeManager) {
super(storeManager);
}
public RepositoryInfoData getRepositoryInfo(CallContext context, String repositoryId,
ExtensionsData extension) {
-
+
// Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
-
+ RuntimeContext.attachCfg(context);
+
RepositoryInfoData repoInfo = getRepositoryInfoFromStoreManager(repositoryId);
return repoInfo;
- }
+ }
public List<RepositoryInfoData> getRepositoryInfos(CallContext context, ExtensionsData extension) {
-
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
- List<RepositoryInfoData> res = new ArrayList<RepositoryInfoData>();
- List<String> repIds = fStoreManager.getAllRepositoryIds();
- for (String repId : repIds) {
- res.add(fStoreManager.getRepositoryInfo(repId));
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
+
+ List<RepositoryInfoData> res = new ArrayList<RepositoryInfoData>();
+ List<String> repIds = fStoreManager.getAllRepositoryIds();
+ for (String repId : repIds) {
+ res.add(fStoreManager.getRepositoryInfo(repId));
+ }
+ return res;
+ }
+ finally {
+ RuntimeContext.remove();
}
- return res;
}
public TypeDefinitionList getTypeChildren(CallContext context, String repositoryId,
String typeId, Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount,
ExtensionsData extension) {
-
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
- getRepositoryInfoFromStoreManager(repositoryId); // just to check if repository exists
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
+
+ getRepositoryInfoFromStoreManager(repositoryId); // just to check if repository exists
+
+ int skip = skipCount == null ? 0 : skipCount.intValue();
+ int max = maxItems == null ? -1 : maxItems.intValue();
+
+ TypeDefinitionListImpl result = new TypeDefinitionListImpl();
+ List<TypeDefinitionContainer> children;
+ if (typeId == null) {
+ // spec says that base types must be returned in this case
+ children = fStoreManager.getRootTypes(repositoryId);
+ }
+ else {
+ children = getTypeDescendants(context, repositoryId, typeId, BigInteger.valueOf(1),
+ includePropertyDefinitions, null);
+ }
+ result.setNumItems(BigInteger.valueOf(children.size()));
+ result.setHasMoreItems(children.size() > max - skip);
+ List<TypeDefinition> childrenTypes = new ArrayList<TypeDefinition>();
+ ListIterator<TypeDefinitionContainer> it = children.listIterator(skip);
+ if (max < 0)
+ max = children.size();
+ for (int i = skip; i < max + skip && it.hasNext(); i++)
+ childrenTypes.add(it.next().getTypeDefinition());
- int skip = skipCount == null ? 0 : skipCount.intValue();
- int max = maxItems == null ? -1 : maxItems.intValue();
-
- TypeDefinitionListImpl result = new TypeDefinitionListImpl();
- List<TypeDefinitionContainer> children;
- if (typeId == null) {
- // spec says that base types must be returned in this case
- children = fStoreManager.getRootTypes(repositoryId);
- } else {
- children = getTypeDescendants(context, repositoryId, typeId,
- BigInteger.valueOf(1), includePropertyDefinitions, null);
- }
- result.setNumItems(BigInteger.valueOf(children.size()));
- result.setHasMoreItems(children.size() > max - skip);
- List<TypeDefinition> childrenTypes = new ArrayList<TypeDefinition>();
- ListIterator<TypeDefinitionContainer> it = children.listIterator(skip);
- if (max<0)
- max = children.size();
- for (int i=skip; i<max+skip && it.hasNext(); i++)
- childrenTypes.add(it.next().getTypeDefinition());
-
- result.setList(childrenTypes);
- return result;
- }
-
- public TypeDefinition getTypeDefinition(CallContext context, String repositoryId,
- String typeId, ExtensionsData extension) {
-
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
+ result.setList(childrenTypes);
+ return result;
+ }
+ finally {
+ RuntimeContext.remove();
+ }
+ }
+
+ public TypeDefinition getTypeDefinition(CallContext context, String repositoryId, String typeId,
+ ExtensionsData extension) {
+
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
- getRepositoryInfoFromStoreManager(repositoryId); // just to check if repository exists
+ getRepositoryInfoFromStoreManager(repositoryId); // just to check if repository exists
- TypeDefinitionContainer tc = fStoreManager.getTypeById(repositoryId, typeId);
- if (tc != null) {
- return tc.getTypeDefinition();
+ TypeDefinitionContainer tc = fStoreManager.getTypeById(repositoryId, typeId);
+ if (tc != null) {
+ return tc.getTypeDefinition();
+ }
+ else
+ throw new CmisObjectNotFoundException("unknown type id: " + typeId);
+ }
+ finally {
+ RuntimeContext.remove();
}
- else
- throw new CmisObjectNotFoundException("unknown type id: " + typeId);
}
public List<TypeDefinitionContainer> getTypeDescendants(CallContext context, String repositoryId,
String typeId, BigInteger depth, Boolean includePropertyDefinitions, ExtensionsData extension) {
-
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
-
- getRepositoryInfoFromStoreManager(repositoryId); // just to check if repository exists
- if (depth != null && depth.intValue() == 0)
- throw new CmisInvalidArgumentException("depth == 0 is illegal in getTypeDescendants");
-
- List<TypeDefinitionContainer> result = null;
- if (typeId == null) {
- // spec says that depth must be ignored in this case
- Collection<TypeDefinitionContainer> typeColl = fStoreManager.getTypeDefinitionList(repositoryId);
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
+
+ getRepositoryInfoFromStoreManager(repositoryId); // just to check if repository exists
+
+ if (depth != null && depth.intValue() == 0)
+ throw new CmisInvalidArgumentException("depth == 0 is illegal in getTypeDescendants");
+
+ List<TypeDefinitionContainer> result = null;
+ if (typeId == null) {
+ // spec says that depth must be ignored in this case
+ Collection<TypeDefinitionContainer> typeColl = fStoreManager
+ .getTypeDefinitionList(repositoryId);
result = new ArrayList<TypeDefinitionContainer>(typeColl);
if (!includePropertyDefinitions) {
// copy list and omit properties
for (TypeDefinitionContainer c : result) {
- AbstractTypeDefinition td = ((AbstractTypeDefinition)c.getTypeDefinition()).clone();
+ AbstractTypeDefinition td = ((AbstractTypeDefinition) c.getTypeDefinition()).clone();
TypeDefinitionContainerImpl tdc = new TypeDefinitionContainerImpl(td);
tdc.setChildren(c.getChildren());
td.setPropertyDefinitions(null);
}
}
- }
- else {
- TypeDefinitionContainer tc = fStoreManager.getTypeById(repositoryId, typeId);
- if (tc != null) {
- if (null==depth || depth.intValue() == -1) {
- result = tc.getChildren();
- if (!includePropertyDefinitions)
- cloneTypeList(depth.intValue()-1, false, result);
- } else if (depth.intValue() == 0 || depth.intValue() < -1)
- throw new CmisInvalidArgumentException("illegal depth value: " + depth.intValue());
- else {
- result = tc.getChildren();
- cloneTypeList(depth.intValue()-1, includePropertyDefinitions, result);
+ }
+ else {
+ TypeDefinitionContainer tc = fStoreManager.getTypeById(repositoryId, typeId);
+ if (tc != null) {
+ if (null == depth || depth.intValue() == -1) {
+ result = tc.getChildren();
+ if (!includePropertyDefinitions)
+ cloneTypeList(depth.intValue() - 1, false, result);
+ }
+ else if (depth.intValue() == 0 || depth.intValue() < -1)
+ throw new CmisInvalidArgumentException("illegal depth value: " + depth.intValue());
+ else {
+ result = tc.getChildren();
+ cloneTypeList(depth.intValue() - 1, includePropertyDefinitions, result);
+ }
}
+ else
+ throw new CmisInvalidArgumentException("unknown type id: " + typeId);
}
- else
- throw new CmisInvalidArgumentException("unknown type id: " + typeId);
+
+ return result;
+ }
+ finally {
+ RuntimeContext.remove();
}
-
- return result;
}
/**
- * traverse tree and replace each need node with a clone. remove properties on
- * clone if requested, cut children of clone if depth is exceeded.
+ * traverse tree and replace each need node with a clone. remove properties on clone if requested,
+ * cut children of clone if depth is exceeded.
+ *
* @param depth
* @param types
*/
private void cloneTypeList(int depth, boolean includePropertyDefinitions,
List<TypeDefinitionContainer> types) {
-
+
ListIterator<TypeDefinitionContainer> it = types.listIterator();
while (it.hasNext()) {
TypeDefinitionContainer tdc = it.next();
- AbstractTypeDefinition td = ((AbstractTypeDefinition)tdc.getTypeDefinition()).clone();
+ AbstractTypeDefinition td = ((AbstractTypeDefinition) tdc.getTypeDefinition()).clone();
if (!includePropertyDefinitions)
td.setPropertyDefinitions(null);
TypeDefinitionContainerImpl tdcClone = new TypeDefinitionContainerImpl(td);
if (depth > 0) {
- ArrayList<TypeDefinitionContainer> children = new ArrayList<TypeDefinitionContainer>(tdc.getChildren().size());
+ ArrayList<TypeDefinitionContainer> children = new ArrayList<TypeDefinitionContainer>(tdc
+ .getChildren().size());
children.addAll(tdc.getChildren());
tdcClone.setChildren(children);
- cloneTypeList(depth-1, includePropertyDefinitions, children);
+ cloneTypeList(depth - 1, includePropertyDefinitions, children);
}
- it.set(tdcClone);
+ it.set(tdcClone);
}
}
- private RepositoryInfoData getRepositoryInfoFromStoreManager(String repositoryId ) {
+ private RepositoryInfoData getRepositoryInfoFromStoreManager(String repositoryId) {
RepositoryInfoData repoInfo = fStoreManager.getRepositoryInfo(repositoryId);
if (null == repoInfo || !repoInfo.getRepositoryId().equals(repositoryId)) {
throw new CmisInvalidArgumentException("Unknown repository: " + repositoryId);
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java?rev=926534&r1=926533&r2=926534&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java Tue Mar 23 12:23:29 2010
@@ -64,116 +64,138 @@ public class InMemoryVersioningServiceIm
public void cancelCheckOut(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
+
+ StoredObject so = checkStandardParameters(repositoryId, objectId);
+ String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+ VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
- StoredObject so = checkStandardParameters(repositoryId, objectId);
- String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
- VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
-
- verDoc.cancelCheckOut(user);
+ verDoc.cancelCheckOut(user);
+ }
+ finally {
+ RuntimeContext.remove();
+ }
}
public ObjectData checkIn(CallContext context, String repositoryId, Holder<String> objectId,
Boolean major, PropertiesData properties, ContentStreamData contentStream,
String checkinComment, List<String> policies, AccessControlList addAces,
AccessControlList removeAces, ExtensionsData extension, ObjectInfoHolder objectInfos) {
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
- StoredObject so = checkStandardParameters(repositoryId, objectId.getValue());
- String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
- VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
- DocumentVersion pwc = verDoc.getPwc();
+ StoredObject so = checkStandardParameters(repositoryId, objectId.getValue());
+ String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+ VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
- if (null != contentStream)
- pwc.setContent(contentStream, false);
+ DocumentVersion pwc = verDoc.getPwc();
- if (null != properties && null != properties.getProperties())
- pwc.setCustomProperties(properties.getProperties());
+ if (null != contentStream)
+ pwc.setContent(contentStream, false);
- verDoc.checkIn(major, checkinComment, user);
+ if (null != properties && null != properties.getProperties())
+ pwc.setCustomProperties(properties.getProperties());
- // To be able to provide all Atom links in the response we need additional information:
- fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
+ verDoc.checkIn(major, checkinComment, user);
- ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false,
- IncludeRelationships.NONE, null, false, false, extension);
+ // To be able to provide all Atom links in the response we need additional information:
+ fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
- return od;
+ ObjectData od = PropertyCreationHelper.getObjectData(fStoreManager, so, null, false,
+ IncludeRelationships.NONE, null, false, false, extension);
+
+ return od;
+ }
+ finally {
+ RuntimeContext.remove();
+ }
}
public ObjectData checkOut(CallContext context, String repositoryId, Holder<String> objectId,
ExtensionsData extension, Holder<Boolean> contentCopied, ObjectInfoHolder objectInfos) {
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
- StoredObject so = checkStandardParameters(repositoryId, objectId.getValue());
- TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
- if (!typeDef.getBaseId().equals(BaseObjectTypeIds.CMIS_DOCUMENT))
- throw new CmisNotSupportedException("Only documents can be checked-out.");
- else if (!((DocumentTypeDefinition) typeDef).isVersionable())
- throw new CmisNotSupportedException("Object can't be checked-out, type is not versionable.");
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
- checkIsVersionableObject(so);
+ StoredObject so = checkStandardParameters(repositoryId, objectId.getValue());
+ TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
+ if (!typeDef.getBaseId().equals(BaseObjectTypeIds.CMIS_DOCUMENT))
+ throw new CmisNotSupportedException("Only documents can be checked-out.");
+ else if (!((DocumentTypeDefinition) typeDef).isVersionable())
+ throw new CmisNotSupportedException("Object can't be checked-out, type is not versionable.");
- VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
+ checkIsVersionableObject(so);
- ContentStreamData content = null;
+ VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
- if (so instanceof DocumentVersion) {
- // get document the version is contained in to c
- content = ((DocumentVersion) so).getContent(0, -1);
- }
- else {
- content = ((VersionedDocument) so).getLatestVersion(false).getContent(0, -1);
- }
+ ContentStreamData content = null;
+
+ if (so instanceof DocumentVersion) {
+ // get document the version is contained in to c
+ content = ((DocumentVersion) so).getContent(0, -1);
+ }
+ else {
+ content = ((VersionedDocument) so).getLatestVersion(false).getContent(0, -1);
+ }
- if (verDoc.isCheckedOut())
- throw new CmisUpdateConflictException("Document " + objectId.getValue()
- + " is already checked out.");
+ if (verDoc.isCheckedOut())
+ throw new CmisUpdateConflictException("Document " + objectId.getValue()
+ + " is already checked out.");
- String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
- checkHasUser(user);
+ String user = RuntimeContext.getRuntimeConfigValue(CallContext.USERNAME);
+ checkHasUser(user);
- DocumentVersion pwc = verDoc.checkOut(content, user);
- objectId.setValue(pwc.getId()); // return the id of the created pwc
+ DocumentVersion pwc = verDoc.checkOut(content, user);
+ objectId.setValue(pwc.getId()); // return the id of the created pwc
- // To be able to provide all Atom links in the response we need additional information:
- fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
+ // To be able to provide all Atom links in the response we need 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, false,
+ IncludeRelationships.NONE, null, false, false, extension);
- return od;
+ return od;
+ }
+ finally {
+ RuntimeContext.remove();
+ }
}
public List<ObjectData> getAllVersions(CallContext context, String repositoryId,
String versionSeriesId, String filter, Boolean includeAllowableActions,
ExtensionsData extension, ObjectInfoHolder objectInfos) {
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
- StoredObject so = checkStandardParameters(repositoryId, versionSeriesId);
+ StoredObject so = checkStandardParameters(repositoryId, versionSeriesId);
- if (!(so instanceof VersionedDocument))
- throw new RuntimeException("Object is not instance of a VersionedDocument (version series)");
+ if (!(so instanceof VersionedDocument))
+ throw new RuntimeException("Object is not instance of a VersionedDocument (version series)");
- VersionedDocument verDoc = (VersionedDocument) so;
- List<ObjectData> res = new ArrayList<ObjectData>();
- List<DocumentVersion> versions = verDoc.getAllVersions();
- for (DocumentVersion version : versions) {
- ObjectData objData = getObject(context, repositoryId, version.getId(), filter,
- includeAllowableActions, extension, objectInfos);
- res.add(objData);
- }
+ VersionedDocument verDoc = (VersionedDocument) so;
+ List<ObjectData> res = new ArrayList<ObjectData>();
+ List<DocumentVersion> versions = verDoc.getAllVersions();
+ for (DocumentVersion version : versions) {
+ ObjectData objData = getObject(context, repositoryId, version.getId(), filter,
+ includeAllowableActions, extension, objectInfos);
+ res.add(objData);
+ }
- // provide information for Atom links for version series:
- fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
+ // provide information for Atom links for version series:
+ fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
- return res;
+ return res;
+ }
+ finally {
+ RuntimeContext.remove();
+ }
}
public ObjectData getObjectOfLatestVersion(CallContext context, String repositoryId,
@@ -181,54 +203,65 @@ public class InMemoryVersioningServiceIm
IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
Boolean includeAcl, ExtensionsData extension, ObjectInfoHolder objectInfos) {
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
+
+ StoredObject so = checkStandardParameters(repositoryId, versionSeriesId);
+ ObjectData objData = null;
+
+ if (so instanceof VersionedDocument) {
+ VersionedDocument verDoc = (VersionedDocument) so;
+ DocumentVersion latestVersion = verDoc.getLatestVersion(major);
+ objData = getObject(context, repositoryId, latestVersion.getId(), filter,
+ includeAllowableActions, extension, objectInfos);
+ }
+ else if (so instanceof Document) {
+ objData = getObject(context, repositoryId, so.getId(), filter, includeAllowableActions,
+ extension, objectInfos);
+ }
+ else
+ throw new RuntimeException("Object is not instance of a document (version series)");
- StoredObject so = checkStandardParameters(repositoryId, versionSeriesId);
- ObjectData objData = null;
+ // provide information for Atom links for version series:
+ fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
- if (so instanceof VersionedDocument) {
- VersionedDocument verDoc = (VersionedDocument) so;
- DocumentVersion latestVersion = verDoc.getLatestVersion(major);
- objData = getObject(context, repositoryId, latestVersion.getId(), filter,
- includeAllowableActions, extension, objectInfos);
+ return objData;
}
- else if (so instanceof Document) {
- objData = getObject(context, repositoryId, so.getId(), filter, includeAllowableActions,
- extension, objectInfos);
+ finally {
+ RuntimeContext.remove();
}
- else
- throw new RuntimeException("Object is not instance of a document (version series)");
-
- // provide information for Atom links for version series:
- fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfos);
-
- return objData;
}
public PropertiesData getPropertiesOfLatestVersion(CallContext context, String repositoryId,
String versionSeriesId, Boolean major, String filter, ExtensionsData extension) {
- // Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(context);
- StoredObject so = checkStandardParameters(repositoryId, versionSeriesId);
- StoredObject latestVersionObject = null;
+ try {
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ RuntimeContext.attachCfg(context);
+
+ StoredObject so = checkStandardParameters(repositoryId, versionSeriesId);
+ StoredObject latestVersionObject = null;
+
+ if (so instanceof VersionedDocument) {
+ VersionedDocument verDoc = (VersionedDocument) so;
+ latestVersionObject = verDoc.getLatestVersion(major);
+ }
+ else if (so instanceof Document) {
+ latestVersionObject = so;
+ }
+ else
+ throw new RuntimeException("Object is not instance of a document (version series)");
+
+ List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
+ PropertiesData props = PropertyCreationHelper.getPropertiesFromObject(repositoryId,
+ latestVersionObject, fStoreManager, requestedIds);
- if (so instanceof VersionedDocument) {
- VersionedDocument verDoc = (VersionedDocument) so;
- latestVersionObject = verDoc.getLatestVersion(major);
+ return props;
}
- else if (so instanceof Document) {
- latestVersionObject = so;
+ finally {
+ RuntimeContext.remove();
}
- else
- throw new RuntimeException("Object is not instance of a document (version series)");
-
- List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
- PropertiesData props = PropertyCreationHelper.getPropertiesFromObject(repositoryId,
- latestVersionObject, fStoreManager, requestedIds);
-
- return props;
}
private ObjectData getObject(CallContext context, String repositoryId, String objectId,
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java?rev=926534&r1=926533&r2=926534&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/RuntimeContext.java Tue Mar 23 12:23:29 2010
@@ -28,6 +28,8 @@ import org.apache.opencmis.server.spi.Ca
* @author jens
*
*/
+
+/*
public class RuntimeContext {
public static class ThreadLocalRuntimeConfig extends ThreadLocal<CallContext> {
@@ -55,4 +57,34 @@ public class RuntimeContext {
return CONN.getConfigValue(key);
}
+ public static void remove() {
+ CONN.remove();
+ }
+}
+*/
+
+public class RuntimeContext {
+
+ private static ThreadLocal<CallContext> CTX_TLS = new ThreadLocal<CallContext>();
+
+ public static void attachCfg(CallContext ctx) {
+ CTX_TLS.set(ctx);
+ }
+
+ public static synchronized String getRuntimeConfigValue(String key) {
+ CallContext ctx = CTX_TLS.get();
+ if (null == ctx)
+ return null;
+ else
+ return CTX_TLS.get().get(key) ;
+ }
+
+ public static void remove() {
+ CTX_TLS.remove();
+ }
+
+ public static final CallContext getCurrentContext() {
+ return CTX_TLS.get();
+ }
+
}
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java?rev=926534&r1=926533&r2=926534&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/server/ServiceFactory.java Tue Mar 23 12:23:29 2010
@@ -254,7 +254,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.getRuntimeConfig().attachCfg(new DummyCallContext());
+ RuntimeContext.attachCfg(new DummyCallContext());
// Build the tree
RepositoryInfoData rep = repSvc.getRepositoryInfo(repositoryId, null);
Modified: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java?rev=926534&r1=926533&r2=926534&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/AbstractServiceTst.java Tue Mar 23 12:23:29 2010
@@ -54,7 +54,7 @@ public class AbstractServiceTst /* exten
protected RepositoryService fRepSvc;
protected VersioningService fVerSvc;
protected MultiFilingService fMultiSvc;
-
+ protected DummyCallContext fTestCallContext;
private String fTypeCreatorClassName;
private boolean fUseClientProviderInterface;
@@ -92,6 +92,10 @@ public class AbstractServiceTst /* exten
// give subclasses a chance to provide additional parameters for special tests
addParameters(parameters);
+ fTestCallContext = new DummyCallContext();
+ // Attach a standatrd CallContext to a thread before the services are initialized.
+ RuntimeContext.attachCfg(fTestCallContext);
+
if (fUseClientProviderInterface)
initializeUsingClientProvider(parameters);
else
@@ -106,10 +110,7 @@ public class AbstractServiceTst /* exten
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());
+ assertNotNull(fRootFolderId);
}
// Override this method in subclasses if you want to provide additional configuration
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=926534&r1=926533&r2=926534&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 Tue Mar 23 12:23:29 2010
@@ -55,11 +55,6 @@ import org.apache.opencmis.commons.provi
import org.apache.opencmis.commons.provider.PropertyIdData;
import org.apache.opencmis.commons.provider.PropertyStringData;
import org.apache.opencmis.inmemory.clientprovider.DummyCallContext;
-import org.apache.opencmis.inmemory.clientprovider.MultiFilingServiceImpl;
-import org.apache.opencmis.inmemory.clientprovider.NavigationServiceImpl;
-import org.apache.opencmis.inmemory.clientprovider.ObjectServiceImpl;
-import org.apache.opencmis.inmemory.clientprovider.RepositoryServiceImpl;
-import org.apache.opencmis.inmemory.clientprovider.VersioningServiceImpl;
import org.apache.opencmis.inmemory.server.RuntimeContext;
import org.apache.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
import org.apache.opencmis.inmemory.types.PropertyCreationHelper;
@@ -93,10 +88,13 @@ public class VersioningTest extends Abst
private void setRuntimeContext(String user) {
+ /*
DummyCallContext ctx = new DummyCallContext();
ctx.put(CallContext.USERNAME, user);
// Attach the CallContext to a thread local context that can be accessed from everywhere
- RuntimeContext.getRuntimeConfig().attachCfg(ctx);
+ RuntimeContext.attachCfg(ctx);
+ */
+ fTestCallContext.put(CallContext.USERNAME, user);
}
@Test