/** * 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.statistics; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.apache.commons.lang.StringUtils; import org.apache.solr.client.solrj.SolrServerException; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.*; import org.dspace.statistics.Dataset; import org.dspace.statistics.content.StatisticsTable; import org.dspace.statistics.content.filter.StatisticsSolrDateFilter; import org.xml.sax.SAXException; import java.io.IOException; import java.sql.SQLException; import java.text.ParseException; /** * @author Kevin Van de Velde (kevin at atmire dot com) * @author Ben Bosman (ben at atmire dot com) * @author Mark Diggory (markd at atmire dot com) */ public abstract class AbstractStatisticsDataTransformer extends AbstractDSpaceTransformer { private static final Message T_time_filter_last_month = message("xmlui.statistics.StatisticsSearchTransformer.time-filter.last-month"); private static final Message T_time_filter_overall = message("xmlui.statistics.StatisticsSearchTransformer.time-filter.overall"); private static final Message T_time_filter_last_year = message("xmlui.statistics.StatisticsSearchTransformer.time-filter.last-year"); private static final Message T_time_filter_last6_months = message("xmlui.statistics.StatisticsSearchTransformer.time-filter.last-6-months"); protected void addTimeFilter(Division mainDivision) throws WingException { Request request = ObjectModelHelper.getRequest(objectModel); String selectedTimeFilter = request.getParameter("time_filter"); Select timeFilter = mainDivision.addPara().addSelect("time_filter"); timeFilter.addOption(StringUtils.equals(selectedTimeFilter, "-1"), "-1", T_time_filter_last_month); timeFilter.addOption(StringUtils.equals(selectedTimeFilter, "-6"), "-6", T_time_filter_last6_months); timeFilter.addOption(StringUtils.equals(selectedTimeFilter, "-12"), "-12", T_time_filter_last_year); timeFilter.addOption(StringUtils.isBlank(selectedTimeFilter), "", T_time_filter_overall); } protected StatisticsSolrDateFilter getDateFilter(String timeFilter){ if(StringUtils.isNotEmpty(timeFilter)) { StatisticsSolrDateFilter dateFilter = new StatisticsSolrDateFilter(); dateFilter.setStartStr(timeFilter); dateFilter.setEndStr("0"); dateFilter.setTypeStr("month"); return dateFilter; }else{ return null; } } /** * Adds a table layout to the page * * @param mainDiv * the div to add the table to * @param display the statistics table containing our data * @throws org.xml.sax.SAXException * @throws org.dspace.app.xmlui.wing.WingException * @throws java.text.ParseException * @throws java.io.IOException * @throws org.apache.solr.client.solrj.SolrServerException * @throws java.sql.SQLException */ protected void addDisplayTable(Division mainDiv, StatisticsTable display, boolean addRowTitles, String []valueMessagePrefixes) throws SAXException, WingException, SQLException, SolrServerException, IOException, ParseException { String title = display.getTitle(); Dataset dataset = display.getDataset(); if (dataset == null) { /** activate dataset query */ dataset = display.getDataset(context); } if (dataset != null) { String[][] matrix = dataset.getMatrix(); if(matrix.length == 0){ //If no results are found alert the user of this ! mainDiv.addPara(getNoResultsMessage()); return; } /** Generate Table */ Division wrapper = mainDiv.addDivision("tablewrapper"); Table table = wrapper.addTable("list-table", 1, 1, title == null ? "detailtable" : "tableWithTitle detailtable"); if (title != null) { table.setHead(message(title)); } /** Generate Header Row */ Row headerRow = table.addRow(); if(addRowTitles) { headerRow.addCell("spacer", Cell.ROLE_HEADER, "labelcell"); } String[] cLabels = dataset.getColLabels().toArray(new String[0]); for (int row = 0; row < cLabels.length; row++) { Cell cell = headerRow.addCell(0 + "-" + row + "-h", Cell.ROLE_HEADER, "labelcell"); cell.addContent(message("xmlui.statistics.display.table.column-label." + cLabels[row])); } /** Generate Table Body */ for (int row = 0; row < matrix.length; row++) { Row valListRow = table.addRow(); if(addRowTitles){ /** Add Row Title */ valListRow.addCell("" + row, Cell.ROLE_DATA, "labelcell") .addContent(dataset.getRowLabels().get(row)); } /** Add Rest of Row */ for (int col = 0; col < matrix[row].length; col++) { Cell cell = valListRow.addCell(row + "-" + col, Cell.ROLE_DATA, "datacell"); String messagePrefix = null; if(valueMessagePrefixes != null && col < valueMessagePrefixes.length){ messagePrefix = valueMessagePrefixes[col]; } if(messagePrefix != null){ cell.addContent(message(messagePrefix + matrix[row][col])); }else{ cell.addContent(matrix[row][col]); } } } } } protected abstract Message getNoResultsMessage(); }