diff --git a/dspace-stats/pom.xml b/dspace-stats/pom.xml index 4f1228cbd720..b35a7be5fd84 100644 --- a/dspace-stats/pom.xml +++ b/dspace-stats/pom.xml @@ -204,6 +204,13 @@ commons-cli commons-cli + + + com.google.code.gson + gson + 2.1 + compile + diff --git a/dspace-stats/src/main/java/org/dspace/statistics/DataTermsFacet.java b/dspace-stats/src/main/java/org/dspace/statistics/DataTermsFacet.java new file mode 100644 index 000000000000..e209fbb2e2cc --- /dev/null +++ b/dspace-stats/src/main/java/org/dspace/statistics/DataTermsFacet.java @@ -0,0 +1,64 @@ +package org.dspace.statistics; + +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.List; + +/** + * A neutral data object to hold data for statistics. + * + */ +public class DataTermsFacet { + private List terms; + + public DataTermsFacet() { + terms = new ArrayList(); + } + public void addTermFacet(TermsFacet termsFacet ) { + terms.add(termsFacet); + } + + /** + * Render this data object into JSON format. + * + * An example of the output could be of the format: + * [{"term":"247166","count":10},{"term":"247168","count":6}] + * @return + */ + public String toJson() { + Gson gson = new Gson(); + return gson.toJson(terms); + } + + + + + public static class TermsFacet { + private String term; + private Integer count; + + public TermsFacet(String term, Integer count) { + setTerm(term); + setCount(count); + } + + public String getTerm() { + return term; + } + + public void setTerm(String term) { + this.term = term; + } + + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } + + + } +} diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/statisticsElasticSearch/ElasticSearchStatsViewer.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/statisticsElasticSearch/ElasticSearchStatsViewer.java index 1b2192d33168..8de06d2cf53c 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/statisticsElasticSearch/ElasticSearchStatsViewer.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/statisticsElasticSearch/ElasticSearchStatsViewer.java @@ -12,6 +12,7 @@ import org.dspace.content.*; import org.dspace.content.Item; import org.dspace.core.Constants; +import org.dspace.statistics.DataTermsFacet; import org.dspace.statistics.ElasticSearchLogger; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; @@ -261,6 +262,15 @@ public void showAllReports() throws WingException, SQLException{ // Top Downloads to Owning Object TermsFacet bitstreamsFacet = resp.getFacets().facet(TermsFacet.class, "top_bitstreams_lastmonth"); addTermFacetToTable(bitstreamsFacet, division, "Bitstream", "Top Downloads for " + getLastMonthString()); + + // Convert Elastic Search data to a common DataTermsFacet object, and stuff in DRI/HTML of page. + TermsFacet topBitstreamsFacet = resp.getFacets().facet(TermsFacet.class, "top_bitstreams_lastmonth"); + List termsFacetEntries = topBitstreamsFacet.getEntries(); + DataTermsFacet termsFacet = new DataTermsFacet(); + for(TermsFacet.Entry entry : termsFacetEntries) { + termsFacet.addTermFacet(new DataTermsFacet.TermsFacet(entry.getTerm(), entry.getCount())); + } + division.addHidden("jsonTopDownloads").setValue(termsFacet.toJson()); } public AbstractFacetBuilder facetTopBitstreamsLastMonth() {