From 9ba8cc6bbd37106fdd5b3c9189ef3e2d360a6cca Mon Sep 17 00:00:00 2001 From: Dimitris Date: Thu, 25 Feb 2021 10:10:47 +0200 Subject: [PATCH] IR Report no Identifier selection --- .../controllers/SushiLiteController.java | 3 +- .../repositories/UsageStatsRepository.java | 1015 +++++++++++------ .../usagestats/services/SushiLiteService.java | 6 +- .../services/SushiLiteServiceImpl.java | 11 +- 4 files changed, 663 insertions(+), 372 deletions(-) diff --git a/src/main/java/eu/dnetlib/usagestats/controllers/SushiLiteController.java b/src/main/java/eu/dnetlib/usagestats/controllers/SushiLiteController.java index 6bcf9aa..fef8292 100755 --- a/src/main/java/eu/dnetlib/usagestats/controllers/SushiLiteController.java +++ b/src/main/java/eu/dnetlib/usagestats/controllers/SushiLiteController.java @@ -1,6 +1,7 @@ package eu.dnetlib.usagestats.controllers; import eu.dnetlib.usagestats.services.SushiLiteService; +import java.util.List; import org.apache.log4j.Logger; import org.springframework.web.bind.annotation.RequestMapping; @@ -83,7 +84,7 @@ class SushiLiteController { @RequestParam(value = "RequestorID", defaultValue = "anonymous") String requestorId, @RequestParam(value = "BeginDate", defaultValue = "") String beginDate, @RequestParam(value = "EndDate", defaultValue = "") String endDate, - @RequestParam(value = "MetricType", defaultValue = "") String metricType, + @RequestParam(value = "MetricType", defaultValue = "") List metricType, @RequestParam(value = "DataType", defaultValue = "") String dataType, @RequestParam(value = "Granularity", defaultValue = "Monthly") String granularity) { log.info("COUNTER TR Report request for repository " + repositoryIdentifier +" and for item "+ itemIdentifier); diff --git a/src/main/java/eu/dnetlib/usagestats/repositories/UsageStatsRepository.java b/src/main/java/eu/dnetlib/usagestats/repositories/UsageStatsRepository.java index 2e5c450..daa585d 100755 --- a/src/main/java/eu/dnetlib/usagestats/repositories/UsageStatsRepository.java +++ b/src/main/java/eu/dnetlib/usagestats/repositories/UsageStatsRepository.java @@ -17,6 +17,7 @@ import eu.dnetlib.usagestats.portal.TotalStats; import eu.dnetlib.usagestats.portal.TotalStatsReposViewsDownloads; import eu.dnetlib.usagestats.portal.UsageStats; import eu.dnetlib.usagestats.portal.YearlyStats; +import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Item_Identifiers; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Item_Performance; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Item_Usage; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Platform_Usage; @@ -29,6 +30,7 @@ import java.security.MessageDigest; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -1794,7 +1796,7 @@ public class UsageStatsRepository { public void executeBatchItemsIR(List reportItems, String repositoryIdentifier, String itemIdentifier, Date beginDate, - Date endDate, String metricType, String dataType, String granularity) { + Date endDate, List metricType, String dataType, String granularity) throws Exception { SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); String beginDateStr = postgresFormat.format(beginDate); @@ -1811,8 +1813,13 @@ public class UsageStatsRepository { if (granularity.equalsIgnoreCase("totals")) { if (dataType.equals("")) { - st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " - + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); + st = connection.prepareStatement("WITH tpd as (select id, concat(type,'#-#',pid) type_id from " + statsDB + ".result_pids) " + + "SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views, " + + "us.result_id as resultid, rs.title as item, rs.year as yop, group_concat(distinct tpd.type_id,'#!#') as oid " + + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc, " + statsDB + ".result rs, " + + statsDB + ".result_oids ro, tpd " + + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id AND us.result_id=rs.id AND ro.id=us.result_id AND tpd.id=us.result_id " + + "GROUP BY rc.type, rs.title, us.result_id, rs.title, rs.year order by rc.type ASC;"); st.setString(1, beginDateStr); st.setString(2, endDateStr); @@ -1820,33 +1827,57 @@ public class UsageStatsRepository { rs = st.executeQuery(); COUNTER_Item_Usage reportItem = null; + boolean metricFound = false; - switch (metricType) { - case (""): - while (rs.next()) { - reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", "Total_Items_Investigations|Total_Items_Requests"); - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); - reportItems.add(reportItem); + if (metricType.contains("Total_Items_Investigations") && metricType.contains("Total_Items_Requests") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Investigations|Total_Items_Requests"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); } - break; - case ("Total_Items_Investigations"): - while (rs.next()) { - reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); - reportItems.add(reportItem); + + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); + reportItems.add(reportItem); + } + metricFound = true; + } + if (metricType.contains("Total_Items_Investigations") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Investigations"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); } - break; - case ("Total_Items_Requests"): - while (rs.next()) { - reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); - reportItems.add(reportItem); + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); + reportItems.add(reportItem); + } + metricFound = true; + } + if (metricType.contains("Total_Items_Requests") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Requests"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); } - break; + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); + reportItems.add(reportItem); + } + metricFound = true; } } else { - st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " - + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); + st = connection.prepareStatement("WITH tpd as (select id, concat(type,'#-#',pid) type_id from " + statsDB + ".result_pids) " + + "SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views, " + + "us.result_id as resultid, rs.title as item, rs.year as yop, group_concat(distinct tpd.type_id,'#!#') as oid " + + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc, " + statsDB + ".result rs, " + + statsDB + ".result_oids ro, tpd " + + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id " + + "AND us.result_id=rs.id AND ro.id=us.result_id AND tpd.id=us.result_id " + + "GROUP BY ro.id, rc.type, rs.title, us.result_id, rs.year order by rc.type ASC;"); st.setString(1, beginDateStr); st.setString(2, endDateStr); @@ -1855,159 +1886,257 @@ public class UsageStatsRepository { rs = st.executeQuery(); COUNTER_Item_Usage reportItem = null; + boolean metricFound = false; - switch (metricType) { - case (""): - while (rs.next()) { - reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); - reportItems.add(reportItem); + if (metricType.contains("Total_Items_Investigations") && metricType.contains("Total_Items_Requests") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Investigations|Total_Items_Requests"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); } - break; - case ("Total_Items_Investigations"): - while (rs.next()) { - reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); - reportItems.add(reportItem); + + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); + reportItems.add(reportItem); + } + metricFound = true; + } + + if (metricType.contains("Total_Items_Investigations") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Investigations"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); } - break; - case ("Total_Items_Requests"): - while (rs.next()) { - reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); - reportItems.add(reportItem); + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); + reportItems.add(reportItem); + } + metricFound = true; + } + if (metricType.contains("Total_Items_Requests") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Requests"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); } - break; + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); + reportItems.add(reportItem); + } + metricFound = true; } } + } else if (granularity.equalsIgnoreCase("monthly")) { + if (dataType.equals("")) { + st = connection.prepareStatement("WITH tpd as (select id, concat(type,'#-#',pid) type_id from " + statsDB + ".result_pids) " + + "SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views, " + + "us.result_id as resultid, rs.title as item, rs.year as yop, group_concat(distinct tpd.type_id,'#!#') as oid " + + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc, " + statsDB + ".result rs, " + + statsDB + ".result_oids ro, tpd " + + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id AND us.result_id=rs.id AND ro.id=us.result_id " + + "AND tpd.id=us.result_id " + + "GROUP BY ro.id, rc.type, rs.title, us.result_id, us.`date`, rs.year order by rc.type, us.`date` ASC;"); + st.setString(1, beginDateStr); + st.setString(2, endDateStr); + st.setString(3, repositoryIdentifier); + + rs = st.executeQuery(); + String result = ""; + String lastDate = ""; + COUNTER_Item_Usage reportItem = null; + + int ft_total = 0; + int abstr = 0; + + Calendar endCal = Calendar.getInstance(); + endCal.setTime(postgresFormat.parse(endDateStr)); + endCal.add(Calendar.MONTH, 1); + Date endDateForZeros = endCal.getTime(); + + lastDate = beginDateStr; + String datatype = ""; + while (rs.next()) { + Calendar endC = Calendar.getInstance(); + endC.setTime(postgresFormat.parse(rs.getString(2))); + endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// //iterate on data types + if (!datatype.equals(rs.getString(1))) { +// if (reportItem != null) { +// reportItems.add(reportItem); +// } +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + datatype = rs.getString(1); + } + boolean metricFound = false; + if (metricType.contains("Total_Items_Investigations") && metricType.contains("Total_Items_Requests") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Investigations|Total_Items_Requests"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(4), rs.getString(3))); +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItems.add(reportItem); + metricFound = true; + } + if (metricType.contains("Total_Items_Investigations") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Investigations"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(4))); +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItems.add(reportItem); + metricFound = true; + } + if (metricType.contains("Total_Items_Requests") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Requests"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(3), null)); +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItems.add(reportItem); + metricFound = true; + } + // } +// +// //} + endC.setTime(postgresFormat.parse(rs.getString(2))); + endC.add(Calendar.MONTH, 1); + lastDate = postgresFormat.format(endC.getTime()); + //if (reportItem != null) { + //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); + } + } else { + st = connection.prepareStatement("WITH tpd as (select id, concat(type,'#-#',pid) type_id from " + statsDB + ".result_pids) " + + "SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views, " + + "us.result_id as resultid, rs.title as item, rs.year as yop, group_concat(distinct tpd.type_id,'#!#') as oid " + + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc, " + statsDB + ".result rs, " + + statsDB + ".result_oids ro, tpd " + + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id " + + "AND us.result_id=rs.id AND ro.id=us.result_id AND tpd.id=us.result_id " + + "GROUP BY ro.id, rc.type, rs.title, us.result_id, us.`date`, rs.year order by rc.type, us.`date` ASC;"); + st.setString(1, beginDateStr); + st.setString(2, endDateStr); + st.setString(3, repositoryIdentifier); + st.setString(4, dataType); + rs = st.executeQuery(); + + String result = ""; + String lastDate = ""; + COUNTER_Item_Usage reportItem = null; + + int ft_total = 0; + int abstr = 0; + + Calendar endCal = Calendar.getInstance(); + endCal.setTime(postgresFormat.parse(endDateStr)); + endCal.add(Calendar.MONTH, 1); + Date endDateForZeros = endCal.getTime(); + + lastDate = beginDateStr; + String datatype = ""; + List identifiers = null; + + while (rs.next()) { + Calendar endC = Calendar.getInstance(); + endC.setTime(postgresFormat.parse(rs.getString(2))); + endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// //iterate on data types + if (!datatype.equals(rs.getString(1))) { +// if (reportItem != null) { +// reportItems.add(reportItem); +// } +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + datatype = rs.getString(1); + } + boolean metricFound = false; + if (metricType.contains("Total_Items_Investigations") && metricType.contains("Total_Items_Requests") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Investigations|Total_Items_Requests"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); + } + + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(4), rs.getString(3))); + +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItems.add(reportItem); + metricFound = true; + } + if (metricType.contains("Total_Items_Investigations") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Investigations"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); + } + +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(4))); + reportItems.add(reportItem); + metricFound = true; + } + if (metricType.contains("Total_Items_Requests") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Requests"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + String[] typeIdentifierArray = identifiersAll[i].split("#-#"); + reportItem.addIdentifier(new COUNTER_Item_Identifiers(typeIdentifierArray[0], typeIdentifierArray[1])); + } + + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(3), null)); +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItems.add(reportItem); + metricFound = true; + } + // } +// +// //} + endC.setTime(postgresFormat.parse(rs.getString(2))); + endC.add(Calendar.MONTH, 1); + lastDate = postgresFormat.format(endC.getTime()); + //if (reportItem != null) { + //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); + } + } } -// else if (granularity.equalsIgnoreCase("monthly")) { -// if (dataType.equals("")) { -// st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " -// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type, us.`date` order by rc.type, us.`date` ASC;"); -// -// st.setString(1, beginDateStr); -// st.setString(2, endDateStr); -// st.setString(3, repositoryIdentifier); -// -// rs = st.executeQuery(); -// String result = ""; -// String lastDate = ""; -// COUNTER_Platform_Usage reportItem = null; -// -// int ft_total = 0; -// int abstr = 0; -// -// Calendar endCal = Calendar.getInstance(); -// endCal.setTime(postgresFormat.parse(endDateStr)); -// endCal.add(Calendar.MONTH, 1); -// Date endDateForZeros = endCal.getTime(); -// -// lastDate = beginDateStr; -// String datatype = ""; -// while (rs.next()) { -// Calendar endC = Calendar.getInstance(); -// endC.setTime(postgresFormat.parse(rs.getString(2))); -// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); -// //iterate on data types -// if (!datatype.equals(rs.getString(1))) { -// if (reportItem != null) { -// reportItems.add(reportItem); -// } -// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// datatype = rs.getString(1); -// } -// if (reportItem != null) { -// switch (metricType) { -// case (""): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), rs.getString(4))); -// break; -// -// case ("Total_Items_Investigations"): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), null, rs.getString(4))); -// break; -// -// case ("Total_Items_Requests"): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), null)); -// break; -// -// } -// -// } -// endC.setTime(postgresFormat.parse(rs.getString(2))); -// endC.add(Calendar.MONTH, 1); -// lastDate = postgresFormat.format(endC.getTime()); -// //if (reportItem != null) { -// //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); -// } -// //add last report item -// reportItems.add(reportItem); -// } else { -// st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " -// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id GROUP BY rc.type, us.`date` order by rc.type, us.`date` ASC;"); -// -// st.setString(1, beginDateStr); -// st.setString(2, endDateStr); -// st.setString(3, repositoryIdentifier); -// st.setString(4, dataType); -// -// rs = st.executeQuery(); -// String result = ""; -// String lastDate = ""; -// COUNTER_Platform_Usage reportItem = null; -// -// int ft_total = 0; -// int abstr = 0; -// -// Calendar endCal = Calendar.getInstance(); -// endCal.setTime(postgresFormat.parse(endDateStr)); -// endCal.add(Calendar.MONTH, 1); -// Date endDateForZeros = endCal.getTime(); -// -// lastDate = beginDateStr; -// String datatype = ""; -// while (rs.next()) { -// Calendar endC = Calendar.getInstance(); -// endC.setTime(postgresFormat.parse(rs.getString(2))); -// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); -// //iterate on data types -// if (!datatype.equals(rs.getString(1))) { -// if (reportItem != null) { -// reportItems.add(reportItem); -// } -// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// datatype = rs.getString(1); -// } -// if (reportItem != null) { -// switch (metricType) { -// case (""): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), rs.getString(4))); -// break; -// -// case ("Total_Items_Investigations"): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), null, rs.getString(4))); -// break; -// -// case ("Total_Items_Requests"): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), null)); -// break; -// -// } -// -// } -// endC.setTime(postgresFormat.parse(rs.getString(2))); -// endC.add(Calendar.MONTH, 1); -// lastDate = postgresFormat.format(endC.getTime()); -// //if (reportItem != null) { -// //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); -// } -// //add last report item -// reportItems.add(reportItem); -// } -// -// } - /* jedis.put(redis_key, "persistent", "false"); jedis.put(redis_key, "query", st.toString()); @@ -2021,222 +2150,378 @@ public class UsageStatsRepository { DbUtils.closeQuietly(st); DbUtils.closeQuietly(connection); } -// } else { -// try { -// connection = usageStatsDB.getConnection(); -// -// if (granularity.equalsIgnoreCase("totals")) { -// if (dataType.equals("")) { -// st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " -// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); -// -// st.setString(1, beginDateStr); -// st.setString(2, endDateStr); -// st.setString(3, repositoryIdentifier); -// -// rs = st.executeQuery(); -// COUNTER_Platform_Usage reportItem = null; -// -// switch (metricType) { -// case (""): -// while (rs.next()) { -// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); -// reportItems.add(reportItem); -// } -// break; -// case ("Total_Items_Investigations"): -// while (rs.next()) { -// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); -// reportItems.add(reportItem); -// } -// break; -// case ("Total_Items_Requests"): -// while (rs.next()) { -// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); -// reportItems.add(reportItem); -// } -// break; -// } -// } else { -// st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " -// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); -// -// st.setString(1, beginDateStr); -// st.setString(2, endDateStr); -// st.setString(3, repositoryIdentifier); -// st.setString(4, dataType); -// -// rs = st.executeQuery(); -// COUNTER_Platform_Usage reportItem = null; -// -// switch (metricType) { -// case (""): -// while (rs.next()) { -// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); -// reportItems.add(reportItem); -// } -// break; -// case ("Total_Items_Investigations"): -// while (rs.next()) { -// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); -// reportItems.add(reportItem); -// } -// break; -// case ("Total_Items_Requests"): -// while (rs.next()) { -// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); -// reportItems.add(reportItem); -// } -// break; -// } -// } -// -// } else if (granularity.equalsIgnoreCase("monthly")) { -// if (dataType.equals("")) { -// st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " -// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type, us.`date` order by rc.type, us.`date` ASC;"); -// -// st.setString(1, beginDateStr); -// st.setString(2, endDateStr); -// st.setString(3, repositoryIdentifier); -// -// rs = st.executeQuery(); -// String result = ""; -// String lastDate = ""; -// COUNTER_Platform_Usage reportItem = null; -// -// int ft_total = 0; -// int abstr = 0; -// -// Calendar endCal = Calendar.getInstance(); -// endCal.setTime(postgresFormat.parse(endDateStr)); -// endCal.add(Calendar.MONTH, 1); -// Date endDateForZeros = endCal.getTime(); -// -// lastDate = beginDateStr; -// String datatype = ""; -// while (rs.next()) { -// Calendar endC = Calendar.getInstance(); -// endC.setTime(postgresFormat.parse(rs.getString(2))); -// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); + } else { + try { + connection = usageStatsDB.getConnection(); + + if (granularity.equalsIgnoreCase("totals")) { + if (dataType.equals("")) { + st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views, " + + "us.result_id as resultid, rs.title as item, rs.year as yop, group_concat(distinct ro.oid,'#!#') as oid " + + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc, " + statsDB + ".result rs " + + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND us.result_id=? AND rc.id=us.result_id AND us.result_id=rs.id AND ro.id=us.result_id " + + "GROUP BY rc.type, rs.title, us.result_id, rs.title, rs.year order by rc.type ASC;"); + + st.setString(1, beginDateStr); + st.setString(2, endDateStr); + st.setString(3, repositoryIdentifier); + st.setString(4, itemIdentifier); + + rs = st.executeQuery(); + COUNTER_Item_Usage reportItem = null; + boolean metricFound = false; + + if (metricType.contains("Total_Items_Investigations") && metricType.contains("Total_Items_Requests") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Investigations|Total_Items_Requests"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); + reportItems.add(reportItem); + } + metricFound = true; + } + if (metricType.contains("Total_Items_Investigations") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Investigations"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); + reportItems.add(reportItem); + } + metricFound = true; + } + if (metricType.contains("Total_Items_Requests") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Requests"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); + reportItems.add(reportItem); + } + metricFound = true; + } + } else { + st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views, " + + "us.result_id as resultid, rs.title as item, rs.year as yop, group_concat(distinct ro.oid,'#!#') as oid " + + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc, " + statsDB + ".result rs, " + statsDB + ".result_oids ro " + + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND us.result_id=? AND rc.type=? AND rc.id=us.result_id " + + "AND us.result_id=rs.id AND ro.id=us.result_id GROUP BY ro.id, rc.type, rs.title, us.result_id, rs.year order by rc.type ASC;"); + + st.setString(1, beginDateStr); + st.setString(2, endDateStr); + st.setString(3, repositoryIdentifier); + st.setString(4, itemIdentifier); + st.setString(5, dataType); + + rs = st.executeQuery(); + COUNTER_Item_Usage reportItem = null; + boolean metricFound = false; + + if (metricType.contains("Total_Items_Investigations") && metricType.contains("Total_Items_Requests") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Investigations|Total_Items_Requests"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); + reportItems.add(reportItem); + } + metricFound = true; + } + + if (metricType.contains("Total_Items_Investigations") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Investigations"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); + reportItems.add(reportItem); + } + metricFound = true; + } + if (metricType.contains("Total_Items_Requests") && (metricFound == false)) { + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(rs.getString(5), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(6)), "Regular", "Total_Items_Requests"); + String[] identifiersAll = rs.getString(7).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); + reportItems.add(reportItem); + } + metricFound = true; + } + } + } else if (granularity.equalsIgnoreCase("monthly")) { + + if (dataType.equals("")) { + st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views, " + + "us.result_id as resultid, rs.title as item, rs.year as yop, group_concat(distinct ro.oid,'#!#') as oid " + + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc, " + statsDB + ".result rs, " + statsDB + ".result_oids ro " + + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND us.result_id=? AND rc.id=us.result_id AND us.result_id=rs.id AND ro.id=us.result_id GROUP BY ro.id, rc.type, rs.title, us.result_id, us.`date`, rs.year order by rc.type, us.`date` ASC;"); + + st.setString(1, beginDateStr); + st.setString(2, endDateStr); + st.setString(3, repositoryIdentifier); + st.setString(4, itemIdentifier); + + rs = st.executeQuery(); + String result = ""; + String lastDate = ""; + COUNTER_Item_Usage reportItem = null; + + int ft_total = 0; + int abstr = 0; + + Calendar endCal = Calendar.getInstance(); + endCal.setTime(postgresFormat.parse(endDateStr)); + endCal.add(Calendar.MONTH, 1); + Date endDateForZeros = endCal.getTime(); + + lastDate = beginDateStr; + String datatype = ""; + while (rs.next()) { + Calendar endC = Calendar.getInstance(); + endC.setTime(postgresFormat.parse(rs.getString(2))); + endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); // //iterate on data types -// if (!datatype.equals(rs.getString(1))) { + if (!datatype.equals(rs.getString(1))) { // if (reportItem != null) { // reportItems.add(reportItem); // } // reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// datatype = rs.getString(1); -// } -// if (reportItem != null) { -// switch (metricType) { -// case (""): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), rs.getString(4))); -// break; -// -// case ("Total_Items_Investigations"): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), null, rs.getString(4))); -// break; -// -// case ("Total_Items_Requests"): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), null)); -// break; -// + datatype = rs.getString(1); + } + boolean metricFound = false; + if (metricType.contains("Total_Items_Investigations") && metricType.contains("Total_Items_Requests") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Investigations|Total_Items_Requests"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(4), rs.getString(3))); +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); // } + reportItems.add(reportItem); + metricFound = true; + } + if (metricType.contains("Total_Items_Investigations") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Investigations"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(4))); +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItems.add(reportItem); + metricFound = true; + } + if (metricType.contains("Total_Items_Requests") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Requests"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(3), null)); +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItems.add(reportItem); + metricFound = true; + } + // } // -// } -// endC.setTime(postgresFormat.parse(rs.getString(2))); -// endC.add(Calendar.MONTH, 1); -// lastDate = postgresFormat.format(endC.getTime()); -// //if (reportItem != null) { -// //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); -// } -// //add last report item -// reportItems.add(reportItem); -// } else { -// st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " -// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id GROUP BY rc.type, us.`date` order by rc.type, us.`date` ASC;"); -// -// st.setString(1, beginDateStr); -// st.setString(2, endDateStr); -// st.setString(3, repositoryIdentifier); -// st.setString(4, dataType); -// -// rs = st.executeQuery(); -// String result = ""; -// String lastDate = ""; -// COUNTER_Platform_Usage reportItem = null; -// -// int ft_total = 0; -// int abstr = 0; -// -// Calendar endCal = Calendar.getInstance(); -// endCal.setTime(postgresFormat.parse(endDateStr)); -// endCal.add(Calendar.MONTH, 1); -// Date endDateForZeros = endCal.getTime(); -// -// lastDate = beginDateStr; -// String datatype = ""; -// while (rs.next()) { -// Calendar endC = Calendar.getInstance(); -// endC.setTime(postgresFormat.parse(rs.getString(2))); -// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// //} + endC.setTime(postgresFormat.parse(rs.getString(2))); + endC.add(Calendar.MONTH, 1); + lastDate = postgresFormat.format(endC.getTime()); + //if (reportItem != null) { + //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); + } + } else { + st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views, " + + "us.result_id as resultid, rs.title as item, rs.year as yop, group_concat(distinct ro.oid,'#!#') as oid " + + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc, " + statsDB + ".result rs, " + statsDB + ".result_oids ro " + + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND us.result_id=? AND rc.type=? AND rc.id=us.result_id AND us.result_id=rs.id AND ro.id=us.result_id GROUP BY ro.id, rc.type, rs.title, us.result_id, us.`date`, rs.year order by rc.type, us.`date` ASC;"); + st.setString(1, beginDateStr); + st.setString(2, endDateStr); + st.setString(3, repositoryIdentifier); + st.setString(4, itemIdentifier); + st.setString(5, dataType); + + rs = st.executeQuery(); + String result = ""; + String lastDate = ""; + COUNTER_Item_Usage reportItem = null; + + int ft_total = 0; + int abstr = 0; + + Calendar endCal = Calendar.getInstance(); + endCal.setTime(postgresFormat.parse(endDateStr)); + endCal.add(Calendar.MONTH, 1); + Date endDateForZeros = endCal.getTime(); + + lastDate = beginDateStr; + String datatype = ""; + List identifiers = null; + + while (rs.next()) { + Calendar endC = Calendar.getInstance(); + endC.setTime(postgresFormat.parse(rs.getString(2))); + endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); // //iterate on data types -// if (!datatype.equals(rs.getString(1))) { + if (!datatype.equals(rs.getString(1))) { // if (reportItem != null) { // reportItems.add(reportItem); // } // reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); -// datatype = rs.getString(1); -// } -// if (reportItem != null) { -// switch (metricType) { -// case (""): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), rs.getString(4))); -// break; -// -// case ("Total_Items_Investigations"): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), null, rs.getString(4))); -// break; -// -// case ("Total_Items_Requests"): -// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), null)); -// break; -// + datatype = rs.getString(1); + } + boolean metricFound = false; + if (metricType.contains("Total_Items_Investigations") && metricType.contains("Total_Items_Requests") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Investigations|Total_Items_Requests"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(4), rs.getString(3))); + +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); // } + reportItems.add(reportItem); + metricFound = true; + } + if (metricType.contains("Total_Items_Investigations") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Investigations"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(4))); + reportItems.add(reportItem); + metricFound = true; + } + if (metricType.contains("Total_Items_Requests") && (metricFound == false)) { + reportItem = new COUNTER_Item_Usage(rs.getString(6), "OpenAIRE", platform, rs.getString(1), Integer.toString(rs.getInt(7)), "Regular", "Total_Items_Requests"); + String[] identifiersAll = rs.getString(8).split("#!#"); + for (int i = 0; i < identifiersAll.length; i++) { + if (identifiersAll[i].indexOf("10.") == 0) { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", identifiersAll[i])); + } else { + reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", identifiersAll[i])); + } + } + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(3), null)); +// if (rs.getString(5).indexOf("doi") >= 0) { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("DOI", rs.getString(5))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifiers("Proprietary", rs.getString(5))); +// } + reportItems.add(reportItem); + metricFound = true; + } + // } // -// } -// endC.setTime(postgresFormat.parse(rs.getString(2))); -// endC.add(Calendar.MONTH, 1); -// lastDate = postgresFormat.format(endC.getTime()); -// //if (reportItem != null) { -// //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); -// } -// //add last report item -// reportItems.add(reportItem); -// } - - //} - - /* +// //} + endC.setTime(postgresFormat.parse(rs.getString(2))); + endC.add(Calendar.MONTH, 1); + lastDate = postgresFormat.format(endC.getTime()); + //if (reportItem != null) { + //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); + } + } + } + /* jedis.put(redis_key, "persistent", "false"); jedis.put(redis_key, "query", st.toString()); jedis.put(redis_key, "result", toJson(reportItems)); jedis.put(redis_key, "fetchMode", "3"); - */ -// } catch (Exception e) { -// log.error("Batch Item Report failed: ", e); -// } -// + */ + } catch (Exception e) { + log.error("Batch Item Report failed: ", e); + } finally { + DbUtils.closeQuietly(rs); + DbUtils.closeQuietly(st); + DbUtils.closeQuietly(connection); + } } } - //} - //} private void fillWithZeros(Date from, Date to, COUNTER_Platform_Usage reportItem) { SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); diff --git a/src/main/java/eu/dnetlib/usagestats/services/SushiLiteService.java b/src/main/java/eu/dnetlib/usagestats/services/SushiLiteService.java index f8bdb4c..d720bf1 100755 --- a/src/main/java/eu/dnetlib/usagestats/services/SushiLiteService.java +++ b/src/main/java/eu/dnetlib/usagestats/services/SushiLiteService.java @@ -5,7 +5,9 @@ import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Platform_Report; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Title_Report; import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper; import eu.dnetlib.usagestats.sushilite.domain.ReportStatus; +import java.sql.SQLException; import java.util.ArrayList; +import java.util.List; public interface SushiLiteService { @@ -29,7 +31,7 @@ public interface SushiLiteService { COUNTER_Platform_Report buildReportPR_P1(String customerID, String repositoryIdentifier, String beginDate,String endDate); String displayReportPR_P1(String customerID, String repositoryIdentifier, String beginDate, String endDate); - COUNTER_Item_Report buildReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); - String displayReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); + COUNTER_Item_Report buildReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate,String endDate, List metricType, String dataType,String granularity) throws Exception; + String displayReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate,String endDate, List metricType, String dataType,String granularity); } diff --git a/src/main/java/eu/dnetlib/usagestats/services/SushiLiteServiceImpl.java b/src/main/java/eu/dnetlib/usagestats/services/SushiLiteServiceImpl.java index 7f76102..d4b15b6 100755 --- a/src/main/java/eu/dnetlib/usagestats/services/SushiLiteServiceImpl.java +++ b/src/main/java/eu/dnetlib/usagestats/services/SushiLiteServiceImpl.java @@ -16,6 +16,7 @@ import eu.dnetlib.usagestats.sushilite.domain.ReportResponse; import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper; import eu.dnetlib.usagestats.sushilite.domain.ReportStatus; import eu.dnetlib.usagestats.sushilite.domain.ReportSupported; +import java.sql.SQLException; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; @@ -462,7 +463,7 @@ public class SushiLiteServiceImpl implements SushiLiteService { @Override public COUNTER_Item_Report buildReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate, - String endDate, String metricType, String dataType, String granularity) { + String endDate, List metricType, String dataType, String granularity) throws Exception { ZonedDateTime dateTime = ZonedDateTime.now(); // Gets the current date and time, with your default time-zone DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); @@ -570,7 +571,7 @@ public class SushiLiteServiceImpl implements SushiLiteService { // reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); // } // } else if (!repoid.equals("")) { - usageStatsRepository.executeBatchItemsIR(reportItems, repoid, itemIdentifier, beginDateParsed, endDateParsed, metricType, "Article", granularity); + usageStatsRepository.executeBatchItemsIR(reportItems, repoid, itemIdentifier, beginDateParsed, endDateParsed, metricType, dataType, granularity); if (reportItems.isEmpty()) { reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); @@ -653,6 +654,8 @@ public class SushiLiteServiceImpl implements SushiLiteService { return reportResponse; } + + // @Override // public COUNTER_Title_Report buildReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate, // String endDate, String metricType, String dataType, String granularity) { @@ -761,12 +764,12 @@ public class SushiLiteServiceImpl implements SushiLiteService { @Override public String displayReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate, - String endDate, String metricType, String dataType, String granularity) { + String endDate, List metricType, String dataType, String granularity) { ObjectMapper objectMapper = new ObjectMapper(); log.info((beginDate + " " + endDate)); try { return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReportIR(customerID, repositoryIdentifier, itemIdentifier, beginDate, endDate, metricType, dataType, granularity)) + "
"; - } catch (JsonProcessingException ex) { + } catch (Exception ex) { java.util.logging.Logger.getLogger(SushiLiteServiceImpl.class.getName()).log(Level.SEVERE, null, ex); } return null;