You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/09/10 12:19:36 UTC
svn commit: r995734 -
/incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java
Author: fguillaume
Date: Fri Sep 10 10:19:36 2010
New Revision: 995734
URL: http://svn.apache.org/viewvc?rev=995734&view=rev
Log:
Extract a getObjectInfoIntern that takes an ObjectData for implementors convenience
Modified:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java?rev=995734&r1=995733&r2=995734&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/server/AbstractCmisService.java Fri Sep 10 10:19:36 2010
@@ -888,167 +888,56 @@ public abstract class AbstractCmisServic
*/
public ObjectInfo getObjectInfo(String repositoryId, String objectId) {
Map<String, ObjectInfo> oim = getObjectInfoMap();
-
ObjectInfo info = oim.get(objectId);
if (info == null) {
// object info has not been found -> create one
- ObjectInfoImpl infoImpl = new ObjectInfoImpl();
-
try {
// switch off object info collection to avoid side effects
addObjectInfos = false;
- // get the object
+ // get the object and its info
ObjectData object = getObject(repositoryId, objectId, null, Boolean.TRUE, IncludeRelationships.BOTH,
"*", Boolean.TRUE, Boolean.FALSE, null);
+ info = getObjectInfoIntern(repositoryId, object);
- // if the object has no properties, stop here
- if (object.getProperties() == null || object.getProperties().getProperties() == null) {
- throw new Exception("No properties!");
- }
-
- // get the repository info
- RepositoryInfo repositoryInfo = getRepositoryInfo(repositoryId, null);
-
- // general properties
- infoImpl.setObject(object);
- infoImpl.setId(object.getId());
- infoImpl.setName(getStringProperty(object, PropertyIds.NAME));
- infoImpl.setCreatedBy(getStringProperty(object, PropertyIds.CREATED_BY));
- infoImpl.setCreationDate(getDateTimeProperty(object, PropertyIds.CREATED_BY));
- infoImpl.setLastModificationDate(getDateTimeProperty(object, PropertyIds.LAST_MODIFICATION_DATE));
- infoImpl.setTypeId(getIdProperty(object, PropertyIds.OBJECT_TYPE_ID));
- infoImpl.setBaseType(object.getBaseTypeId());
-
- // versioning
- infoImpl.setIsCurrentVersion(object.getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT);
- infoImpl.setWorkingCopyId(null);
- infoImpl.setWorkingCopyOriginalId(null);
-
- infoImpl.setVersionSeriesId(getIdProperty(object, PropertyIds.VERSION_SERIES_ID));
- if (infoImpl.getVersionSeriesId() != null) {
- Boolean isLatest = getBooleanProperty(object, PropertyIds.IS_LATEST_VERSION);
- infoImpl.setIsCurrentVersion(isLatest == null ? true : isLatest.booleanValue());
-
- Boolean isCheckedOut = getBooleanProperty(object, PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
- if (isCheckedOut != null && isCheckedOut.booleanValue()) {
- infoImpl.setWorkingCopyId(getIdProperty(object, PropertyIds.VERSION_SERIES_CHECKED_OUT_ID));
-
- // get latest version
- List<ObjectData> versions = getAllVersions(repositoryId, objectId, infoImpl
- .getVersionSeriesId(), null, Boolean.FALSE, null);
- if (versions != null && versions.size() > 0) {
- infoImpl.setWorkingCopyOriginalId(versions.get(0).getId());
- }
- }
- }
-
- // content
- String fileName = getStringProperty(object, PropertyIds.CONTENT_STREAM_FILE_NAME);
- String mimeType = getStringProperty(object, PropertyIds.CONTENT_STREAM_MIME_TYPE);
- String streamId = getIdProperty(object, PropertyIds.CONTENT_STREAM_ID);
- BigInteger length = getIntegerProperty(object, PropertyIds.CONTENT_STREAM_LENGTH);
- boolean hasContent = fileName != null || mimeType != null || streamId != null || length != null;
- if (hasContent) {
- infoImpl.setHasContent(hasContent);
- infoImpl.setContentType(mimeType);
- infoImpl.setFileName(fileName);
- } else {
- infoImpl.setHasContent(false);
- infoImpl.setContentType(null);
- infoImpl.setFileName(null);
- }
-
- // parent
- List<ObjectParentData> parents = getObjectParents(repositoryId, objectId, null, Boolean.FALSE,
- IncludeRelationships.NONE, "cmis:none", Boolean.FALSE, null);
- infoImpl.setHasParent(parents.size() > 0);
-
- // policies and relationships
- infoImpl.setSupportsRelationships(false);
- infoImpl.setSupportsPolicies(false);
-
- TypeDefinitionList baseTypesList = getTypeChildren(repositoryId, null, Boolean.FALSE, BigInteger
- .valueOf(4), BigInteger.ZERO, null);
- for (TypeDefinition type : baseTypesList.getList()) {
- if (BaseTypeId.CMIS_RELATIONSHIP.value().equals(type.getId())) {
- infoImpl.setSupportsRelationships(true);
- } else if (BaseTypeId.CMIS_POLICY.value().equals(type.getId())) {
- infoImpl.setSupportsPolicies(true);
- }
- }
-
- // renditions
- infoImpl.setRenditionInfos(null);
-
- List<RenditionData> renditions = object.getRenditions();
- if (renditions != null && renditions.size() > 0) {
- List<RenditionInfo> renditionInfos = new ArrayList<RenditionInfo>();
-
- for (RenditionData rendition : renditions) {
- RenditionInfoImpl renditionInfo = new RenditionInfoImpl();
- renditionInfo.setId(rendition.getStreamId());
- renditionInfo.setKind(rendition.getKind());
- renditionInfo.setContentType(rendition.getMimeType());
- renditionInfo.setTitle(rendition.getTitle());
- renditionInfo.setLength(rendition.getBigLength());
-
- renditionInfos.add(renditionInfo);
- }
+ // switch on object info collection
+ addObjectInfos = true;
- infoImpl.setRenditionInfos(renditionInfos);
- }
+ // add object info
+ addObjectInfo(info);
+ } catch (Exception e) {
+ e.printStackTrace();
+ info = null;
+ } finally {
+ addObjectInfos = true;
+ }
+ }
+ return info;
+ }
- // relationships
- infoImpl.setRelationshipSourceIds(null);
- infoImpl.setRelationshipTargetIds(null);
-
- List<ObjectData> relationships = object.getRelationships();
- if (relationships != null && relationships.size() > 0) {
- List<String> sourceIds = new ArrayList<String>();
- List<String> targetIds = new ArrayList<String>();
-
- for (ObjectData relationship : relationships) {
- String sourceId = getIdProperty(relationship, PropertyIds.SOURCE_ID);
- String targetId = getIdProperty(relationship, PropertyIds.TARGET_ID);
-
- if (object.getId().equals(sourceId)) {
- sourceIds.add(relationship.getId());
- }
- if (object.getId().equals(targetId)) {
- targetIds.add(relationship.getId());
- }
- }
-
- if (sourceIds.size() > 0) {
- infoImpl.setRelationshipSourceIds(sourceIds);
- }
- if (targetIds.size() > 0) {
- infoImpl.setRelationshipTargetIds(targetIds);
- }
- }
+ /**
+ * Gets the {@link ObjectInfo} about an object, checking the cache first.
+ *
+ * @param repositoryId the repository id
+ * @param object the object
+ * @return the object info
+ */
+ protected ObjectInfo getObjectInfo(String repositoryId, ObjectData object) {
+ Map<String, ObjectInfo> oim = getObjectInfoMap();
+ ObjectInfo info = oim.get(object.getId());
+ if (info == null) {
+ try {
+ // switch off object info collection to avoid side effects
+ addObjectInfos = false;
- // global settings
- infoImpl.setHasAcl(false);
- infoImpl.setSupportsDescendants(false);
- infoImpl.setSupportsFolderTree(false);
-
- RepositoryCapabilities capabilities = repositoryInfo.getCapabilities();
- if (capabilities != null) {
- infoImpl.setHasAcl(capabilities.getAclCapability() == CapabilityAcl.DISCOVER
- || capabilities.getAclCapability() == CapabilityAcl.MANAGE);
- if (object.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {
- infoImpl.setSupportsDescendants(Boolean.TRUE.equals(capabilities.isGetDescendantsSupported()));
- infoImpl.setSupportsFolderTree(Boolean.TRUE.equals(capabilities.isGetFolderTreeSupported()));
- }
- }
+ // get the object info
+ info = getObjectInfoIntern(repositoryId, object);
// switch on object info collection
addObjectInfos = true;
// add object info
- addObjectInfo(infoImpl);
- info = infoImpl;
+ addObjectInfo(info);
} catch (Exception e) {
e.printStackTrace();
info = null;
@@ -1056,6 +945,151 @@ public abstract class AbstractCmisServic
addObjectInfos = true;
}
}
+ return info;
+ }
+
+ /**
+ * Collects the {@link ObjectInfo} about an object.
+ *
+ * @param repositoryId the repository id
+ * @param object the object
+ * @return the collected object info
+ */
+ protected ObjectInfo getObjectInfoIntern(String repositoryId, ObjectData object) {
+ // if the object has no properties, stop here
+ if (object.getProperties() == null || object.getProperties().getProperties() == null) {
+ throw new CmisRuntimeException("No properties!");
+ }
+
+ ObjectInfoImpl info = new ObjectInfoImpl();
+
+ // get the repository info
+ RepositoryInfo repositoryInfo = getRepositoryInfo(repositoryId, null);
+
+ // general properties
+ info.setObject(object);
+ info.setId(object.getId());
+ info.setName(getStringProperty(object, PropertyIds.NAME));
+ info.setCreatedBy(getStringProperty(object, PropertyIds.CREATED_BY));
+ info.setCreationDate(getDateTimeProperty(object, PropertyIds.CREATED_BY));
+ info.setLastModificationDate(getDateTimeProperty(object, PropertyIds.LAST_MODIFICATION_DATE));
+ info.setTypeId(getIdProperty(object, PropertyIds.OBJECT_TYPE_ID));
+ info.setBaseType(object.getBaseTypeId());
+
+ // versioning
+ info.setIsCurrentVersion(object.getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT);
+ info.setWorkingCopyId(null);
+ info.setWorkingCopyOriginalId(null);
+
+ info.setVersionSeriesId(getIdProperty(object, PropertyIds.VERSION_SERIES_ID));
+ if (info.getVersionSeriesId() != null) {
+ Boolean isLatest = getBooleanProperty(object, PropertyIds.IS_LATEST_VERSION);
+ info.setIsCurrentVersion(isLatest == null ? true : isLatest.booleanValue());
+
+ Boolean isCheckedOut = getBooleanProperty(object, PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
+ if (isCheckedOut != null && isCheckedOut.booleanValue()) {
+ info.setWorkingCopyId(getIdProperty(object, PropertyIds.VERSION_SERIES_CHECKED_OUT_ID));
+
+ // get latest version
+ List<ObjectData> versions = getAllVersions(repositoryId, object.getId(), info.getVersionSeriesId(),
+ null, Boolean.FALSE, null);
+ if (versions != null && versions.size() > 0) {
+ info.setWorkingCopyOriginalId(versions.get(0).getId());
+ }
+ }
+ }
+
+ // content
+ String fileName = getStringProperty(object, PropertyIds.CONTENT_STREAM_FILE_NAME);
+ String mimeType = getStringProperty(object, PropertyIds.CONTENT_STREAM_MIME_TYPE);
+ String streamId = getIdProperty(object, PropertyIds.CONTENT_STREAM_ID);
+ BigInteger length = getIntegerProperty(object, PropertyIds.CONTENT_STREAM_LENGTH);
+ boolean hasContent = fileName != null || mimeType != null || streamId != null || length != null;
+ if (hasContent) {
+ info.setHasContent(hasContent);
+ info.setContentType(mimeType);
+ info.setFileName(fileName);
+ } else {
+ info.setHasContent(false);
+ info.setContentType(null);
+ info.setFileName(null);
+ }
+
+ // parent
+ List<ObjectParentData> parents = getObjectParents(repositoryId, object.getId(), null, Boolean.FALSE,
+ IncludeRelationships.NONE, "cmis:none", Boolean.FALSE, null);
+ info.setHasParent(parents.size() > 0);
+
+ // policies and relationships
+ info.setSupportsRelationships(false);
+ info.setSupportsPolicies(false);
+
+ TypeDefinitionList baseTypesList = getTypeChildren(repositoryId, null, Boolean.FALSE, BigInteger.valueOf(4),
+ BigInteger.ZERO, null);
+ for (TypeDefinition type : baseTypesList.getList()) {
+ if (BaseTypeId.CMIS_RELATIONSHIP.value().equals(type.getId())) {
+ info.setSupportsRelationships(true);
+ } else if (BaseTypeId.CMIS_POLICY.value().equals(type.getId())) {
+ info.setSupportsPolicies(true);
+ }
+ }
+
+ // renditions
+ info.setRenditionInfos(null);
+ List<RenditionData> renditions = object.getRenditions();
+ if (renditions != null && renditions.size() > 0) {
+ List<RenditionInfo> renditionInfos = new ArrayList<RenditionInfo>();
+ for (RenditionData rendition : renditions) {
+ RenditionInfoImpl renditionInfo = new RenditionInfoImpl();
+ renditionInfo.setId(rendition.getStreamId());
+ renditionInfo.setKind(rendition.getKind());
+ renditionInfo.setContentType(rendition.getMimeType());
+ renditionInfo.setTitle(rendition.getTitle());
+ renditionInfo.setLength(rendition.getBigLength());
+ renditionInfos.add(renditionInfo);
+ }
+ info.setRenditionInfos(renditionInfos);
+ }
+
+ // relationships
+ info.setRelationshipSourceIds(null);
+ info.setRelationshipTargetIds(null);
+ List<ObjectData> relationships = object.getRelationships();
+ if (relationships != null && relationships.size() > 0) {
+ List<String> sourceIds = new ArrayList<String>();
+ List<String> targetIds = new ArrayList<String>();
+ for (ObjectData relationship : relationships) {
+ String sourceId = getIdProperty(relationship, PropertyIds.SOURCE_ID);
+ String targetId = getIdProperty(relationship, PropertyIds.TARGET_ID);
+ if (object.getId().equals(sourceId)) {
+ sourceIds.add(relationship.getId());
+ }
+ if (object.getId().equals(targetId)) {
+ targetIds.add(relationship.getId());
+ }
+ }
+ if (sourceIds.size() > 0) {
+ info.setRelationshipSourceIds(sourceIds);
+ }
+ if (targetIds.size() > 0) {
+ info.setRelationshipTargetIds(targetIds);
+ }
+ }
+
+ // global settings
+ info.setHasAcl(false);
+ info.setSupportsDescendants(false);
+ info.setSupportsFolderTree(false);
+
+ RepositoryCapabilities capabilities = repositoryInfo.getCapabilities();
+ if (capabilities != null) {
+ info.setHasAcl(capabilities.getAclCapability() == CapabilityAcl.DISCOVER
+ || capabilities.getAclCapability() == CapabilityAcl.MANAGE);
+ if (object.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) {
+ info.setSupportsDescendants(Boolean.TRUE.equals(capabilities.isGetDescendantsSupported()));
+ info.setSupportsFolderTree(Boolean.TRUE.equals(capabilities.isGetFolderTreeSupported()));
+ }
+ }
return info;
}