From 69d382274b16b0ee75b9ad6e43a565c52e705eba Mon Sep 17 00:00:00 2001 From: Will Abson Date: Wed, 3 Sep 2014 15:51:24 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud) 80509: Merged WAT1 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud) 74144: ACE-1582: added: - more facet props to the Model and the related JSON response - GET one facet API - Sorting by facet index git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@82806 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../solr-facet-config-admin.get.desc.xml | 7 ++- .../solr-facet-config-admin.get.json.ftl | 52 +++++++++++-------- .../solr-facet-config-admin.post.desc.xml | 5 +- .../solr-facet-config-admin.put.desc.xml | 5 +- ...AbstractSolrFacetConfigAdminWebScript.java | 24 ++++++++- .../solr/facet/SolrFacetConfigAdminGet.java | 24 +++++++-- 6 files changed, 86 insertions(+), 31 deletions(-) diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.get.desc.xml index 2e32f72993..a9b549900a 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.get.desc.xml @@ -5,6 +5,8 @@ Get faceted-search config, if configured http://:/alfresco/api/solr/facet-config + Or + http://:/alfresco/api/solr/facet-config/{filterId} Example response from this web script: @@ -14,6 +16,7 @@ "filterID" : "filter_content_size", "facetQName" : "{http://www.alfresco.org/model/content/1.0}content.size", "displayName" : "faceted-search.facet-menu.facet.size", + "displayControl" : "alfresco\/search\/FacetFilters", "maxFilters" : 5, "hitThreshold" : 1, "minFilterValueLength" : 5, @@ -25,7 +28,8 @@ "site1" ], "index" : 5, - "isEnabled" : true + "isEnabled" : true, + "isDefault" : true } ] } @@ -35,6 +39,7 @@ ]]> /api/solr/facet-config + /api/solr/facet-config/{filterID} argument user required diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.get.json.ftl index 9a2d021bd2..d7f848fbd7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.get.json.ftl @@ -1,28 +1,38 @@ +<#macro facetJSON facet> <#escape x as jsonUtils.encodeJSONString(x)> -{ - "facets": [ - <#list filters?keys as facet> - <#assign f=filters[facet]> - { - "filterID" : "${f.filterID}", - "facetQName" : "${f.facetQName}", - "displayName" : "${f.displayName}", - "maxFilters" : ${f.maxFilters?c}, - "hitThreshold" : ${f.hitThreshold?c}, - "minFilterValueLength" : ${f.minFilterValueLength?c}, - "sortBy" : "${f.sortBy}", - "scope" : "${f.scope}", + "filterID" : "${facet.filterID}", + "facetQName" : "${facet.facetQName}", + "displayName" : "${facet.displayName}", + "displayControl" : "${facet.displayControl}", + "maxFilters" : ${facet.maxFilters?c}, + "hitThreshold" : ${facet.hitThreshold?c}, + "minFilterValueLength" : ${facet.minFilterValueLength?c}, + "sortBy" : "${facet.sortBy}", + "scope" : "${facet.scope}", "scopedSites" : [ - <#if f.scopedSites??> - <#list f.scopedSites as site> + <#if facet.scopedSites??> + <#list facet.scopedSites as site> "${site}"<#if site_has_next>, ], - "index" : ${f.index?c}, - "isEnabled" : ${f.enabled?c} - }<#if facet_has_next>, - - ] -} + "index" : ${facet.index?c}, + "isEnabled" : ${facet.enabled?c}, + "isDefault" : ${facet.default?c} + + +{ + <#if filters??> + "facets" : [ + <#list filters as facet> + { + <@facetJSON facet=facet /> + }<#if facet_has_next>, + + ] + + <#else> + <@facetJSON facet=filter /> + +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.post.desc.xml index 931dda90bc..317b93120b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.post.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.post.desc.xml @@ -12,6 +12,7 @@ "filterID" : "filter_content_size", "facetQName" : "{http://www.alfresco.org/model/content/1.0}content.size", "displayName" : "faceted-search.facet-menu.facet.size", + "displayControl" : "alfresco/search/FacetFilters", "maxFilters" : 5, "hitThreshold" : 1, "minFilterValueLength" : 5, @@ -22,8 +23,8 @@ "site2", "site1" ], - "index" : 6, - "isEnabled" : true + "index" : 6, // optional + "isEnabled" : true // optional } Notes: diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.put.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.put.desc.xml index 3d721fa687..2de4bd15d7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.put.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/facet/solr-facet-config-admin.put.desc.xml @@ -12,6 +12,7 @@ "filterID" : "filter_content_size", "facetQName" : "{http://www.alfresco.org/model/content/1.0}content.size", "displayName" : "faceted-search.facet-menu.facet.size", + "displayControl" : "alfresco/search/FacetFilters", "maxFilters" : 5, "hitThreshold" : 1, "minFilterValueLength" : 5, @@ -22,8 +23,8 @@ "site2", "site1" ], - "index" : 6, - "isEnabled" : true + "index" : 6, // optional + "isEnabled" : true // optional } Notes: diff --git a/source/java/org/alfresco/repo/web/scripts/solr/facet/AbstractSolrFacetConfigAdminWebScript.java b/source/java/org/alfresco/repo/web/scripts/solr/facet/AbstractSolrFacetConfigAdminWebScript.java index cff4a588eb..a3a4a3854f 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/facet/AbstractSolrFacetConfigAdminWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/facet/AbstractSolrFacetConfigAdminWebScript.java @@ -51,6 +51,7 @@ public abstract class AbstractSolrFacetConfigAdminWebScript extends DeclarativeW protected static final String PARAM_FILTER_ID = "filterID"; protected static final String PARAM_FACET_QNAME = "facetQName"; protected static final String PARAM_DISPLAY_NAME = "displayName"; + protected static final String PARAM_DISPLAY_CONTROL = "displayControl"; protected static final String PARAM_MAX_FILTERS = "maxFilters"; protected static final String PARAM_HIT_THRESHOLD = "hitThreshold"; protected static final String PARAM_MIN_FILTER_VALUE_LENGTH = "minFilterValueLength"; @@ -105,13 +106,14 @@ public abstract class AbstractSolrFacetConfigAdminWebScript extends DeclarativeW final QName facetQName = QName.createQName(facetQNameStr); final String displayName = json.getString(PARAM_DISPLAY_NAME); + final String displayControl = json.getString(PARAM_DISPLAY_CONTROL); final int maxFilters = json.getInt(PARAM_MAX_FILTERS); final int hitThreshold = json.getInt(PARAM_HIT_THRESHOLD); final int minFilterValueLength = json.getInt(PARAM_MIN_FILTER_VALUE_LENGTH); final String sortBy = json.getString(PARAM_SORT_BY); final String scope = json.getString(PARAM_SCOPE); - final int index = json.getInt(PARAM_INDEX); - final boolean isEnabled = json.getBoolean(PARAM_IS_ENABLED); + final int index = getValue(Integer.class, json.opt(PARAM_INDEX), 0); //FIXME get the index from the service + final boolean isEnabled = getValue(Boolean.class, json.opt(PARAM_IS_ENABLED), true); JSONArray scopedSitesJsonArray = json.getJSONArray(PARAM_SCOPED_SITES); Set scopedSites = null; if (scopedSitesJsonArray != null) @@ -128,6 +130,7 @@ public abstract class AbstractSolrFacetConfigAdminWebScript extends DeclarativeW .filterID(filterID) .facetQName(facetQName) .displayName(displayName) + .displayControl(displayControl) .maxFilters(maxFilters) .hitThreshold(hitThreshold) .minFilterValueLength(minFilterValueLength) @@ -148,5 +151,22 @@ public abstract class AbstractSolrFacetConfigAdminWebScript extends DeclarativeW } } + private T getValue(Class clazz, Object value, T defaultValue) throws JSONException + { + if (value == null) + { + return defaultValue; + } + + try + { + return clazz.cast(value); + } + catch (Exception ex) + { + throw new JSONException("JSONObject[" + value +"] is not an instance of [" + clazz.getName() +"]"); + } + } + abstract protected Map unprotectedExecuteImpl(WebScriptRequest req, Status status, Cache cache); } diff --git a/source/java/org/alfresco/repo/web/scripts/solr/facet/SolrFacetConfigAdminGet.java b/source/java/org/alfresco/repo/web/scripts/solr/facet/SolrFacetConfigAdminGet.java index 64b6de1238..78a6c7b5e1 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/facet/SolrFacetConfigAdminGet.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/facet/SolrFacetConfigAdminGet.java @@ -19,7 +19,9 @@ package org.alfresco.repo.web.scripts.solr.facet; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.alfresco.repo.search.impl.solr.facet.SolrFacetProperties; @@ -27,6 +29,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; /** @@ -41,15 +44,30 @@ public class SolrFacetConfigAdminGet extends AbstractSolrFacetConfigAdminWebScri @Override protected Map unprotectedExecuteImpl(WebScriptRequest req, Status status, Cache cache) { - Map filters = facetService.getFacets(); + // get the filterID parameter. + Map templateVars = req.getServiceMatch().getTemplateVars(); + String filterID = templateVars.get("filterID"); Map model = new HashMap(1); - model.put("filters", filters); + if (filterID == null) + { + List filters = new ArrayList<>(facetService.getFacets().values()); + model.put("filters", filters); + } + else + { + SolrFacetProperties fp = facetService.getFacet(filterID); + if (fp == null) + { + throw new WebScriptException(Status.STATUS_NOT_FOUND, "Filter not found"); + } + model.put("filter", fp); + } if (logger.isDebugEnabled()) { - logger.debug("Retrieved all available facets: " + filters); + logger.debug("Retrieved all available facets: " + model.values()); } return model;