mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
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:
@@ -4,17 +4,34 @@
|
||||
<![CDATA[
|
||||
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:
|
||||
|
||||
{
|
||||
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>
|
||||
<url>/api/facet/classes/{classname}/facetable-properties</url>
|
||||
<url>/api/facet/facetable-properties</url>
|
||||
<url>/api/facet/classes/{classname}/facetable-properties?nsp={namespacePrefix?}</url>
|
||||
<url>/api/facet/facetable-properties?nsp={namespacePrefix?}</url>
|
||||
<format default="json">argument</format>
|
||||
<authentication>user</authentication>
|
||||
<transaction>required</transaction>
|
||||
|
@@ -19,9 +19,13 @@
|
||||
|
||||
package org.alfresco.repo.web.scripts.facet;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.alfresco.repo.search.impl.solr.facet.SolrFacetService.FacetablePropertyData;
|
||||
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 String PROPERTIES_KEY = "properties";
|
||||
|
||||
private static final String TEMPLATE_VAR_CLASSNAME = "classname";
|
||||
private static final String QUERY_PARAM_NAMESPACE = "nsp";
|
||||
|
||||
private NamespaceService namespaceService;
|
||||
|
||||
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.
|
||||
Map<String, String> templateVars = req.getServiceMatch().getTemplateVars();
|
||||
final String contentClassName = templateVars.get("classname");
|
||||
final String contentClassName = templateVars.get(TEMPLATE_VAR_CLASSNAME);
|
||||
|
||||
QName contentClassQName;
|
||||
try
|
||||
@@ -82,13 +89,59 @@ public class FacetablePropertiesGet extends AbstractSolrFacetConfigAdminWebScrip
|
||||
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())
|
||||
{
|
||||
logger.debug("Retrieved " + facetableProperties.size() + " available facets");
|
||||
logger.debug("Retrieved " + facetableProperties.size() + " available facets; filtered to " + filteredFacetableProperties.size());
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user