From: Patrick Schmitz Date: Mon, 14 Jan 2013 19:57:41 +0000 (-0800) Subject: CSPACE-5740 Added support to turn off starting Wildcard behavior for partial Tern... X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=fd0004047d7cf415e7b256d9fd908075f3cbce46;p=tmp%2Fjakarta-migration.git CSPACE-5740 Added support to turn off starting Wildcard behavior for partial Tern matching (authority auto-complete). Added a section to lifesci tenant delta (commented out) that shows how to enable this new behavior. Note that current default behavior is unchanged. --- diff --git a/services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java b/services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java index ccc53d2e4..61b4feedb 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java +++ b/services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java @@ -91,6 +91,8 @@ public interface IQueryManager { final static String CMIS_TARGET_TITLE = CMIS_TARGET_PREFIX + "." + CMIS_NUXEO_TITLE; final static String CMIS_TARGET_NAME = CMIS_TARGET_PREFIX + "." + CMIS_NUXEO_NAME; final static String CMIS_TARGET_UPDATED_AT = CMIS_TARGET_PREFIX + "." + CMIS_CS_UPDATED_AT; + + final static String TENANT_USES_STARTING_WILDCARD_FOR_PARTIAL_TERM = "ptStartingWildcard"; public void execQuery(String queryString); @@ -131,6 +133,7 @@ public interface IQueryManager { public String createWhereClauseForPartialMatch(String dataSourceName, String repositoryName, String field, + boolean startingWildcard, String partialTerm); /** diff --git a/services/common/src/main/cspace/config/services/tenants/lifesci/tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/lifesci/tenant-bindings.delta.xml index 1beb3f4b0..d02817f3f 100644 --- a/services/common/src/main/cspace/config/services/tenants/lifesci/tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/lifesci/tenant-bindings.delta.xml @@ -6,6 +6,22 @@ + diff --git a/services/common/src/main/java/org/collectionspace/services/common/query/QueryManager.java b/services/common/src/main/java/org/collectionspace/services/common/query/QueryManager.java index d4b703de7..8863aaeb7 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/query/QueryManager.java +++ b/services/common/src/main/java/org/collectionspace/services/common/query/QueryManager.java @@ -27,8 +27,13 @@ package org.collectionspace.services.common.query; import org.collectionspace.services.client.IQueryManager; +import org.collectionspace.services.common.ServiceMain; +import org.collectionspace.services.common.api.Tools; +import org.collectionspace.services.common.config.TenantBindingConfigReaderImpl; +import org.collectionspace.services.common.config.TenantBindingUtils; import org.collectionspace.services.common.context.ServiceContext; import org.collectionspace.services.common.query.nuxeo.QueryManagerNuxeoImpl; +import org.collectionspace.services.config.tenant.TenantBindingType; public class QueryManager { static private final IQueryManager queryManager = new QueryManagerNuxeoImpl(); @@ -64,8 +69,17 @@ public class QueryManager { String field, String partialTerm) throws Exception { String repositoryName = ctx.getRepositoryName(); + // Otherwise, generate that list and cache it for re-use. + TenantBindingConfigReaderImpl tReader = + ServiceMain.getInstance().getTenantBindingConfigReader(); + TenantBindingType tenantBinding = tReader.getTenantBinding(ctx.getTenantId()); + String ptStartingWildcardValue = TenantBindingUtils.getPropertyValue(tenantBinding, + IQueryManager.TENANT_USES_STARTING_WILDCARD_FOR_PARTIAL_TERM); + boolean ptStartingWildcard = (ptStartingWildcardValue==null) + || Boolean.parseBoolean(ptStartingWildcardValue); + return queryManager.createWhereClauseForPartialMatch(queryManager.getDatasourceName(), - repositoryName, field, partialTerm); + repositoryName, field, ptStartingWildcard, partialTerm); } /** diff --git a/services/common/src/main/java/org/collectionspace/services/common/query/nuxeo/QueryManagerNuxeoImpl.java b/services/common/src/main/java/org/collectionspace/services/common/query/nuxeo/QueryManagerNuxeoImpl.java index ba2b52362..20baf0c63 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/query/nuxeo/QueryManagerNuxeoImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/query/nuxeo/QueryManagerNuxeoImpl.java @@ -263,18 +263,30 @@ public class QueryManagerNuxeoImpl implements IQueryManager { public String createWhereClauseForPartialMatch(String dataSourceName, String repositoryName, String field, + boolean startingWildcard, String partialTerm) { String trimmed = (partialTerm == null) ? "" : partialTerm.trim(); if (trimmed.isEmpty()) { throw new RuntimeException("No partialTerm specified."); } + if(trimmed.charAt(0) == '*') { + if(trimmed.length() == 1) { // only a star is not enough + throw new RuntimeException("No partialTerm specified."); + } + trimmed = trimmed.substring(1); + startingWildcard = true; // force a starting wildcard match + } if (field == null || field.isEmpty()) { throw new RuntimeException("No match field specified."); } - String ptClause = field + getLikeForm(dataSourceName, repositoryName) + "'%" - + unescapedSingleQuote.matcher(trimmed).replaceAll("\\\\'") - + "%'"; - return ptClause; + + StringBuilder ptClause = new StringBuilder(trimmed.length()+field.length()+20); + ptClause.append(field); + ptClause.append(getLikeForm(dataSourceName, repositoryName)); + ptClause.append(startingWildcard?"'%":"'"); + ptClause.append(unescapedSingleQuote.matcher(trimmed).replaceAll("\\\\'")); + ptClause.append("%'"); + return ptClause.toString(); } /**