diff --git a/Application/pom.xml b/Application/pom.xml index 82ec8a4..17d9944 100644 --- a/Application/pom.xml +++ b/Application/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 gr.uoa.di.madgik @@ -11,9 +11,8 @@ org.springframework.boot spring-boot-starter-parent - - 2.3.1.RELEASE - + 2.3.1.RELEASE + @@ -25,7 +24,7 @@ org.springframework.boot spring-boot-starter-actuator - + ch.qos.logback logback-classic @@ -34,10 +33,10 @@ ch.qos.logback logback-core - - org.apache.logging.log4j - log4j-to-slf4j - + + org.apache.logging.log4j + log4j-to-slf4j + @@ -49,11 +48,11 @@ spring-boot-starter-test test - - io.micrometer - micrometer-registry-prometheus - runtime - + + io.micrometer + micrometer-registry-prometheus + runtime + diff --git a/Application/src/main/java/gr/uoa/di/madgik/StatisticChartGenerator_App/appBoot.java b/Application/src/main/java/gr/uoa/di/madgik/StatisticChartGenerator_App/appBoot.java index 14cd065..d4363a4 100644 --- a/Application/src/main/java/gr/uoa/di/madgik/StatisticChartGenerator_App/appBoot.java +++ b/Application/src/main/java/gr/uoa/di/madgik/StatisticChartGenerator_App/appBoot.java @@ -11,7 +11,6 @@ import java.util.Properties; -@ComponentScan(basePackages = {"gr/uoa/di/madgik/ChartDataFormatter", "gr/uoa/di/madgik/statstool"}) @SpringBootApplication(scanBasePackages = {"gr/uoa/di/madgik/ChartDataFormatter", "gr/uoa/di/madgik/statstool"}) @PropertySource(value="classpath:application.yml", factory = YamlPropertySourceFactory.class) public class appBoot extends SpringBootServletInitializer { diff --git a/ChartDataFormatter/pom.xml b/ChartDataFormatter/pom.xml index d149d22..4ef7508 100644 --- a/ChartDataFormatter/pom.xml +++ b/ChartDataFormatter/pom.xml @@ -1,65 +1,71 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - gr.uoa.di.madgik - Statistic-chart-generator-ChartDataFormatter - 0.0.1-SNAPSHOT - jar + gr.uoa.di.madgik + Statistic-chart-generator-ChartDataFormatter + 0.0.1-SNAPSHOT + jar - - org.springframework.boot - spring-boot-starter-parent - - 2.3.1.RELEASE - - + + org.springframework.boot + spring-boot-starter-parent + 2.3.1.RELEASE + + - - UTF-8 - 1.8 - 7.0.68 - + + UTF-8 + 1.8 + 7.0.68 + - - - org.springframework.boot - spring-boot-starter-web - + + + org.springframework.boot + spring-boot-starter-web + org.springframework.boot spring-boot-starter-logging - - - org.springframework.boot - spring-boot-starter-test - test - - - com.jayway.jsonpath - json-path - test - - - org.springframework.boot - spring-boot-starter-thymeleaf - - + + + org.apache.avro + avro + 1.11.3 + + - - gr.uoa.di.madgik - Statistic-chart-generator-DBAccess - ${project.version} - - + + gr.uoa.di.madgik + Statistic-chart-generator-DBAccess + ${project.version} + + diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/DataFormatter.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/DataFormatter.java index c69a8c9..781906e 100644 --- a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/DataFormatter.java +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/DataFormatter.java @@ -29,9 +29,9 @@ public List getXAxisCategories(List dbAccessResults, boolean sor if (result.getRows().isEmpty()) continue; - for (List row : result.getRows()) { + for (List row : result.getRows()) { // Get the first groupBy of the result row - String xValue = row.get(1); + String xValue = String.valueOf(row.get(1)); //Find a xAxis value and register it in the xAxis_categories if (!xAxis_categories.contains(xValue)) diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/EChartsDataFormatter.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/EChartsDataFormatter.java index cc3b803..2f625b8 100644 --- a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/EChartsDataFormatter.java +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/EChartsDataFormatter.java @@ -12,6 +12,8 @@ import java.util.*; +import static gr.uoa.di.madgik.ChartDataFormatter.Utility.NumberUtils.parseValue; + /** * Extends DataFormatter handling the formation of data returned from DBAccess @@ -75,11 +77,11 @@ public EChartsJsonResponse toJsonResponse(List dbAccessResults, Object.. namesToTypes.put(chartName, chartsType.get(i)); } - for (List row : result.getRows()) { + for (List row : result.getRows()) { if (row.size() == 3) { // The value of the 2nd Group BY - String xValueB = row.get(2); + String xValueB = String.valueOf(row.get(2)); if (!namesToDataSeries.containsKey(xValueB)) { namesToDataSeries.put(xValueB, new HashMap<>()); namesToTypes.put(xValueB, chartsType.get(i)); @@ -89,8 +91,8 @@ public EChartsJsonResponse toJsonResponse(List dbAccessResults, Object.. } // Get the first groupBy of the result row - String yValue = row.get(0); - String xValue = row.get(1); + String yValue = String.valueOf(row.get(0)); + String xValue = String.valueOf(row.get(1)); if (XtoYMapping != null) XtoYMapping.put(xValue, yValue); @@ -123,12 +125,8 @@ public EChartsJsonResponse toJsonResponse(List dbAccessResults, Object.. if (XtoYMapping.containsKey(xValue)) { String yValue = XtoYMapping.get(xValue); - if (yValue == null) - yValuesArray.add(null); - else if (yValue.contains(".")) - yValuesArray.add(Float.parseFloat(yValue)); - else - yValuesArray.add(Integer.parseInt(yValue)); + yValuesArray.add(parseValue(yValue)); + } else yValuesArray.add(null); } @@ -150,12 +148,8 @@ else if (yValue.contains(".")) if (XtoYMapping.containsKey(xValue)) { String yValue = XtoYMapping.get(xValue); - if (yValue == null) - yObjectValuesArray.add(new EChartsDataObject(xValue, null)); - else if (yValue.contains(".")) - yObjectValuesArray.add(new EChartsDataObject(xValue, Float.parseFloat(yValue))); - else - yObjectValuesArray.add(new EChartsDataObject(xValue, Integer.parseInt(yValue))); + yObjectValuesArray.add(new EChartsDataObject(xValue, parseValue(yValue))); + } else yObjectValuesArray.add(new EChartsDataObject(xValue, null)); } @@ -217,42 +211,34 @@ private EChartsJsonResponse ECSingleGroupBy(Result result, SupportedChartTypes c case line: case treemap: ArrayList yValuesArray = new ArrayList<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { - String xValue = row.get(1); + String xValue = String.valueOf(row.get(1)); if (!xAxis_categories.containsKey(xValue)) xAxis_categories.put(xValue, xAxis_categories.size()); // I assume that always the first value of the row is for the Y value - String yValue = row.get(0); - if(yValue == null) - yValuesArray.add(null); - else if (yValue.contains(".")) - yValuesArray.add(Float.parseFloat(yValue)); - else - yValuesArray.add(Integer.parseInt(yValue)); + String yValue = String.valueOf(row.get(0)); + yValuesArray.add(parseValue(yValue)); + } dataSeries.add(new ArrayOfValues(yValuesArray)); break; case pie: ArrayList yObjectValuesArray = new ArrayList<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { - String xValue = row.get(1); + String xValue = String.valueOf(row.get(1)); if (!xAxis_categories.containsKey(xValue)) xAxis_categories.put(xValue, xAxis_categories.size()); // I assume that always the first value of the row is for the Y value - String yValue = row.get(0); - if(yValue == null) - yObjectValuesArray.add(new EChartsDataObject(xValue , null)); - else if (yValue.contains(".")) - yObjectValuesArray.add(new EChartsDataObject(xValue , Float.parseFloat(yValue))); - else - yObjectValuesArray.add(new EChartsDataObject(xValue ,Integer.parseInt(yValue))); + String yValue = String.valueOf(row.get(0)); + yObjectValuesArray.add(new EChartsDataObject(xValue, parseValue(yValue))); + } dataSeries.add(new ArrayOfEChartDataObjects(yObjectValuesArray)); break; @@ -280,13 +266,13 @@ private EChartsJsonResponse ECDoubleGroupBy(Result result, SupportedChartTypes c ArrayList dataSeries = new ArrayList<>(); ArrayList dataSeriesTypes = new ArrayList<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { // Create a map with the unique values for the group by - String groupByValue = row.get(2); - String xValueA = row.get(1); + String groupByValue = String.valueOf(row.get(2)); + String xValueA = String.valueOf(row.get(1)); // I assume that always the first value of the row is for the Y value - String yValue = row.get(0); + String yValue = String.valueOf(row.get(0)); if (!groupByMap.containsKey(groupByValue)) groupByMap.put(groupByValue, new HashMap<>()); @@ -313,13 +299,8 @@ private EChartsJsonResponse ECDoubleGroupBy(Result result, SupportedChartTypes c if (XValueToYValueMapping.containsKey(xValue)) { String yValue = XValueToYValueMapping.get(xValue); + yValuesArray.add(parseValue(yValue)); - if (yValue == null) - yValuesArray.add(null); - else if (yValue.contains(".")) - yValuesArray.add(Float.parseFloat(yValue)); - else - yValuesArray.add(Integer.parseInt(yValue)); } else yValuesArray.add(null); @@ -347,25 +328,18 @@ else if (yValue.contains(".")) HashMap XValueToYValueMapping = groupByMap.get(groupByX); - Float pieSliceSum = new Float(0); + float pieSliceSum = 0; ArrayList drillDownSliceValuesArray = new ArrayList<>(); for (String xValue : xAxis_categories.keySet()) { String yValue = XValueToYValueMapping.get(xValue); - - if (yValue == null) - drillDownSliceValuesArray.add(new EChartsDataObject(xValue, null)); - else if (yValue.contains(".")) { - Float value = Float.parseFloat(yValue); - drillDownSliceValuesArray.add(new EChartsDataObject(xValue, value)); - pieSliceSum += value; - } - else { - Integer value = Integer.parseInt(yValue); - drillDownSliceValuesArray.add(new EChartsDataObject(xValue, value)); - pieSliceSum += value; + Number value = parseValue(yValue); + drillDownSliceValuesArray.add(new EChartsDataObject(xValue, value)); + if (value != null) { + pieSliceSum += value.floatValue(); } + } drillDownArray.add(new ArrayOfEChartDataObjects(drillDownSliceValuesArray)); @@ -415,13 +389,13 @@ private EChartsJsonResponse ECGraph(Result result, boolean ignoreNodeWeight, Sup { // The HashMap will help us find the fromNode value HashMap nodeToValueMap = new HashMap<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { // We assume the node and edge values are Integers - String fromNode = row.get(0); - String toNode = row.get(1); - Number edgeWeight = Integer.parseInt(row.get(2)); + String fromNode = String.valueOf(row.get(0)); + String toNode = String.valueOf(row.get(1)); + Number edgeWeight = Integer.parseInt(String.valueOf(row.get(2))); links.add(new EChartsGraphLink(fromNode, toNode, edgeWeight)); @@ -442,14 +416,14 @@ private EChartsJsonResponse ECGraph(Result result, boolean ignoreNodeWeight, Sup // The HashMap will help us find the fromNode value HashMap nodeToValueMap = new HashMap<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { // We assume the node and edge values are Integers - String fromNode = row.get(0); - Number fromNodeValue = Integer.parseInt(row.get(1)); - String toNode = row.get(2); - Number edgeWeight = Integer.parseInt(row.get(3)); + String fromNode = String.valueOf(row.get(0)); + Number fromNodeValue = Integer.parseInt(String.valueOf(row.get(1))); + String toNode = String.valueOf(row.get(2)); + Number edgeWeight = Integer.parseInt(String.valueOf(row.get(3))); links.add(new EChartsGraphLink(fromNode, toNode, edgeWeight)); diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/GoogleChartsDataFormatter.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/GoogleChartsDataFormatter.java index b8c043a..1932c3e 100644 --- a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/GoogleChartsDataFormatter.java +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/GoogleChartsDataFormatter.java @@ -2,14 +2,20 @@ import gr.uoa.di.madgik.ChartDataFormatter.JsonRepresentation.ResponseBody.GoogleChartsJsonResponse; import gr.uoa.di.madgik.statstool.domain.Result; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; + +import static gr.uoa.di.madgik.ChartDataFormatter.Utility.NumberUtils.parseValue; /** * Extends DataFormatter handling the formation of data returned from DBAccess * to a format convenient for GoogleCharts library. + * * @see DataFormatter */ public class GoogleChartsDataFormatter extends DataFormatter { @@ -32,7 +38,7 @@ public GoogleChartsJsonResponse toJsonResponse(List dbAccessResults, Obj List chartTypes = (List) args[0]; List chartNames = (List) args[1]; - if(dbAccessResults.size() == 1 && chartNames.size() == 1) + if (dbAccessResults.size() == 1 && chartNames.size() == 1) return singleToGoogleChartsJsonResponse(dbAccessResults.get(0), chartNames.get(0), chartTypes.get(0)); List> formattedDataTable = new ArrayList<>(); @@ -44,30 +50,30 @@ public GoogleChartsJsonResponse toJsonResponse(List dbAccessResults, Obj HashMap namesToTypes = new HashMap<>(); - for( int i=0; i < dbAccessResults.size(); i++ ){ + for (int i = 0; i < dbAccessResults.size(); i++) { Result result = dbAccessResults.get(i); if (result.getRows().isEmpty()) continue; - if( result.getRows().get(0).size() != 2 && result.getRows().get(0).size() != 3) + if (result.getRows().get(0).size() != 2 && result.getRows().get(0).size() != 3) throw new DataFormationException("Unexpected Result Row size of: " + result.getRows().get(0).size()); HashMap XtoYMapping = null; - if(result.getRows().get(0).size() == 2) { + if (result.getRows().get(0).size() == 2) { XtoYMapping = new HashMap<>(); - String chartName = chartNames.get(i) == null ? "Series " + (i+1) : chartNames.get(i); + String chartName = chartNames.get(i) == null ? "Series " + (i + 1) : chartNames.get(i); namesToDataSeries.put(chartName, XtoYMapping); namesToTypes.put(chartName, chartTypes.get(i)); } - for (List row : result.getRows()) { + for (List row : result.getRows()) { - if(row.size() == 3){ + if (row.size() == 3) { // The value of the 2nd Group BY - String xValueB = row.get(2); + String xValueB = String.valueOf(row.get(2)); if (!namesToDataSeries.containsKey(xValueB)) { namesToDataSeries.put(xValueB, new HashMap<>()); namesToTypes.put(xValueB, chartTypes.get(i)); @@ -77,10 +83,10 @@ public GoogleChartsJsonResponse toJsonResponse(List dbAccessResults, Obj } // Get the first groupBy of the result row - String yValue = row.get(0); - String xValue = row.get(1); + String yValue = String.valueOf(row.get(0)); + String xValue = String.valueOf(row.get(1)); - if(XtoYMapping != null) + if (XtoYMapping != null) XtoYMapping.put(xValue, yValue); else throw new DataFormationException("XtoYMapping HashMap is NULL"); @@ -102,10 +108,10 @@ public GoogleChartsJsonResponse toJsonResponse(List dbAccessResults, Obj ArrayList rowValuesArray = new ArrayList<>(); rowValuesArray.add(xValue); - for (String dataSeriesName: dataSeriesNames) { + for (String dataSeriesName : dataSeriesNames) { HashMap XtoYMapping = namesToDataSeries.get(dataSeriesName); - if(dataSeriesTypes.size() < dataSeriesNames.size()) { + if (dataSeriesTypes.size() < dataSeriesNames.size()) { SupportedChartTypes chartType = namesToTypes.get(dataSeriesName); switch (chartType) { @@ -128,12 +134,8 @@ public GoogleChartsJsonResponse toJsonResponse(List dbAccessResults, Obj if (XtoYMapping.containsKey(xValue)) { String yValue = XtoYMapping.get(xValue); - if(yValue == null) - rowValuesArray.add(null); - else if (yValue.contains(".")) - rowValuesArray.add(Float.parseFloat(yValue)); - else - rowValuesArray.add(Integer.parseInt(yValue)); + rowValuesArray.add(parseValue(yValue)); + } else rowValuesArray.add(null); } @@ -151,37 +153,32 @@ private List getXAxisCategories(List dbAccessResults) { private GoogleChartsJsonResponse singleToGoogleChartsJsonResponse(Result result, String chartName, SupportedChartTypes chartType) throws DataFormationException { //There are no Results - if(result.getRows().isEmpty()) + if (result.getRows().isEmpty()) return singleGCSingleGroupBy(result, chartName); - if(result.getRows().get(0).size() == 2) + if (result.getRows().get(0).size() == 2) return singleGCSingleGroupBy(result, chartName); - else if(result.getRows().get(0).size() == 3) + else if (result.getRows().get(0).size() == 3) return singleHCDoubleGroupBy(result, chartType); else throw new DataFormationException("Unexpected Result Row size of: " + result.getRows().get(0).size()); } - private GoogleChartsJsonResponse singleGCSingleGroupBy(Result result, String chartName){ + private GoogleChartsJsonResponse singleGCSingleGroupBy(Result result, String chartName) { List> formattedDataTable = new ArrayList<>(); ArrayList headerValuesArray = new ArrayList<>(); headerValuesArray.add(null); headerValuesArray.add(chartName); - for (List row : result.getRows()) { + for (List row : result.getRows()) { ArrayList valuesArray = new ArrayList<>(); - String yValue = row.get(0); - String xValue = row.get(1); + String yValue = String.valueOf(row.get(0)); + String xValue = String.valueOf(row.get(1)); valuesArray.add(xValue); - if(yValue == null) - valuesArray.add(null); - else if( yValue.contains(".")) - valuesArray.add(Float.parseFloat(yValue)); - else - valuesArray.add(Integer.parseInt(yValue)); + valuesArray.add(parseValue(yValue)); formattedDataTable.add(valuesArray); } @@ -189,17 +186,17 @@ else if( yValue.contains(".")) return new GoogleChartsJsonResponse(formattedDataTable, headerValuesArray, null); } - private GoogleChartsJsonResponse singleHCDoubleGroupBy(Result result, SupportedChartTypes chartType){ + private GoogleChartsJsonResponse singleHCDoubleGroupBy(Result result, SupportedChartTypes chartType) { LinkedHashMap xAxis_categories = new LinkedHashMap<>(); LinkedHashMap> groupByMap = new LinkedHashMap<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { // Create a map with the unique values for the group by - String groupByValue = row.get(2); - String xValueA = row.get(1); + String groupByValue = String.valueOf(row.get(2)); + String xValueA = String.valueOf(row.get(1)); // I assume that always the first value of the row is for the Y value - String yValue = row.get(0); + String yValue = String.valueOf(row.get(0)); if (!groupByMap.containsKey(groupByValue)) groupByMap.put(groupByValue, new HashMap<>()); @@ -225,15 +222,9 @@ private GoogleChartsJsonResponse singleHCDoubleGroupBy(Result result, SupportedC if (XValueToYValueMapping.containsKey(xValue)) { String yValue = XValueToYValueMapping.get(xValue); + valuesArray.add(parseValue(yValue)); - if (yValue == null) - valuesArray.add(null); - else if (yValue.contains(".")) - valuesArray.add(Float.parseFloat(yValue)); - else - valuesArray.add(Integer.parseInt(yValue)); - } - else + } else valuesArray.add(null); } diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/HighChartsDataFormatter.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/HighChartsDataFormatter.java index 825e152..8605b3c 100644 --- a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/HighChartsDataFormatter.java +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/HighChartsDataFormatter.java @@ -3,18 +3,21 @@ import gr.uoa.di.madgik.ChartDataFormatter.JsonRepresentation.HighChartsDataRepresentation.*; import gr.uoa.di.madgik.ChartDataFormatter.JsonRepresentation.ResponseBody.HighChartsJsonResponse; import gr.uoa.di.madgik.statstool.domain.Result; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.*; +import static gr.uoa.di.madgik.ChartDataFormatter.Utility.NumberUtils.parseValue; + /** * Extends DataFormatter handling the formation of data returned from DBAccess * to a format convenient for HighCharts library. + * * @see DataFormatter */ -public class HighChartsDataFormatter extends DataFormatter{ +public class HighChartsDataFormatter extends DataFormatter { private final Logger log = LogManager.getLogger(this.getClass()); @@ -59,22 +62,21 @@ private HighChartsJsonResponse singleToHighChartsJsonResponse(Result result, String chartName) throws DataFormationException { //There are no Results - if(result.getRows().isEmpty()) + if (result.getRows().isEmpty()) return HCSingleGroupBy(result, chartType, chartName); - + //If there are results handle them by row size - switch(result.getRows().get(0).size()) - { + switch (result.getRows().get(0).size()) { case 2: return HCSingleGroupBy(result, chartType, chartName); case 3: - if(chartType == SupportedChartTypes.dependencywheel || chartType == SupportedChartTypes.sankey) + if (chartType == SupportedChartTypes.dependencywheel || chartType == SupportedChartTypes.sankey) return HCGraph(result, false, chartType, chartName); return HCDoubleGroupBy(result, chartType); case 4: - if(chartType == SupportedChartTypes.dependencywheel || chartType == SupportedChartTypes.sankey) + if (chartType == SupportedChartTypes.dependencywheel || chartType == SupportedChartTypes.sankey) return HCGraph(result, true, chartType, chartName); default: throw new DataFormationException("Unexpected Result Row size of: " + result.getRows().get(0).size()); @@ -82,9 +84,9 @@ private HighChartsJsonResponse singleToHighChartsJsonResponse(Result result, } - private HighChartsJsonResponse HCSingleGroupBy(Result result, SupportedChartTypes chartType, String chartName){ + private HighChartsJsonResponse HCSingleGroupBy(Result result, SupportedChartTypes chartType, String chartName) { - LinkedHashMap xAxis_categories = new LinkedHashMap<>(); + LinkedHashMap xAxis_categories = new LinkedHashMap<>(); ArrayList dataSeries = new ArrayList<>(); switch (chartType) { @@ -94,42 +96,33 @@ private HighChartsJsonResponse HCSingleGroupBy(Result result, SupportedChartType case line: case treemap: ArrayList yValuesArray = new ArrayList<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { - String xValue = row.get(1); + String xValue = String.valueOf(row.get(1)); if (!xAxis_categories.containsKey(xValue)) xAxis_categories.put(xValue, xAxis_categories.size()); // I assume that always the first value of the row is for the Y value - String yValue = row.get(0); - if(yValue == null) - yValuesArray.add(null); - else if (yValue.contains(".")) - yValuesArray.add(Float.parseFloat(yValue)); - else - yValuesArray.add(Integer.parseInt(yValue)); + String yValue = String.valueOf(row.get(0)); + yValuesArray.add(parseValue(yValue)); + } dataSeries.add(new ArrayOfValues(yValuesArray)); break; case pie: ArrayList yObjectValuesArray = new ArrayList<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { - String xValue = row.get(1); + String xValue = String.valueOf(row.get(1)); if (!xAxis_categories.containsKey(xValue)) xAxis_categories.put(xValue, xAxis_categories.size()); // I assume that always the first value of the row is for the Y value - String yValue = row.get(0); - if(yValue == null) - yObjectValuesArray.add(new DataObject(xValue , null)); - else if (yValue.contains(".")) - yObjectValuesArray.add(new DataObject(xValue , Float.parseFloat(yValue))); - else - yObjectValuesArray.add(new DataObject(xValue ,Integer.parseInt(yValue))); + String yValue = String.valueOf(row.get(0)); + yObjectValuesArray.add(new DataObject(xValue, parseValue(yValue))); } dataSeries.add(new ArrayOfDataObjects(yObjectValuesArray)); break; @@ -143,23 +136,23 @@ else if (yValue.contains(".")) ArrayList chartTypes = new ArrayList<>(); chartTypes.add(chartType.name()); - return new HighChartsJsonResponse(dataSeries,new ArrayList<>(xAxis_categories.keySet()), chartNames, chartTypes); + return new HighChartsJsonResponse(dataSeries, new ArrayList<>(xAxis_categories.keySet()), chartNames, chartTypes); } - private HighChartsJsonResponse HCDoubleGroupBy(Result result, SupportedChartTypes chartType){ + private HighChartsJsonResponse HCDoubleGroupBy(Result result, SupportedChartTypes chartType) { LinkedHashMap xAxis_categories = new LinkedHashMap<>(); LinkedHashMap> groupByMap = new LinkedHashMap<>(); ArrayList dataSeries = new ArrayList<>(); ArrayList dataSeriesTypes = new ArrayList<>(); - for (List row : result.getRows()) { + for (List row : result.getRows()) { // Create a map with the unique values for the group by - String groupByValue = row.get(2); - String xValueA = row.get(1); + String groupByValue = String.valueOf(row.get(2)); + String xValueA = String.valueOf(row.get(1)); // I assume that always the first value of the row is for the Y value - String yValue = row.get(0); + String yValue = String.valueOf(row.get(0)); if (!groupByMap.containsKey(groupByValue)) groupByMap.put(groupByValue, new HashMap<>()); @@ -186,15 +179,9 @@ private HighChartsJsonResponse HCDoubleGroupBy(Result result, SupportedChartType if (XValueToYValueMapping.containsKey(xValue)) { String yValue = XValueToYValueMapping.get(xValue); + yValuesArray.add(parseValue(yValue)); - if (yValue == null) - yValuesArray.add(null); - else if (yValue.contains(".")) - yValuesArray.add(Float.parseFloat(yValue)); - else - yValuesArray.add(Integer.parseInt(yValue)); - } - else + } else yValuesArray.add(null); } dataSeries.add(new ArrayOfValues(yValuesArray)); @@ -213,25 +200,18 @@ else if (yValue.contains(".")) HashMap XValueToYValueMapping = groupByMap.get(groupByX); - Float pieSliceSum = new Float(0); + float pieSliceSum = 0; ArrayList drillDownSliceValuesArray = new ArrayList<>(); for (String xValue : xAxis_categories.keySet()) { String yValue = XValueToYValueMapping.get(xValue); - - if (yValue == null) - drillDownSliceValuesArray.add(new DataObject(xValue, null)); - else if (yValue.contains(".")) { - Float value = Float.parseFloat(yValue); - drillDownSliceValuesArray.add(new DataObject(xValue, value)); - pieSliceSum += value; - } - else { - Integer value = Integer.parseInt(yValue); - drillDownSliceValuesArray.add(new DataObject(xValue, value)); - pieSliceSum += value; + Number value = parseValue(yValue); + drillDownSliceValuesArray.add(new DataObject(xValue, value)); + if (value != null) { + pieSliceSum += value.floatValue(); } + } drillDownArray.add(new ArrayOfDataObjects(drillDownSliceValuesArray)); @@ -245,7 +225,7 @@ else if (yValue.contains(".")) { dataSeriesTypes.add(chartType.name()); log.debug("Added " + chartType.name()); - HighChartsJsonResponse ret = new HighChartsJsonResponse(dataSeries,new ArrayList<>(xAxis_categories.keySet()), + HighChartsJsonResponse ret = new HighChartsJsonResponse(dataSeries, new ArrayList<>(xAxis_categories.keySet()), null, dataSeriesTypes); ret.setDrilldown(drillDownArray); return ret; @@ -257,7 +237,7 @@ else if (yValue.contains(".")) { } private HighChartsJsonResponse multiToHighChartsJsonResponse(List dbAccessResults, List chartsType, List chartNames) throws DataFormationException { - + // A sorted List with all the possible x values occurring from the Queries. List xAxis_Categories = this.getXAxisCategories(dbAccessResults); @@ -280,11 +260,11 @@ private HighChartsJsonResponse multiToHighChartsJsonResponse(List dbAcce namesToTypes.put(chartName, chartsType.get(i)); } - for (List row : result.getRows()) { + for (List row : result.getRows()) { if (row.size() == 3) { // The value of the 2nd Group BY - String xValueB = row.get(2); + String xValueB = String.valueOf(row.get(2)); if (!namesToDataSeries.containsKey(xValueB)) { namesToDataSeries.put(xValueB, new HashMap<>()); namesToTypes.put(xValueB, chartsType.get(i)); @@ -294,8 +274,8 @@ private HighChartsJsonResponse multiToHighChartsJsonResponse(List dbAcce } // Get the first groupBy of the result row - String yValue = row.get(0); - String xValue = row.get(1); + String yValue = String.valueOf(row.get(0)); + String xValue = String.valueOf(row.get(1)); if (XtoYMapping != null) XtoYMapping.put(xValue, yValue); @@ -328,12 +308,8 @@ private HighChartsJsonResponse multiToHighChartsJsonResponse(List dbAcce if (XtoYMapping.containsKey(xValue)) { String yValue = XtoYMapping.get(xValue); - if (yValue == null) - yValuesArray.add(null); - else if (yValue.contains(".")) - yValuesArray.add(Float.parseFloat(yValue)); - else - yValuesArray.add(Integer.parseInt(yValue)); + yValuesArray.add(parseValue(yValue)); + } else yValuesArray.add(null); } @@ -348,12 +324,8 @@ else if (yValue.contains(".")) if (XtoYMapping.containsKey(xValue)) { String yValue = XtoYMapping.get(xValue); - if (yValue == null) - yObjectValuesArray.add(new DataObject(xValue, null)); - else if (yValue.contains(".")) - yObjectValuesArray.add(new DataObject(xValue, Float.parseFloat(yValue))); - else - yObjectValuesArray.add(new DataObject(xValue, Integer.parseInt(yValue))); + yObjectValuesArray.add(new DataObject(xValue, parseValue(yValue))); + } else yObjectValuesArray.add(new DataObject(xValue, null)); } @@ -368,46 +340,42 @@ else if (yValue.contains(".")) } } - return new HighChartsJsonResponse(dataSeries,xAxis_Categories, dataSeriesNames, dataSeriesTypes); + return new HighChartsJsonResponse(dataSeries, xAxis_Categories, dataSeriesNames, dataSeriesTypes); } /** * Highcharts Dependency Wheel and Sankey data are : *

| from node (string) | to node (string) | from-to edge weight (int) | *

In this method, we aim to create the above data representation into GraphData - * */ - private HighChartsJsonResponse HCGraph(Result result, boolean ignoreNodeWeight, SupportedChartTypes chartType, String chartName){ + private HighChartsJsonResponse HCGraph(Result result, boolean ignoreNodeWeight, SupportedChartTypes chartType, String chartName) { // For the purpose of making this as scalable as possible, we will consider the following assumption: // The named query for the dependency wheel responds with the following rows : // 4 rows result: | from node | from node value | to node | from-to edge weight | // 3 rows result: | from node | to node | from-to edge weight | - + // Initialize the keys array List keys = Arrays.asList("from", "to", "weight"); // Initialize the data array ArrayList data = new ArrayList<>(result.getRows().size()); - for (List row : result.getRows()) { - + for (List row : result.getRows()) { + // Initialize each data row with exactly the size of the keys ArrayList dataRow = new ArrayList<>(); - + dataRow.add(row.get(0)); // Ignore the 'from' node weight - if(ignoreNodeWeight) - { + if (ignoreNodeWeight) { dataRow.add(row.get(2)); // We assume the node and edge values are Integers - dataRow.add(Integer.parseInt(row.get(3))); - } - else - { + dataRow.add(Integer.parseInt(String.valueOf(row.get(3)))); + } else { dataRow.add(row.get(1)); // We assume the node and edge values are Integers - dataRow.add(Integer.parseInt(row.get(2))); + dataRow.add(Integer.parseInt(String.valueOf(row.get(2)))); } // Push the row into the data list data.add(dataRow.stream().toArray()); diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/RawDataFormatter.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/RawDataFormatter.java index a781873..3564a88 100644 --- a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/RawDataFormatter.java +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/DataFormatter/RawDataFormatter.java @@ -11,7 +11,7 @@ public class RawDataFormatter extends DataFormatter { @Override public RawDataJsonResponse toJsonResponse(List dbAccessResults, Object... args) throws DataFormationException { - List>> res = new ArrayList<>(); + List>> res = new ArrayList<>(); for (int i = 0; i < dbAccessResults.size(); i++) { Result result = dbAccessResults.get(i); @@ -19,8 +19,6 @@ public RawDataJsonResponse toJsonResponse(List dbAccessResults, Object.. res.add(result.getRows()); } - - return new RawDataJsonResponse(res); } } diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/Handlers/RequestBodyHandler.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/Handlers/RequestBodyHandler.java index 2e98875..3b34e54 100644 --- a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/Handlers/RequestBodyHandler.java +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/Handlers/RequestBodyHandler.java @@ -164,7 +164,7 @@ public JsonResponse handleRawDataRequest(RawDataRequestInfo requestInfo) throws serie.setQuery(requestInfo.getQueries().get(i)); serie.setRows(new ArrayList<>()); - for (List row:result.getRows()) { + for (List row:result.getRows()) { serie.getRows().add(new VerboseRawDataRow(row)); } diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/JsonRepresentation/ResponseBody/RawDataJsonResponse.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/JsonRepresentation/ResponseBody/RawDataJsonResponse.java index 690bb24..8e2ef01 100644 --- a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/JsonRepresentation/ResponseBody/RawDataJsonResponse.java +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/JsonRepresentation/ResponseBody/RawDataJsonResponse.java @@ -10,11 +10,11 @@ public class RawDataJsonResponse extends JsonResponse { @JsonProperty - private List>> data; + private List>> data; private final Logger log = LogManager.getLogger(this.getClass()); - public RawDataJsonResponse(List>> data) { + public RawDataJsonResponse(List>> data) { this.data = data; } @@ -28,11 +28,11 @@ public String toString() { '}'; } - public List>> getData() { + public List>> getData() { return data; } - public void setData(List>> data) { + public void setData(List>> data) { this.data = data; } } diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/JsonRepresentation/ResponseBody/VerboseRawDataRow.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/JsonRepresentation/ResponseBody/VerboseRawDataRow.java index b479d0b..f240042 100644 --- a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/JsonRepresentation/ResponseBody/VerboseRawDataRow.java +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/JsonRepresentation/ResponseBody/VerboseRawDataRow.java @@ -3,20 +3,20 @@ import java.util.List; public class VerboseRawDataRow { - List row; + List row; - public VerboseRawDataRow(List row) { + public VerboseRawDataRow(List row) { this.row = row; } public VerboseRawDataRow() { } - public List getRow() { + public List getRow() { return row; } - public void setRow(List row) { + public void setRow(List row) { this.row = row; } } diff --git a/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/Utility/NumberUtils.java b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/Utility/NumberUtils.java new file mode 100644 index 0000000..1da40b1 --- /dev/null +++ b/ChartDataFormatter/src/main/java/gr/uoa/di/madgik/ChartDataFormatter/Utility/NumberUtils.java @@ -0,0 +1,18 @@ +package gr.uoa.di.madgik.ChartDataFormatter.Utility; + +public class NumberUtils { + + public static Number parseValue(String yValue) { + if(yValue == null) + return null; + else if (yValue.matches("[0-9.,]*")) + return Float.parseFloat(yValue); + else if (yValue.matches("\\d*")) + return Integer.parseInt(yValue); + else + return null; + } + + private NumberUtils() { + } +} diff --git a/ChartDataFormatter/src/test/java/gr/uoa/di/madgik/ChartDataFormatter/GraphResponseTest.java b/ChartDataFormatter/src/test/java/gr/uoa/di/madgik/ChartDataFormatter/GraphResponseTest.java index 82a081c..aab6642 100644 --- a/ChartDataFormatter/src/test/java/gr/uoa/di/madgik/ChartDataFormatter/GraphResponseTest.java +++ b/ChartDataFormatter/src/test/java/gr/uoa/di/madgik/ChartDataFormatter/GraphResponseTest.java @@ -30,14 +30,13 @@ public class GraphResponseTest { public void setUp() { this.demoResult = new Result(); - List> rows = new ArrayList>(); - rows.add(new ArrayList(Arrays.asList("FI", "69270", "BD", "3"))); - rows.add(new ArrayList(Arrays.asList("EG","175","NZ","1"))); - rows.add(new ArrayList(Arrays.asList("NZ","262","FI","14"))); - rows.add(new ArrayList(Arrays.asList("LT","810","MY","3"))); - rows.add(new ArrayList(Arrays.asList("NG","57","TG","1"))); - rows.add(new ArrayList(Arrays.asList("CH","64922","GL","2"))); - + List> rows = new ArrayList<>(); + rows.add(new ArrayList<>(Arrays.asList("FI", "69270", "BD", "3"))); + rows.add(new ArrayList<>(Arrays.asList("EG","175","NZ","1"))); + rows.add(new ArrayList<>(Arrays.asList("NZ","262","FI","14"))); + rows.add(new ArrayList<>(Arrays.asList("LT","810","MY","3"))); + rows.add(new ArrayList<>(Arrays.asList("NG","57","TG","1"))); + rows.add(new ArrayList<>(Arrays.asList("CH","64922","GL","2"))); this.demoResult.setRows(rows); } @@ -62,7 +61,7 @@ public void HCGraphResponseTest() throws DataFormatter.DataFormationException { // Initialize the data array ArrayList data = new ArrayList<>(result.getRows().size()); - for (List row : result.getRows()) { + for (List row : result.getRows()) { // Ignore the 'from' node weight if(ignoreNodeWeight) diff --git a/DBAccess/pom.xml b/DBAccess/pom.xml index f49bd07..2239bf6 100644 --- a/DBAccess/pom.xml +++ b/DBAccess/pom.xml @@ -11,7 +11,6 @@ org.springframework.boot spring-boot-starter-parent - 2.3.1.RELEASE @@ -38,13 +37,12 @@ spring-boot-starter-data-redis - + org.springframework.boot spring-boot-starter-log4j2 - com.googlecode.json-simple json-simple @@ -62,13 +60,13 @@ postgresql runtime - + com.cloudera.impala @@ -84,24 +82,33 @@ derby - org.eclipse.jetty.aggregate + org.apache.hive + hive-service + + + org.eclipse.jetty.aggregate jetty-all - - log4j - log4j - - - log4j - apache-log4j-extras - - - jdk.tools - jdk.tools - + + log4j + log4j + + + log4j + apache-log4j-extras + + + jdk.tools + jdk.tools + + + org.apache.commons + commons-lang3 + + org.hsqldb @@ -112,9 +119,9 @@ - omtd - openminted releases - https://repo.openminted.eu/content/repositories/releases/ + madgik-releases + Madgik Releases + https://repo.madgik.di.uoa.gr/content/repositories/releases/ icm @@ -136,20 +143,20 @@ - - - - src/main/resources - - logback.xml - - - - - src/main/resources - - - + + + + src/main/resources + + logback.xml + + + + + src/main/resources + + + diff --git a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/config/DataSourceProperties.java b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/config/DataSourceProperties.java index 7c450c9..ed8d404 100644 --- a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/config/DataSourceProperties.java +++ b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/config/DataSourceProperties.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.List; -@Component @ConfigurationProperties(prefix = "spring") public class DataSourceProperties { diff --git a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/config/DatasourceFactory.java b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/config/DatasourceFactory.java index 30b7ebd..385f904 100644 --- a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/config/DatasourceFactory.java +++ b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/config/DatasourceFactory.java @@ -1,6 +1,7 @@ package gr.uoa.di.madgik.statstool.config; import gr.uoa.di.madgik.statstool.repositories.datasource.StatsRoutingDatasource; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -15,23 +16,18 @@ import java.util.stream.Collectors; @Configuration +@EnableConfigurationProperties(DataSourceProperties.class) @EnableTransactionManagement -@EnableJpaRepositories(basePackages = { "gr.uoa.di.madgik.statstool" }) +@EnableJpaRepositories(basePackages = {"gr.uoa.di.madgik.statstool"}) public class DatasourceFactory { @Bean(name = "dataSources") @Primary public Map getDataSources(DataSourceProperties dataSourceProperties) { - return dataSourceProperties.getDataSources().stream().map(dataSourceProperty -> { - DataSource dataSource = DataSourceBuilder.create() - .url(dataSourceProperty.getUrl()) - .username(dataSourceProperty.getUsername()) - .password(dataSourceProperty.getPassword()) - .driverClassName(dataSourceProperty.getDriverClassName()) - .build(); - - return new IdDataSource(dataSourceProperty.getId(), dataSource); - }).collect(Collectors.toMap(IdDataSource::getId, IdDataSource::getDataSource)); + return dataSourceProperties.getDataSources() + .stream() + .map(this::createDataSource) + .collect(Collectors.toMap(IdDataSource::getId, IdDataSource::getDataSource)); } @Bean(name = "routingDataSource") @@ -45,7 +41,18 @@ public DataSource dataSource(Map dataSources) { return routingDataSource; } - private class IdDataSource { + private IdDataSource createDataSource(DataSourceProperty dataSourceProperty) { + DataSource dataSource = DataSourceBuilder.create() + .url(dataSourceProperty.getUrl()) + .username(dataSourceProperty.getUsername()) + .password(dataSourceProperty.getPassword()) + .driverClassName(dataSourceProperty.getDriverClassName()) + .build(); + + return new IdDataSource(dataSourceProperty.getId(), dataSource); + } + + private static class IdDataSource { private Object id; private Object dataSource; diff --git a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/domain/Result.java b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/domain/Result.java index 7a16a47..19ab74b 100644 --- a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/domain/Result.java +++ b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/domain/Result.java @@ -4,20 +4,20 @@ import java.util.List; public class Result { - private List> rows = new ArrayList<>(); + private List> rows = new ArrayList<>(); public Result() { } - public List> getRows() { + public List> getRows() { return rows; } - public void setRows(List> rows) { + public void setRows(List> rows) { this.rows = rows; } - public void addRow(List row) { + public void addRow(List row) { rows.add(row); } diff --git a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/repositories/StatsRepository.java b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/repositories/StatsRepository.java index daef651..738db75 100644 --- a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/repositories/StatsRepository.java +++ b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/repositories/StatsRepository.java @@ -1,18 +1,23 @@ package gr.uoa.di.madgik.statstool.repositories; import gr.uoa.di.madgik.statstool.domain.QueryWithParameters; +import gr.uoa.di.madgik.statstool.domain.Result; import gr.uoa.di.madgik.statstool.repositories.datasource.DatasourceContext; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -import java.sql.*; -import java.util.*; +import org.apache.logging.log4j.Logger; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; -import javax.sql.DataSource; - -import gr.uoa.di.madgik.statstool.domain.Result; -import org.springframework.stereotype.Repository; @Repository public class StatsRepository { @@ -48,15 +53,15 @@ public Result executeQuery(String query, List parameters, String dbId) t log.info("size of queue: " + tasks.size()); } - try { + try { - return future.get(); - } finally { - synchronized (tasks) { - tasks.remove(q); + return future.get(); + } finally { + synchronized (tasks) { + tasks.remove(q); log.info("size of queue: " + tasks.size()); - } - } + } + } } public class ResultCallable implements Callable { @@ -82,9 +87,13 @@ public Result call() throws Exception { ResultSet rs = st.executeQuery(); int columnCount = rs.getMetaData().getColumnCount(); while (rs.next()) { - ArrayList row = new ArrayList<>(); + ArrayList row = new ArrayList<>(); for (int i = 1; i <= columnCount; i++) { - row.add(rs.getString(i)); + String stringResult = rs.getString(i); + if ("null".equals(stringResult)) + row.add(null); + else + row.add(stringResult); } result.addRow(row); } diff --git a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/services/SchemaServiceImpl.java b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/services/SchemaServiceImpl.java index 8323d7f..eda588d 100644 --- a/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/services/SchemaServiceImpl.java +++ b/DBAccess/src/main/java/gr/uoa/di/madgik/statstool/services/SchemaServiceImpl.java @@ -74,9 +74,9 @@ public FieldValues getFieldValues(String profile, String field, String like) thr Result result = results.get(0); List values = new ArrayList<>(); - for(List val : result.getRows()) { - if(val.get(0) != null && (like.equals("") || val.get(0).toLowerCase().contains(like.toLowerCase()))) { - values.add(val.get(0)); + for(List val : result.getRows()) { + if("".equals(like) || String.valueOf(val.get(0)).toLowerCase().contains(like.toLowerCase())) { + values.add(String.valueOf(val.get(0))); } }