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[
|
<![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>
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user