From 1ac2c21ca625aa6376ebd6483ad7ed7c0360d5ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BC?= Date: Thu, 14 Jul 2011 12:32:45 +0000 Subject: [PATCH] OpenCMIS server bug fix: current version should be treated as a node, not as a version. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29028 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/opencmis/CMISConnector.java | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/source/java/org/alfresco/opencmis/CMISConnector.java b/source/java/org/alfresco/opencmis/CMISConnector.java index 5e753fa279..f7bd0d605a 100644 --- a/source/java/org/alfresco/opencmis/CMISConnector.java +++ b/source/java/org/alfresco/opencmis/CMISConnector.java @@ -32,10 +32,10 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.TimeZone; import java.util.TreeSet; -import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import javax.xml.datatype.DatatypeConfigurationException; @@ -52,11 +52,11 @@ import org.alfresco.opencmis.dictionary.PropertyDefintionWrapper; import org.alfresco.opencmis.dictionary.TypeDefinitionWrapper; import org.alfresco.opencmis.mapping.DirectProperty; import org.alfresco.opencmis.search.CMISQueryOptions; +import org.alfresco.opencmis.search.CMISQueryOptions.CMISQueryMode; import org.alfresco.opencmis.search.CMISQueryService; import org.alfresco.opencmis.search.CMISResultSet; import org.alfresco.opencmis.search.CMISResultSetColumn; import org.alfresco.opencmis.search.CMISResultSetRow; -import org.alfresco.opencmis.search.CMISQueryOptions.CMISQueryMode; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.permissions.AccessDeniedException; @@ -90,8 +90,8 @@ import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.Path; -import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.Path.ChildAssocElement; +import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.AccessPermission; @@ -751,6 +751,12 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen try { versionHistory.getVersion(versionString); + + if (versionString.equals(versionHistory.getHeadVersion().getVersionLabel())) + { + return ObjectVariantEnum.NODE; + } + return ObjectVariantEnum.VERSION; } catch (VersionDoesNotExistException e) { @@ -1020,7 +1026,7 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen QName typeQName = nodeService.getType(nodeRef); return getType(typeQName); } - + private TypeDefinitionWrapper getType(QName typeQName) { return cmisDictionaryService.findNodeType(typeQName); @@ -1160,13 +1166,13 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen { throw new CmisObjectNotFoundException("No corresponding type found! Not a CMIS object?"); } - + Properties nodeProps = getNodeProperties(node, filter, type); - - return createCMISObjectImpl(nodeRef, type, nodeProps, filter, includeAllowableActions, - includeRelationships, renditionFilter, includePolicyIds, includeAcl); + + return createCMISObjectImpl(nodeRef, type, nodeProps, filter, includeAllowableActions, includeRelationships, + renditionFilter, includePolicyIds, includeAcl); } - + public ObjectData createCMISObject(NodeRef nodeRef, String filter, boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter, boolean includePolicyIds, boolean includeAcl) @@ -1176,16 +1182,16 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen { throw new CmisObjectNotFoundException("No corresponding type found! Not a CMIS object?"); } - + Properties nodeProps = getNodeProperties(nodeRef, filter, type); - - return createCMISObjectImpl(nodeRef, type, nodeProps, filter, includeAllowableActions, - includeRelationships, renditionFilter, includePolicyIds, includeAcl); + + return createCMISObjectImpl(nodeRef, type, nodeProps, filter, includeAllowableActions, includeRelationships, + renditionFilter, includePolicyIds, includeAcl); } - - private ObjectData createCMISObjectImpl(NodeRef nodeRef, TypeDefinitionWrapper type, Properties nodeProps, String filter, boolean includeAllowableActions, - IncludeRelationships includeRelationships, String renditionFilter, boolean includePolicyIds, - boolean includeAcl) + + private ObjectData createCMISObjectImpl(NodeRef nodeRef, TypeDefinitionWrapper type, Properties nodeProps, + String filter, boolean includeAllowableActions, IncludeRelationships includeRelationships, + String renditionFilter, boolean includePolicyIds, boolean includeAcl) { // get the current version NodeRef currentVersionNodeRef = nodeRef; @@ -1462,13 +1468,13 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen return result; } - + public Properties getNodeProperties(FileInfo node, String filter, TypeDefinitionWrapper type) { PropertiesImpl result = new PropertiesImpl(); Set filterSet = splitFilter(filter); - + Map nodeProps = node.getProperties(); for (PropertyDefintionWrapper propDef : type.getProperties()) @@ -1482,19 +1488,18 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen continue; } } - + Serializable value = null; - + CMISPropertyAccessor accessor = propDef.getPropertyAccessor(); if (accessor instanceof DirectProperty) { value = nodeProps.get(accessor.getMappedProperty()); - } - else + } else { value = propDef.getPropertyAccessor().getValue(node.getNodeRef()); } - + result.addProperty(getProperty(propDef.getPropertyDefinition().getPropertyType(), propDef, value)); }