/** * 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.webui.components; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.dspace.authorize.AuthorizeException; import org.dspace.app.webui.util.UIUtil; import org.dspace.content.Collection; import org.dspace.core.ConfigurationManager; import org.dspace.core.Context; import org.dspace.plugin.CollectionHomeProcessor; import org.dspace.plugin.PluginException; import org.dspace.browse.BrowseEngine; import org.dspace.browse.BrowseIndex; import org.dspace.browse.BrowseInfo; import org.dspace.browse.BrowserScope; import org.dspace.browse.BrowseException; import org.dspace.sort.SortException; import org.dspace.sort.SortOption; /** * This class obtains item list of the given collection by * implementing the CollectionHomeProcessor. * * @author Keiji Suzuki * */ public class CollectionItemList implements CollectionHomeProcessor { // the name of a browse index to display collection's items private static String name = ConfigurationManager.getProperty("webui.collectionhome.browse-name"); // the number of authors to display before trncating private static final int etal = ConfigurationManager.getIntProperty("webui.browse.author-limit", -1); // the number of items to display per page private static final int perpage = ConfigurationManager.getIntProperty("webui.collectionhome.perpage", 20); // whether does use "dateaccessioned" as a sort option // If true and the sort option "dateaccessioned" exists, use "dateaccessioned" as a sort option. // Otherwise use the sort option pertaining the specified browse index private static boolean useDateaccessioned = ConfigurationManager.getBooleanProperty("webui.collectionhome.use.dateaccessioned", true); // the number of sort option "dateaccessioned" private static int number = -1; static { if (name == null) { name = "title"; } if (useDateaccessioned) { try { for (SortOption option : SortOption.getSortOptions()) { if ("dateaccessioned".equals(option.getName())) { number = option.getNumber(); break; } } } catch (SortException e) { // does nothing } } } /** * blank constructor - does nothing. * */ public CollectionItemList() { } /* (non-Javadoc) * @see org.dspace.plugin.CommunityHomeProcessor#process(org.dspace.core.Context, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.dspace.content.Community) */ public void process(Context context, HttpServletRequest request, HttpServletResponse response, Collection collection) throws PluginException, AuthorizeException { int offset = UIUtil.getIntParameter(request, "offset"); if (offset < 0) { offset = 0; } try { BrowseIndex bi = BrowseIndex.getBrowseIndex(name); if (bi == null || !"item".equals(bi.getDisplayType())) { request.setAttribute("show.items", Boolean.FALSE); return; } BrowserScope scope = new BrowserScope(context); scope.setBrowseContainer(collection); scope.setBrowseIndex(bi); scope.setEtAl(etal); scope.setOffset(offset); scope.setResultsPerPage(perpage); if (number != -1) { scope.setSortBy(number); scope.setOrder(SortOption.DESCENDING); } BrowseEngine be = new BrowseEngine(context); BrowseInfo binfo = be.browse(scope); request.setAttribute("browse.info", binfo); if (binfo.hasResults()) { request.setAttribute("show.items", Boolean.TRUE); } else { request.setAttribute("show.items", Boolean.FALSE); } } catch (BrowseException e) { request.setAttribute("show.items", Boolean.FALSE); } } }