/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.discovery.configuration;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Required;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author Kevin Van de Velde (kevin at atmire dot com)
*/
public class DiscoveryConfiguration implements InitializingBean{
/** The configuration for the sidebar facets **/
private List<DiscoverySearchFilterFacet> sidebarFacets = new ArrayList<DiscoverySearchFilterFacet>();
private TagCloudFacetConfiguration tagCloudFacetConfiguration = new TagCloudFacetConfiguration();
/** The default filter queries which will be applied to any search & the recent submissions **/
private List<String> defaultFilterQueries;
/** Configuration object for the recent submissions **/
private DiscoveryRecentSubmissionsConfiguration recentSubmissionConfiguration;
/** The search filters which can be selected on the search page**/
private List<DiscoverySearchFilter> searchFilters = new ArrayList<DiscoverySearchFilter>();
private DiscoverySortConfiguration searchSortConfiguration;
private int defaultRpp = 10;
private String id;
private DiscoveryHitHighlightingConfiguration hitHighlightingConfiguration;
private DiscoveryMoreLikeThisConfiguration moreLikeThisConfiguration;
private boolean spellCheckEnabled;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<DiscoverySearchFilterFacet> getSidebarFacets() {
return sidebarFacets;
}
@Required
public void setSidebarFacets(List<DiscoverySearchFilterFacet> sidebarFacets) {
this.sidebarFacets = sidebarFacets;
}
public TagCloudFacetConfiguration getTagCloudFacetConfiguration() {
return tagCloudFacetConfiguration;
}
public void setTagCloudFacetConfiguration(TagCloudFacetConfiguration tagCloudFacetConfiguration) {
this.tagCloudFacetConfiguration = tagCloudFacetConfiguration;
}
public List<String> getDefaultFilterQueries() {
//Since default filter queries are not mandatory we will return an empty list
if(defaultFilterQueries == null){
return new ArrayList<String>();
}else{
return defaultFilterQueries;
}
}
public void setDefaultFilterQueries(List<String> defaultFilterQueries) {
this.defaultFilterQueries = defaultFilterQueries;
}
public DiscoveryRecentSubmissionsConfiguration getRecentSubmissionConfiguration() {
return recentSubmissionConfiguration;
}
public void setRecentSubmissionConfiguration(DiscoveryRecentSubmissionsConfiguration recentSubmissionConfiguration) {
this.recentSubmissionConfiguration = recentSubmissionConfiguration;
}
public List<DiscoverySearchFilter> getSearchFilters() {
return searchFilters;
}
@Required
public void setSearchFilters(List<DiscoverySearchFilter> searchFilters) {
this.searchFilters = searchFilters;
}
public DiscoverySortConfiguration getSearchSortConfiguration() {
return searchSortConfiguration;
}
@Required
public void setSearchSortConfiguration(DiscoverySortConfiguration searchSortConfiguration) {
this.searchSortConfiguration = searchSortConfiguration;
}
public void setDefaultRpp(int defaultRpp)
{
this.defaultRpp = defaultRpp;
}
public int getDefaultRpp()
{
return defaultRpp;
}
public void setHitHighlightingConfiguration(DiscoveryHitHighlightingConfiguration hitHighlightingConfiguration) {
this.hitHighlightingConfiguration = hitHighlightingConfiguration;
}
public DiscoveryHitHighlightingConfiguration getHitHighlightingConfiguration() {
return hitHighlightingConfiguration;
}
public void setMoreLikeThisConfiguration(DiscoveryMoreLikeThisConfiguration moreLikeThisConfiguration) {
this.moreLikeThisConfiguration = moreLikeThisConfiguration;
}
public DiscoveryMoreLikeThisConfiguration getMoreLikeThisConfiguration() {
return moreLikeThisConfiguration;
}
public boolean isSpellCheckEnabled() {
return spellCheckEnabled;
}
public void setSpellCheckEnabled(boolean spellCheckEnabled) {
this.spellCheckEnabled = spellCheckEnabled;
}
/**
* After all the properties are set check that the sidebar facets are a subset of our search filters
*
* @throws Exception throws an exception if this isn't the case
*/
@Override
public void afterPropertiesSet() throws Exception
{
Collection missingSearchFilters = CollectionUtils.subtract(getSidebarFacets(), getSearchFilters());
if(CollectionUtils.isNotEmpty(missingSearchFilters))
{
StringBuilder error = new StringBuilder();
error.append("The following sidebar facet configurations are not present in the search filters list: ");
for (Object missingSearchFilter : missingSearchFilters)
{
DiscoverySearchFilter searchFilter = (DiscoverySearchFilter) missingSearchFilter;
error.append(searchFilter.getIndexFieldName()).append(" ");
}
error.append("all the sidebar facets MUST be a part of the search filters list.");
throw new DiscoveryConfigurationException(error.toString());
}
Collection missingTagCloudSearchFilters = CollectionUtils.subtract(getTagCloudFacetConfiguration().getTagCloudFacets(), getSearchFilters());
if(CollectionUtils.isNotEmpty(missingTagCloudSearchFilters))
{
StringBuilder error = new StringBuilder();
error.append("The following tagCloud facet configurations are not present in the search filters list: ");
for (Object missingSearchFilter : missingTagCloudSearchFilters)
{
DiscoverySearchFilter searchFilter = (DiscoverySearchFilter) missingSearchFilter;
error.append(searchFilter.getIndexFieldName()).append(" ");
}
error.append("all the tagCloud facets MUST be a part of the search filters list.");
throw new DiscoveryConfigurationException(error.toString());
}
}
}