diff --git a/config/alfresco/model/solrFacetModel.xml b/config/alfresco/model/solrFacetModel.xml
index 356a89c89e..7ed3d04200 100644
--- a/config/alfresco/model/solrFacetModel.xml
+++ b/config/alfresco/model/solrFacetModel.xml
@@ -46,6 +46,16 @@
false
+
+ Field Display Control
+ d:text
+ true
+
+ false
+ false
+ false
+
+
Maximum Filters
d:int
@@ -127,6 +137,16 @@
false
+
+ Is Default (loaded from a properties file)
+ d:boolean
+ true
+
+ false
+ false
+ false
+
+
@@ -135,4 +155,4 @@
cm:folder
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/config/alfresco/subsystems/Search/solr/facet/solr-facets-config.properties b/config/alfresco/subsystems/Search/solr/facet/solr-facets-config.properties
index f5b49cdca7..4c630e6571 100644
--- a/config/alfresco/subsystems/Search/solr/facet/solr-facets-config.properties
+++ b/config/alfresco/subsystems/Search/solr/facet/solr-facets-config.properties
@@ -6,6 +6,7 @@
# Field-Facet-Qname => cm:content.mimetype
default.cm\:content.mimetype.filterID=filter_mimetype
default.cm\:content.mimetype.displayName=faceted-search.facet-menu.facet.formats
+default.cm\:content.mimetype.displayControl=alfresco/search/FacetFilters
default.cm\:content.mimetype.maxFilters=5
default.cm\:content.mimetype.hitThreshold=1
default.cm\:content.mimetype.minFilterValueLength=4
@@ -18,6 +19,7 @@ default.cm\:content.mimetype.isEnabled=true
# Field-Facet-Qname => cm:description.__
default.cm\:description.__.filterID=filter_description
default.cm\:description.__.displayName=faceted-search.facet-menu.facet.description
+default.cm\:description.__.displayControl=alfresco/search/FacetFilters
default.cm\:description.__.maxFilters=5
default.cm\:description.__.hitThreshold=1
default.cm\:description.__.minFilterValueLength=4
@@ -30,6 +32,7 @@ default.cm\:description.__.isEnabled=true
# Field-Facet-Qname => cm:creator.__.u
default.cm\:creator.__.u.filterID=filter_creator
default.cm\:creator.__.u.displayName=faceted-search.facet-menu.facet.creator
+default.cm\:creator.__.u.displayControl=alfresco/search/FacetFilters
default.cm\:creator.__.u.maxFilters=5
default.cm\:creator.__.u.hitThreshold=1
default.cm\:creator.__.u.minFilterValueLength=4
@@ -42,6 +45,7 @@ default.cm\:creator.__.u.isEnabled=true
# Field-Facet-Qname => cm:modifier.__.u
default.cm\:modifier.__.u.filterID=filter_modifier
default.cm\:modifier.__.u.displayName=faceted-search.facet-menu.facet.modifier
+default.cm\:modifier.__.u.displayControl=alfresco/search/FacetFilters
default.cm\:modifier.__.u.maxFilters=5
default.cm\:modifier.__.u.hitThreshold=1
default.cm\:modifier.__.u.minFilterValueLength=4
@@ -54,6 +58,7 @@ default.cm\:modifier.__.u.isEnabled=true
# Field-Facet-Qname => cm:created
default.cm\:created.filterID=filter_created
default.cm\:created.displayName=faceted-search.facet-menu.facet.created
+default.cm\:created.displayControl=alfresco/search/FacetFilters
default.cm\:created.blockIncludeFacetRequest=true
default.cm\:created.maxFilters=5
default.cm\:created.hitThreshold=1
@@ -67,6 +72,7 @@ default.cm\:created.isEnabled=true
# Field-Facet-Qname => cm:modified
default.cm\:modified.filterID=filter_modified
default.cm\:modified.displayName=faceted-search.facet-menu.facet.modified
+default.cm\:modified.displayControl=alfresco/search/FacetFilters
default.cm\:modified.blockIncludeFacetRequest=true
default.cm\:modified.maxFilters=5
default.cm\:modified.hitThreshold=1
@@ -80,6 +86,7 @@ default.cm\:modified.isEnabled=true
# Field-Facet-Qname => cm:content.size
default.cm\:content.size.filterID=filter_content_size
default.cm\:content.size.displayName=faceted-search.facet-menu.facet.size
+default.cm\:content.size.displayControl=alfresco/search/FacetFilters
default.cm\:content.size.blockIncludeFacetRequest=true
default.cm\:content.size.maxFilters=5
default.cm\:content.size.hitThreshold=1
diff --git a/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetConfig.java b/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetConfig.java
index 45dfef7eb5..1c4f1a2a54 100644
--- a/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetConfig.java
+++ b/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetConfig.java
@@ -178,6 +178,7 @@ public class SolrFacetConfig extends AbstractLifecycleBean
QName fieldQName = resolveToQName(namespaceService, field);
String filterID = propValues.get(ValueName.PROP_FILTER_ID.getPropValueName(field));
String displayName = propValues.get(ValueName.PROP_DISPLAY_NAME.getPropValueName(field));
+ String displayControl = propValues.get(ValueName.PROP_DISPLAY_CONTROL.getPropValueName(field));
int maxFilters = getIntegerValue(propValues.get(ValueName.PROP_MAX_FILTERS.getPropValueName(field)));
int hitThreshold = getIntegerValue(propValues.get(ValueName.PROP_HIT_THRESHOLD.getPropValueName(field)));
int minFilterValueLength = getIntegerValue(propValues.get(ValueName.PROP_MIN_FILTER_VALUE_LENGTH.getPropValueName(field)));
@@ -192,6 +193,7 @@ public class SolrFacetConfig extends AbstractLifecycleBean
.filterID(filterID)
.facetQName(fieldQName)
.displayName(displayName)
+ .displayControl(displayControl)
.maxFilters(maxFilters)
.hitThreshold(hitThreshold)
.minFilterValueLength(minFilterValueLength)
@@ -199,6 +201,7 @@ public class SolrFacetConfig extends AbstractLifecycleBean
.scope(scope)
.index(index)
.isEnabled(isEnabled)
+ .isDefault(true)
.scopedSites(scopedSites).build();
facetProperties.put(filterID, fp);
@@ -309,7 +312,7 @@ public class SolrFacetConfig extends AbstractLifecycleBean
{
PROP_FILTER_ID("filterID"), PROP_DISPLAY_NAME("displayName"), PROP_MAX_FILTERS("maxFilters"), PROP_HIT_THRESHOLD("hitThreshold"),
PROP_MIN_FILTER_VALUE_LENGTH("minFilterValueLength"), PROP_SORTBY("sortBy"), PROP_SCOPE("scope"), PROP_SCOPED_SITES("scopedSites"),
- PROP_INDEX("index"), PROP_IS_ENABLED("isEnabled");
+ PROP_INDEX("index"), PROP_IS_ENABLED("isEnabled"), PROP_DISPLAY_CONTROL("displayControl");
private ValueName(String propValueName)
{
diff --git a/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetModel.java b/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetModel.java
index 440e20ab24..1e0d597262 100644
--- a/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetModel.java
+++ b/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetModel.java
@@ -37,6 +37,8 @@ public interface SolrFacetModel
public static final QName PROP_FIELD_LABEL = QName.createQName(SOLR_FACET_MODEL_URL, "fieldLabel");
+ public static final QName PROP_DISPLAY_CONTROL = QName.createQName(SOLR_FACET_MODEL_URL, "displayControl");
+
public static final QName PROP_MAX_FILTERS = QName.createQName(SOLR_FACET_MODEL_URL, "maxFilters");
public static final QName PROP_HIT_THRESHOLD = QName.createQName(SOLR_FACET_MODEL_URL, "hitThreshold");
@@ -52,4 +54,6 @@ public interface SolrFacetModel
public static final QName PROP_INDEX = QName.createQName(SOLR_FACET_MODEL_URL, "index");
public static final QName PROP_IS_ENABLED = QName.createQName(SOLR_FACET_MODEL_URL, "isEnabled");
+
+ public static final QName PROP_IS_DEFAULT = QName.createQName(SOLR_FACET_MODEL_URL, "isDefault");
}
diff --git a/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetProperties.java b/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetProperties.java
index 6661f2ec66..b2f03fc997 100644
--- a/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetProperties.java
+++ b/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetProperties.java
@@ -31,11 +31,12 @@ import org.alfresco.service.namespace.QName;
*
* @author Jamal Kaabi-Mofrad
*/
-public class SolrFacetProperties
+public class SolrFacetProperties implements Comparable
{
private final String filterID;
private final QName facetQName;
private final String displayName;
+ private final String displayControl;
private final int maxFilters;
private final int hitThreshold;
private final int minFilterValueLength;
@@ -44,6 +45,7 @@ public class SolrFacetProperties
private final Set scopedSites;
private final int index;
private final boolean isEnabled;
+ private final boolean isDefault; // is loaded from properties files?
/**
* Initialises a newly created SolrFacetProperty
object
@@ -55,6 +57,7 @@ public class SolrFacetProperties
this.filterID = builder.filterID;
this.facetQName = builder.facetQName;
this.displayName = builder.displayName;
+ this.displayControl = builder.displayControl;
this.maxFilters = builder.maxFilters;
this.hitThreshold = builder.hitThreshold;
this.minFilterValueLength = builder.minFilterValueLength;
@@ -62,6 +65,7 @@ public class SolrFacetProperties
this.scope = builder.scope;
this.index = builder.index;
this.isEnabled = builder.isEnabled;
+ this.isDefault = builder.isDefault;
this.scopedSites = (builder.scopedSites == null) ? null :Collections.unmodifiableSet(new HashSet(builder.scopedSites));
}
@@ -89,6 +93,14 @@ public class SolrFacetProperties
return this.displayName;
}
+ /**
+ * @return the displayControl
+ */
+ public String getDisplayControl()
+ {
+ return this.displayControl;
+ }
+
/**
* @return the maxFilters
*/
@@ -159,6 +171,16 @@ public class SolrFacetProperties
return this.isEnabled;
}
+ /**
+ * Whether the facet is a default facet (loaded from a configuration file) or not
+ *
+ * @return true if the facet is default, false otherwise
+ */
+ public boolean isDefault()
+ {
+ return this.isDefault;
+ }
+
/*
* @see java.lang.Object#hashCode()
*/
@@ -204,21 +226,31 @@ public class SolrFacetProperties
return true;
}
+ /*
+ * @see java.lang.Comparable#compareTo(T)
+ */
+ @Override
+ public int compareTo(SolrFacetProperties that)
+ {
+ return Integer.compare(this.index, that.index);
+ }
+
/*
* @see java.lang.Object#toString()
*/
@Override
public String toString()
{
- StringBuilder builder2 = new StringBuilder(270);
- builder2.append("FacetProperty [filterID=").append(this.filterID).append(", facetQName=")
- .append(this.facetQName).append(", displayName=").append(this.displayName).append(", maxFilters=")
+ StringBuilder sb = new StringBuilder(320);
+ sb.append("FacetProperty [filterID=").append(this.filterID).append(", facetQName=")
+ .append(this.facetQName).append(", displayName=").append(this.displayName)
+ .append(", displayControl=").append(this.displayControl).append(", maxFilters=")
.append(this.maxFilters).append(", hitThreshold=").append(this.hitThreshold)
.append(", minFilterValueLength=").append(this.minFilterValueLength).append(", sortBy=")
.append(this.sortBy).append(", scope=").append(this.scope).append(", scopedSites=")
.append(this.scopedSites).append(", index=").append(this.index).append(", isEnabled=").append(this.isEnabled)
- .append("]");
- return builder2.toString();
+ .append(", isDefault=").append(this.isDefault).append("]");
+ return sb.toString();
}
public static class Builder
@@ -226,6 +258,7 @@ public class SolrFacetProperties
private String filterID;
private QName facetQName;
private String displayName;
+ private String displayControl;
private int maxFilters;
private int hitThreshold;
private int minFilterValueLength;
@@ -234,6 +267,7 @@ public class SolrFacetProperties
private Set scopedSites;
private int index;
private boolean isEnabled;
+ private boolean isDefault;
public Builder filterID(String filterID)
{
@@ -253,6 +287,12 @@ public class SolrFacetProperties
return this;
}
+ public Builder displayControl(String displayControl)
+ {
+ this.displayControl = displayControl;
+ return this;
+ }
+
public Builder maxFilters(int maxFilters)
{
this.maxFilters = maxFilters;
@@ -301,6 +341,12 @@ public class SolrFacetProperties
return this;
}
+ public Builder isDefault(boolean isDefault)
+ {
+ this.isDefault = isDefault;
+ return this;
+ }
+
public SolrFacetProperties build()
{
return new SolrFacetProperties(this);
diff --git a/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetServiceImpl.java b/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetServiceImpl.java
index d37f28be21..dfa1d514a7 100644
--- a/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetServiceImpl.java
+++ b/source/java/org/alfresco/repo/search/impl/solr/facet/SolrFacetServiceImpl.java
@@ -21,7 +21,6 @@ package org.alfresco.repo.search.impl.solr.facet;
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -54,6 +53,7 @@ import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.ParameterCheck;
+import org.alfresco.util.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationEvent;
@@ -196,7 +196,8 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
@Override
public Map getFacets()
{
- return Collections.unmodifiableMap(facetsMap);
+ Map sortedMap = CollectionUtils.sortMapByValue(facetsMap);
+ return sortedMap;
}
@Override
@@ -254,6 +255,7 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
String filterID = (String) properties.get(ContentModel.PROP_NAME);
QName fieldQName = (QName) properties.get(SolrFacetModel.PROP_FIELD_TYPE);
String displayName = (String) properties.get(SolrFacetModel.PROP_FIELD_LABEL);
+ String displayControl = (String) properties.get(SolrFacetModel.PROP_DISPLAY_CONTROL);
int maxFilters = (Integer) properties.get(SolrFacetModel.PROP_MAX_FILTERS);
int hitThreshold = (Integer) properties.get(SolrFacetModel.PROP_HIT_THRESHOLD);
int minFilterValueLength = (Integer) properties.get(SolrFacetModel.PROP_MIN_FILTER_VALUE_LENGTH);
@@ -261,6 +263,7 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
String scope = (String) properties.get(SolrFacetModel.PROP_SCOPE);
int index = (Integer) properties.get(SolrFacetModel.PROP_INDEX);
boolean isEnabled = (Boolean) properties.get(SolrFacetModel.PROP_IS_ENABLED);
+ boolean isDefault = (Boolean) properties.get(SolrFacetModel.PROP_IS_DEFAULT);
@SuppressWarnings("unchecked")
List scSites = (List) properties.get(SolrFacetModel.PROP_SCOPED_SITES);
Set scopedSites = (scSites == null) ? null : new HashSet<>(scSites);
@@ -270,6 +273,7 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
.filterID(filterID)
.facetQName(fieldQName)
.displayName(displayName)
+ .displayControl(displayControl)
.maxFilters(maxFilters)
.hitThreshold(hitThreshold)
.minFilterValueLength(minFilterValueLength)
@@ -277,6 +281,7 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
.scope(scope)
.index(index)
.isEnabled(isEnabled)
+ .isDefault(isDefault)
.scopedSites(scopedSites).build();
return fp;
@@ -404,7 +409,7 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
throw new SolrFacetConfigException("Filter Id cannot be null.");
}
- Map properties = new HashMap(11);
+ Map properties = new HashMap(14);
if (withFilterId)
{
@@ -412,6 +417,7 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
}
properties.put(SolrFacetModel.PROP_FIELD_TYPE, facetProperties.getFacetQName());
properties.put(SolrFacetModel.PROP_FIELD_LABEL, facetProperties.getDisplayName());
+ properties.put(SolrFacetModel.PROP_DISPLAY_CONTROL, facetProperties.getDisplayControl());
properties.put(SolrFacetModel.PROP_MAX_FILTERS, facetProperties.getMaxFilters());
properties.put(SolrFacetModel.PROP_HIT_THRESHOLD, facetProperties.getHitThreshold());
properties.put(SolrFacetModel.PROP_MIN_FILTER_VALUE_LENGTH, facetProperties.getMinFilterValueLength());
@@ -421,6 +427,9 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
properties.put(SolrFacetModel.PROP_INDEX, facetProperties.getIndex());
properties.put(SolrFacetModel.PROP_IS_ENABLED, facetProperties.isEnabled());
+ SolrFacetProperties fp = facetConfig.getDefaultFacets().get(facetProperties.getFilterID());
+ properties.put(SolrFacetModel.PROP_IS_DEFAULT, (fp == null) ? false : fp.isDefault());
+
return properties;
}
@@ -531,6 +540,7 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
{
SolrFacetProperties fp = getFacetProperties(childAssocRef.getChildRef());
this.facetsMap.put(fp.getFilterID(), fp);
+ this.facetNodeRefCache.put(fp.getFilterID(), childAssocRef.getChildRef());
}
@Override
@@ -538,5 +548,6 @@ public class SolrFacetServiceImpl extends AbstractLifecycleBean implements SolrF
{
String filterID = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME);
this.facetsMap.remove(filterID);
+ this.facetNodeRefCache.remove(filterID);
}
}