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
This commit is contained in:
Florian Mü
2011-07-14 12:32:45 +00:00
parent b3d8251bfb
commit 1ac2c21ca6

View File

@@ -32,10 +32,10 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.TreeSet; import java.util.TreeSet;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import javax.xml.datatype.DatatypeConfigurationException; 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.dictionary.TypeDefinitionWrapper;
import org.alfresco.opencmis.mapping.DirectProperty; import org.alfresco.opencmis.mapping.DirectProperty;
import org.alfresco.opencmis.search.CMISQueryOptions; import org.alfresco.opencmis.search.CMISQueryOptions;
import org.alfresco.opencmis.search.CMISQueryOptions.CMISQueryMode;
import org.alfresco.opencmis.search.CMISQueryService; import org.alfresco.opencmis.search.CMISQueryService;
import org.alfresco.opencmis.search.CMISResultSet; import org.alfresco.opencmis.search.CMISResultSet;
import org.alfresco.opencmis.search.CMISResultSetColumn; import org.alfresco.opencmis.search.CMISResultSetColumn;
import org.alfresco.opencmis.search.CMISResultSetRow; 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;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.security.permissions.AccessDeniedException; 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.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.Path; 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.Path.ChildAssocElement;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.AccessPermission; import org.alfresco.service.cmr.security.AccessPermission;
@@ -751,6 +751,12 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen
try try
{ {
versionHistory.getVersion(versionString); versionHistory.getVersion(versionString);
if (versionString.equals(versionHistory.getHeadVersion().getVersionLabel()))
{
return ObjectVariantEnum.NODE;
}
return ObjectVariantEnum.VERSION; return ObjectVariantEnum.VERSION;
} catch (VersionDoesNotExistException e) } catch (VersionDoesNotExistException e)
{ {
@@ -1163,8 +1169,8 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen
Properties nodeProps = getNodeProperties(node, filter, type); Properties nodeProps = getNodeProperties(node, filter, type);
return createCMISObjectImpl(nodeRef, type, nodeProps, filter, includeAllowableActions, return createCMISObjectImpl(nodeRef, type, nodeProps, filter, includeAllowableActions, includeRelationships,
includeRelationships, renditionFilter, includePolicyIds, includeAcl); renditionFilter, includePolicyIds, includeAcl);
} }
public ObjectData createCMISObject(NodeRef nodeRef, String filter, boolean includeAllowableActions, public ObjectData createCMISObject(NodeRef nodeRef, String filter, boolean includeAllowableActions,
@@ -1179,13 +1185,13 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen
Properties nodeProps = getNodeProperties(nodeRef, filter, type); Properties nodeProps = getNodeProperties(nodeRef, filter, type);
return createCMISObjectImpl(nodeRef, type, nodeProps, filter, includeAllowableActions, return createCMISObjectImpl(nodeRef, type, nodeProps, filter, includeAllowableActions, includeRelationships,
includeRelationships, renditionFilter, includePolicyIds, includeAcl); renditionFilter, includePolicyIds, includeAcl);
} }
private ObjectData createCMISObjectImpl(NodeRef nodeRef, TypeDefinitionWrapper type, Properties nodeProps, String filter, boolean includeAllowableActions, private ObjectData createCMISObjectImpl(NodeRef nodeRef, TypeDefinitionWrapper type, Properties nodeProps,
IncludeRelationships includeRelationships, String renditionFilter, boolean includePolicyIds, String filter, boolean includeAllowableActions, IncludeRelationships includeRelationships,
boolean includeAcl) String renditionFilter, boolean includePolicyIds, boolean includeAcl)
{ {
// get the current version // get the current version
NodeRef currentVersionNodeRef = nodeRef; NodeRef currentVersionNodeRef = nodeRef;
@@ -1489,8 +1495,7 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen
if (accessor instanceof DirectProperty) if (accessor instanceof DirectProperty)
{ {
value = nodeProps.get(accessor.getMappedProperty()); value = nodeProps.get(accessor.getMappedProperty());
} } else
else
{ {
value = propDef.getPropertyAccessor().getValue(node.getNodeRef()); value = propDef.getPropertyAccessor().getValue(node.getNodeRef());
} }