From 26f647d5fd1735bda73986d450e458d1c5ab6280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BC?= Date: Mon, 8 Aug 2011 13:14:42 +0000 Subject: [PATCH] OpenCMIS server: significant query performance improvements git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29606 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/opencmis/CMISChangeLogDataExtractor.java | 4 +++- .../org/alfresco/opencmis/mapping/AbstractProperty.java | 4 ++-- .../java/org/alfresco/opencmis/search/CMISResultSet.java | 6 +++++- .../org/alfresco/opencmis/search/CMISResultSetRow.java | 8 +++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/source/java/org/alfresco/opencmis/CMISChangeLogDataExtractor.java b/source/java/org/alfresco/opencmis/CMISChangeLogDataExtractor.java index cd00c19a79..5579c56277 100644 --- a/source/java/org/alfresco/opencmis/CMISChangeLogDataExtractor.java +++ b/source/java/org/alfresco/opencmis/CMISChangeLogDataExtractor.java @@ -22,6 +22,7 @@ import java.io.Serializable; import java.util.HashMap; import org.alfresco.opencmis.dictionary.CMISDictionaryService; +import org.alfresco.opencmis.dictionary.CMISPropertyAccessor; import org.alfresco.opencmis.dictionary.TypeDefinitionWrapper; import org.alfresco.repo.audit.extractor.AbstractDataExtractor; import org.alfresco.service.cmr.model.FileInfo; @@ -61,7 +62,8 @@ public class CMISChangeLogDataExtractor extends AbstractDataExtractor HashMap result = new HashMap(5); result.put(KEY_NODE_REF, nodeRef); // Support version nodes by recording the object ID - result.put(KEY_OBJECT_ID, type.getPropertyById(PropertyIds.OBJECT_ID).getPropertyAccessor().getValue(nodeRef)); + CMISPropertyAccessor accessor = type.getPropertyById(PropertyIds.OBJECT_ID).getPropertyAccessor(); + result.put(KEY_OBJECT_ID, accessor.getValue(accessor.createNodeInfo(nodeRef))); return result; } diff --git a/source/java/org/alfresco/opencmis/mapping/AbstractProperty.java b/source/java/org/alfresco/opencmis/mapping/AbstractProperty.java index 3d57ffdc05..abef20edee 100644 --- a/source/java/org/alfresco/opencmis/mapping/AbstractProperty.java +++ b/source/java/org/alfresco/opencmis/mapping/AbstractProperty.java @@ -107,12 +107,12 @@ public abstract class AbstractProperty implements CMISPropertyAccessor protected abstract Serializable getValueInternal(CMISNodeInfo nodeInfo); - protected CMISNodeInfo createNodeInfo(NodeRef nodeRef) + public CMISNodeInfo createNodeInfo(NodeRef nodeRef) { return connector.createNodeInfo(nodeRef); } - protected CMISNodeInfo createNodeInfo(AssociationRef assocRef) + public CMISNodeInfo createNodeInfo(AssociationRef assocRef) { return connector.createNodeInfo(assocRef); } diff --git a/source/java/org/alfresco/opencmis/search/CMISResultSet.java b/source/java/org/alfresco/opencmis/search/CMISResultSet.java index 2e26a8c60a..fcc633d009 100644 --- a/source/java/org/alfresco/opencmis/search/CMISResultSet.java +++ b/source/java/org/alfresco/opencmis/search/CMISResultSet.java @@ -29,6 +29,7 @@ import java.util.Map; import java.util.Set; import org.alfresco.opencmis.dictionary.CMISDictionaryService; +import org.alfresco.opencmis.dictionary.CMISNodeInfo; import org.alfresco.repo.search.impl.querymodel.Query; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ChildAssociationRef; @@ -48,6 +49,8 @@ public class CMISResultSet implements ResultSetSPI wrapped; + + private Map nodeInfos; private LimitBy limitBy; @@ -72,6 +75,7 @@ public class CMISResultSet implements ResultSetSPI(); } /* @@ -111,7 +115,7 @@ public class CMISResultSet implements ResultSetSPI nodeRefs; + + private Map nodeInfos; private Query query; private CMISDictionaryService cmisDictionaryService; public CMISResultSetRow(CMISResultSet resultSet, int index, Map scores, NodeService nodeService, - Map nodeRefs, Query query, CMISDictionaryService cmisDictionaryService) + Map nodeRefs, Map nodeInfos, Query query, + CMISDictionaryService cmisDictionaryService) { this.resultSet = resultSet; this.index = index; @@ -70,6 +74,7 @@ public class CMISResultSetRow implements ResultSetRow this.nodeRefs = nodeRefs; this.query = query; this.cmisDictionaryService = cmisDictionaryService; + this.nodeInfos = nodeInfos; } /* @@ -158,6 +163,7 @@ public class CMISResultSetRow implements ResultSetRow CmisFunctionEvaluationContext context = new CmisFunctionEvaluationContext(); context.setCmisDictionaryService(cmisDictionaryService); context.setNodeRefs(nodeRefs); + context.setNodeInfos(nodeInfos); context.setNodeService(nodeService); context.setScores(scores); context.setScore(getScore());