Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)

84938: Merged PLATFORM1 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud)
      83536: Added support for a namespace query parameter (nsp) as part of ACE-2639.
      Improved the .desc.xml documentation.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@85255 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2014-09-20 09:18:56 +00:00
parent b605e62834
commit 69f25229d2
2 changed files with 77 additions and 7 deletions

View File

@@ -4,17 +4,34 @@
<![CDATA[ <![CDATA[
Get limited property definition data for properties deemed to be facetable. Get limited property definition data for properties deemed to be facetable.
http://<host>:<port>/alfresco/api/facet/facetable-properties http://<host>:<port>/alfresco/api/facet/facetable-properties[?nsp=eg]
http://<host>:<port>/alfresco/api/facet/classes/eg:aspectOrType/facetable-properties
Example response from this web script: Example response from this web script:
{ {
TODO "data" : {
"properties" : [
{
"name" : "eg:propName1",
"displayName" : "eg:propName1",
"dataType" : "d:text",
"modelQName" : "eg:examplemodel"
},
{
"name" : "eg:propName2",
"title" : "Useful Metadata",
"displayName" : "eg:propName2 (Useful Metadata)",
"dataType" : "d:text",
"modelQName" : "eg:examplemodel"
}
]
}
} }
]]> ]]>
</description> </description>
<url>/api/facet/classes/{classname}/facetable-properties</url> <url>/api/facet/classes/{classname}/facetable-properties?nsp={namespacePrefix?}</url>
<url>/api/facet/facetable-properties</url> <url>/api/facet/facetable-properties?nsp={namespacePrefix?}</url>
<format default="json">argument</format> <format default="json">argument</format>
<authentication>user</authentication> <authentication>user</authentication>
<transaction>required</transaction> <transaction>required</transaction>

View File

@@ -19,9 +19,13 @@
package org.alfresco.repo.web.scripts.facet; package org.alfresco.repo.web.scripts.facet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeSet;
import org.alfresco.repo.search.impl.solr.facet.SolrFacetService.FacetablePropertyData; import org.alfresco.repo.search.impl.solr.facet.SolrFacetService.FacetablePropertyData;
import org.alfresco.service.namespace.NamespaceException; import org.alfresco.service.namespace.NamespaceException;
@@ -45,6 +49,9 @@ public class FacetablePropertiesGet extends AbstractSolrFacetConfigAdminWebScrip
public static final Log logger = LogFactory.getLog(FacetablePropertiesGet.class); public static final Log logger = LogFactory.getLog(FacetablePropertiesGet.class);
public static final String PROPERTIES_KEY = "properties"; public static final String PROPERTIES_KEY = "properties";
private static final String TEMPLATE_VAR_CLASSNAME = "classname";
private static final String QUERY_PARAM_NAMESPACE = "nsp";
private NamespaceService namespaceService; private NamespaceService namespaceService;
public void setNamespaceService(NamespaceService service) { this.namespaceService = service; } public void setNamespaceService(NamespaceService service) { this.namespaceService = service; }
@@ -59,7 +66,7 @@ public class FacetablePropertiesGet extends AbstractSolrFacetConfigAdminWebScrip
{ {
// There are multiple defined URIs for this REST endpoint. Some define a "classname" template var. // There are multiple defined URIs for this REST endpoint. Some define a "classname" template var.
Map<String, String> templateVars = req.getServiceMatch().getTemplateVars(); Map<String, String> templateVars = req.getServiceMatch().getTemplateVars();
final String contentClassName = templateVars.get("classname"); final String contentClassName = templateVars.get(TEMPLATE_VAR_CLASSNAME);
QName contentClassQName; QName contentClassQName;
try try
@@ -82,13 +89,59 @@ public class FacetablePropertiesGet extends AbstractSolrFacetConfigAdminWebScrip
facetableProperties = facetService.getFacetableProperties(contentClassQName); facetableProperties = facetService.getFacetableProperties(contentClassQName);
} }
model.put(PROPERTIES_KEY, facetableProperties); // The webscript allows for some further filtering of results:
List<ResultFilter> filters = new ArrayList<>();
// By property QName namespace:
final String namespaceFilter = req.getParameter(QUERY_PARAM_NAMESPACE);
if (namespaceFilter != null)
{
filters.add(new ResultFilter()
{
@Override public boolean filter(FacetablePropertyData facetableProperty)
{
final QName propQName = facetableProperty.getPropertyDefinition().getName();
Collection<String> prefixes = namespaceService.getPrefixes(propQName.getNamespaceURI());
return prefixes.contains(namespaceFilter);
}
});
}
Set<FacetablePropertyData> filteredFacetableProperties = filter(facetableProperties, filters);
model.put(PROPERTIES_KEY, filteredFacetableProperties);
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {
logger.debug("Retrieved " + facetableProperties.size() + " available facets"); logger.debug("Retrieved " + facetableProperties.size() + " available facets; filtered to " + filteredFacetableProperties.size());
} }
return model; return model;
} }
/** This type defines the (inclusion) filtering of {@link FacetablePropertyData} in the response to this webscript. */
private static interface ResultFilter
{
public boolean filter(FacetablePropertyData facetableProperty);
}
/**
* This method returns a new Set instance containing only those {@link FacetablePropertyData data} that
* satisfy all {@link ResultFilter filters}.
*/
private Set<FacetablePropertyData> filter(Set<FacetablePropertyData> propsData, List<ResultFilter> filters)
{
Set<FacetablePropertyData> filteredResult = new TreeSet<>();
for (FacetablePropertyData prop : propsData)
{
boolean passedAllFilters = true;
for (ResultFilter filter : filters)
{
if (!filter.filter(prop)) { passedAllFilters = false; }
}
if (passedAllFilters) { filteredResult.add(prop); }
}
return filteredResult;
}
} }