From b5d4daa46a53a9a6cdc3708e23946793cf30bb6e Mon Sep 17 00:00:00 2001 From: David Caruana Date: Mon, 29 Jun 2009 15:47:06 +0000 Subject: [PATCH] Allow 'cmis-sql-strict' query language in Node Browser. - fix up Search Service to CMIS query engine wrappers git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@15015 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../search/CMISResultSetMetaDataImpl.java | 4 ++- .../cmis/search/CMISResultSetRowImpl.java | 9 +++---- .../ACLEntryAfterInvocationProvider.java | 15 ++++++++--- .../service/cmr/search/SearchParameters.java | 25 +++++++++++++++++++ 4 files changed, 43 insertions(+), 10 deletions(-) diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetMetaDataImpl.java b/source/java/org/alfresco/cmis/search/CMISResultSetMetaDataImpl.java index f71b7aa2b1..e8cce8a4a7 100644 --- a/source/java/org/alfresco/cmis/search/CMISResultSetMetaDataImpl.java +++ b/source/java/org/alfresco/cmis/search/CMISResultSetMetaDataImpl.java @@ -54,6 +54,7 @@ import org.alfresco.service.namespace.QName; public class CMISResultSetMetaDataImpl implements CMISResultSetMetaData { private CMISQueryOptions options; + private SearchParameters searchParams; private Map columnMetaData; @@ -62,6 +63,7 @@ public class CMISResultSetMetaDataImpl implements CMISResultSetMetaData public CMISResultSetMetaDataImpl(CMISQueryOptions options, Query query, CMISDictionaryService cmisDictionaryService, DictionaryService alfrescoDictionaryService) { this.options = options; + this.searchParams = new SearchParameters(options); Map selectors = query.getSource().getSelectors(); selectorMetaData = new LinkedHashMap(); @@ -196,7 +198,7 @@ public class CMISResultSetMetaDataImpl implements CMISResultSetMetaData public SearchParameters getSearchParameters() { - throw new UnsupportedOperationException(); + return searchParams; } } diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java b/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java index 347a79f228..517781728d 100644 --- a/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java +++ b/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java @@ -204,14 +204,11 @@ public class CMISResultSetRowImpl implements CMISResultSetRow public NodeRef getNodeRef() { - if(getCMISResultSet().getMetaData().getColumns().length == 1) + if (nodeRefs.size() == 1) { - return getNodeRef(getCMISResultSet().getMetaData().getColumns()[0].getName()); - } - else - { - throw new UnsupportedOperationException("Ambiguous selector"); + return nodeRefs.values().iterator().next(); } + throw new UnsupportedOperationException("Ambiguous selector"); } public QName getQName() diff --git a/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationProvider.java b/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationProvider.java index 2df588cc55..34e1dabc4b 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationProvider.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationProvider.java @@ -41,6 +41,7 @@ import net.sf.acegisecurity.ConfigAttribute; import net.sf.acegisecurity.ConfigAttributeDefinition; import net.sf.acegisecurity.afterinvocation.AfterInvocationProvider; +import org.alfresco.cmis.CMISResultSet; import org.alfresco.repo.search.SimpleResultSetMetaData; import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet; import org.alfresco.repo.search.impl.querymodel.QueryEngineResults; @@ -256,13 +257,13 @@ public class ACLEntryAfterInvocationProvider implements AfterInvocationProvider, } return decide(authentication, object, config, (ChildAssociationRef) returnedObject); } - else if (ResultSet.class.isAssignableFrom(returnedObject.getClass())) + else if (CMISResultSet.class.isAssignableFrom(returnedObject.getClass())) { if (log.isDebugEnabled()) { - log.debug("Result Set access"); + log.debug("CMIS Result Set - already checked permissions for " + object.getClass().getName()); } - return decide(authentication, object, config, (ResultSet) returnedObject); + return returnedObject; } else if (PagingLuceneResultSet.class.isAssignableFrom(returnedObject.getClass())) { @@ -272,6 +273,14 @@ public class ACLEntryAfterInvocationProvider implements AfterInvocationProvider, } return decide(authentication, object, config, (PagingLuceneResultSet) returnedObject); } + else if (ResultSet.class.isAssignableFrom(returnedObject.getClass())) + { + if (log.isDebugEnabled()) + { + log.debug("Result Set access"); + } + return decide(authentication, object, config, (ResultSet) returnedObject); + } else if (QueryEngineResults.class.isAssignableFrom(returnedObject.getClass())) { if (log.isDebugEnabled()) diff --git a/source/java/org/alfresco/service/cmr/search/SearchParameters.java b/source/java/org/alfresco/service/cmr/search/SearchParameters.java index d12f70c5b2..1ee29d90e6 100644 --- a/source/java/org/alfresco/service/cmr/search/SearchParameters.java +++ b/source/java/org/alfresco/service/cmr/search/SearchParameters.java @@ -34,6 +34,7 @@ import java.util.Map; import java.util.Set; import org.alfresco.repo.search.MLAnalysisMode; +import org.alfresco.repo.search.impl.querymodel.QueryOptions; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.namespace.NamespaceService; @@ -164,6 +165,30 @@ public class SearchParameters super(); } + /** + * Construct from Query Options + * + * @param options + */ + public SearchParameters(QueryOptions options) + { + setBulkFetch(options.getFetchSize() > 0); + setBulkFetchSize(options.getFetchSize()); + setSkipCount(options.getSkipCount()); + setMaxPermissionChecks(options.getMaxPermissionChecks()); + setMaxPermissionCheckTimeMillis(options.getMaxPermissionCheckTimeMillis()); + if (options.getMaxItems() >= 0) + { + setLimitBy(LimitBy.FINAL_SIZE); + setLimit(options.getMaxItems()); + setMaxItems(options.getMaxItems()); + } + else + { + setLimitBy(LimitBy.UNLIMITED); + } + } + /** * Get the search language *