/** * 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.statistics.content; import java.util.ArrayList; import java.util.List; import org.apache.solr.client.solrj.SolrServerException; import org.dspace.content.Item; import org.dspace.core.Constants; import org.dspace.statistics.content.filter.StatisticsFilter; import org.dspace.statistics.factory.StatisticsServiceFactory; import org.dspace.statistics.service.SolrLoggerService; /** * Class that will hold the data needed to show * statistics in the browse and search pages. * * @author Kevin Van de Velde (kevin at atmire dot com) */ public class StatisticsBSAdapter { protected boolean displayItemViews; protected boolean displayBitstreamViews; protected boolean displayTotalViews; protected List<StatisticsFilter> filters; /** visitType is ITEM */ public static final int ITEM_VISITS = 0; /** visitType is BITSTREAM */ public static final int BITSTREAM_VISITS = 1; /** visitType is TOTAL */ public static final int TOTAL_VISITS = 2; protected final SolrLoggerService solrLoggerService; public StatisticsBSAdapter() { displayItemViews = false; displayBitstreamViews = false; filters = new ArrayList<StatisticsFilter>(); solrLoggerService = StatisticsServiceFactory.getInstance().getSolrLoggerService(); } /** * Returns the number of visits for the item. * Depending on the visitType it can either be item, bitstream, total, ... * * @param visitType the type of visits we want, from the item, bitstream, total * @param item the item from which we need our visits * @return the number of visits * @throws SolrServerException * Exception from the Solr server to the solrj Java client. */ public long getNumberOfVisits(int visitType, Item item) throws SolrServerException { switch (visitType){ case ITEM_VISITS: return solrLoggerService.queryTotal("type: " + Constants.ITEM + " AND id: " + item.getID(), resolveFilterQueries()).getCount(); case BITSTREAM_VISITS: return solrLoggerService.queryTotal("type: " + Constants.BITSTREAM + " AND owningItem: " + item.getID(), resolveFilterQueries()).getCount(); case TOTAL_VISITS: return getNumberOfVisits(ITEM_VISITS, item) + getNumberOfVisits(BITSTREAM_VISITS, item); } return -1; } private String resolveFilterQueries(){ StringBuilder out = new StringBuilder(); for (int i = 0; i < filters.size(); i++) { StatisticsFilter statisticsFilter = filters.get(i); out.append(statisticsFilter.toQuery()); if(i != 0 && (i != filters.size() -1)) { out.append(" AND "); } } return out.toString(); } /////////////////////// // GETTERS & SETTERS // /////////////////////// public boolean isDisplayTotalViews() { return displayTotalViews; } public void setDisplayTotalViews(boolean displayTotalViews) { this.displayTotalViews = displayTotalViews; } public boolean isDisplayItemViews() { return displayItemViews; } public void setDisplayItemViews(boolean displayItemViews) { this.displayItemViews = displayItemViews; } public boolean isDisplayBitstreamViews() { return displayBitstreamViews; } public void setDisplayBitstreamViews(boolean displayBitstreamViews) { this.displayBitstreamViews = displayBitstreamViews; } public List<StatisticsFilter> getFilters() { return filters; } public void addFilter(StatisticsFilter filter){ this.filters.add(filter); } public void setFilters(List<StatisticsFilter> filters) { this.filters = filters; } }