From 2fca7b09ce72c38bb8d70da8ee3d2dc31bce57ca Mon Sep 17 00:00:00 2001 From: ahind Date: Thu, 20 Apr 2017 14:30:31 +0100 Subject: [PATCH] Datamodel fix for SEARCH-312 Support query templates in the CONTAINS() clause of CMIS QL MNT-14506 Templates ignored for CMIS queries --- .../opencmis/search/CMISQueryOptions.java | 10 +++++ .../opencmis/search/CMISQueryParser.java | 2 +- .../search/impl/querymodel/QueryOptions.java | 44 ++++++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/alfresco/opencmis/search/CMISQueryOptions.java b/src/main/java/org/alfresco/opencmis/search/CMISQueryOptions.java index 9556647ee0..df639f9fff 100644 --- a/src/main/java/org/alfresco/opencmis/search/CMISQueryOptions.java +++ b/src/main/java/org/alfresco/opencmis/search/CMISQueryOptions.java @@ -82,6 +82,11 @@ public class CMISQueryOptions extends QueryOptions options.setBulkFetchEnabled(searchParameters.isBulkFetchEnabled()); options.setExcludeTenantFilter(searchParameters.getExcludeTenantFilter()); options.setSinceTxId(searchParameters.getSinceTxId()); + for(String name : searchParameters.getQueryTemplates().keySet()) + { + String template = searchParameters.getQueryTemplates().get(name); + options.addQueryTemplate(name, template); + } return options; } @@ -188,6 +193,11 @@ public class CMISQueryOptions extends QueryOptions searchParameters.setBulkFetchEnabled(isBulkFetchEnabled()); searchParameters.setQueryConsistency(this.getQueryConsistency()); searchParameters.setSinceTxId(getSinceTxId()); + for(String name : getQueryTemplates().keySet()) + { + String template = getQueryTemplates().get(name); + searchParameters.addQueryTemplate(name, template); + } return searchParameters; } } diff --git a/src/main/java/org/alfresco/opencmis/search/CMISQueryParser.java b/src/main/java/org/alfresco/opencmis/search/CMISQueryParser.java index 1b219c8c4d..6e2d45b4b9 100644 --- a/src/main/java/org/alfresco/opencmis/search/CMISQueryParser.java +++ b/src/main/java/org/alfresco/opencmis/search/CMISQueryParser.java @@ -477,7 +477,7 @@ public class CMISQueryParser } else { ftsConstraint = FTSQueryParser.buildFTS(ftsExpression, factory, functionEvaluationContext, selector, - columnMap, mode, defaultFieldConnective, null, options.getDefaultFieldName(), FTSQueryParser.RerankPhase.SINGLE_PASS); + columnMap, mode, defaultFieldConnective, options.getQueryTemplates(), options.getDefaultFieldName(), FTSQueryParser.RerankPhase.SINGLE_PASS); } ftsConstraint.setBoost(1000.0f); hasContains = true; diff --git a/src/main/java/org/alfresco/repo/search/impl/querymodel/QueryOptions.java b/src/main/java/org/alfresco/repo/search/impl/querymodel/QueryOptions.java index bbbb8f4dc5..35af1048ba 100644 --- a/src/main/java/org/alfresco/repo/search/impl/querymodel/QueryOptions.java +++ b/src/main/java/org/alfresco/repo/search/impl/querymodel/QueryOptions.java @@ -26,8 +26,10 @@ package org.alfresco.repo.search.impl.querymodel; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import org.alfresco.repo.search.MLAnalysisMode; import org.alfresco.service.cmr.repository.StoreRef; @@ -90,6 +92,8 @@ public class QueryOptions private Long sinceTxId; + private Map queryTemplates = new HashMap(); + public static QueryOptions create(SearchParameters searchParameters) { QueryOptions options = new QueryOptions(searchParameters.getQuery(), null); @@ -119,9 +123,17 @@ public class QueryOptions options.setExcludeTenantFilter(searchParameters.getExcludeTenantFilter()); options.setQueryConsistency(searchParameters.getQueryConsistency()); options.setSinceTxId(searchParameters.getSinceTxId()); + for(String name : searchParameters.getQueryTemplates().keySet()) + { + String template = searchParameters.getQueryTemplates().get(name); + options.addQueryTemplate(name, template); + } return options; } - /** + + + + /** * Create a CMISQueryOptions instance with the default options other than the query and store ref. The query will be * run using the locale returned by I18NUtil.getLocale() * @@ -505,6 +517,30 @@ public class QueryOptions { this.sinceTxId = sinceTxId; } + + /** + * Get the query templates + * + * @return - the query templates + */ + public Map getQueryTemplates() + { + return queryTemplates; + } + + /** + * Add/replace a query template Not all languages support query templates + * + * @param name String + * @param template String + * @return any removed template or null + */ + public String addQueryTemplate(String name, String template) + { + return queryTemplates.put(name, template); + } + + /** * @return SearchParameters @@ -548,6 +584,12 @@ public class QueryOptions //searchParameters.addTextAttribute() searchParameters.setQueryConsistency(this.getQueryConsistency()); searchParameters.setSinceTxId(getSinceTxId()); + for(String name : getQueryTemplates().keySet()) + { + String template = getQueryTemplates().get(name); + searchParameters.addQueryTemplate(name, template); + } + return searchParameters; }