/**
* 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.app.xmlui.aspect.discovery.recentSubmissions;
import org.apache.log4j.Logger;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.discovery.*;
import org.dspace.discovery.configuration.DiscoveryConfiguration;
import org.dspace.discovery.configuration.DiscoveryRecentSubmissionsConfiguration;
import java.util.List;
/**
* Class containing utility methods used to render recent submissions
*
* @author Kevin Van de Velde (kevin at atmire dot com)
*/
public class RecentSubmissionUtils {
private static final Logger log = Logger.getLogger(RecentSubmissionUtils.class);
/**
* Retrieves the recent submitted items of the given scope
*
* @param dso the DSpace object can either be null (indicating home page), a collection or a community
*/
public static DiscoverResult getRecentlySubmittedItems(Context context, DSpaceObject dso, int offset) {
try {
DiscoverQuery queryArgs = new DiscoverQuery();
//Add the default filter queries
DiscoveryConfiguration discoveryConfiguration = getDiscoveryConfiguration(dso);
List<String> defaultFilterQueries = discoveryConfiguration.getDefaultFilterQueries();
queryArgs.addFilterQueries(defaultFilterQueries.toArray(new String[defaultFilterQueries.size()]));
queryArgs.setDSpaceObjectFilter(Constants.ITEM);
DiscoveryRecentSubmissionsConfiguration recentSubmissionConfiguration = getRecentSubmissionConfiguration(discoveryConfiguration);
if(recentSubmissionConfiguration != null){
queryArgs.setMaxResults(recentSubmissionConfiguration.getMax());
queryArgs.setStart(offset);
String sortField = SearchUtils.getSearchService().toSortFieldIndex(recentSubmissionConfiguration.getMetadataSortField(), recentSubmissionConfiguration.getType());
if(sortField != null){
queryArgs.setSortField(
sortField,
DiscoverQuery.SORT_ORDER.desc
);
}
SearchService service = SearchUtils.getSearchService();
return service.search(context, dso, queryArgs);
}else{
//No configuration, no results
return null;
}
}catch (SearchServiceException se){
log.error("Caught SearchServiceException while retrieving recent submission for: " + (dso == null ? "home page" : dso.getHandle()), se);
return null;
}
}
public static DiscoveryRecentSubmissionsConfiguration getRecentSubmissionConfiguration(DSpaceObject dso) {
return getRecentSubmissionConfiguration(getDiscoveryConfiguration(dso));
}
public static DiscoveryRecentSubmissionsConfiguration getRecentSubmissionConfiguration(DiscoveryConfiguration discoveryConfiguration) {
return discoveryConfiguration.getRecentSubmissionConfiguration();
}
public static DiscoveryConfiguration getDiscoveryConfiguration(DSpaceObject dso) {
return SearchUtils.getDiscoveryConfiguration(dso);
}
}