From 151cce2578e0e6ef6c12215aa08c15bd06802387 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 18 Jul 2021 11:42:59 +0200 Subject: [PATCH] #585 - load images for each chart --- .../budgetmaster/charts/Chart.java | 19 ++++++++++++++++--- .../budgetmaster/charts/ChartService.java | 1 + .../budgetmaster/charts/DefaultCharts.java | 18 +++++++++--------- .../resources/templates/charts/charts.ftl | 2 +- ...tabaseParser_v7_convertToInternalTest.java | 2 +- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/Chart.java b/src/main/java/de/deadlocker8/budgetmaster/charts/Chart.java index 4f96ea1fe..45362237f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/charts/Chart.java +++ b/src/main/java/de/deadlocker8/budgetmaster/charts/Chart.java @@ -30,8 +30,9 @@ public class Chart private ChartDisplayType displayType; private ChartGroupType groupType; + private String previewImageFileName; - public Chart(String name, String script, ChartType type, int version, ChartDisplayType displayType, ChartGroupType groupType) + public Chart(String name, String script, ChartType type, int version, ChartDisplayType displayType, ChartGroupType groupType, String previewImageFileName) { this.name = name; this.script = script; @@ -39,6 +40,7 @@ public class Chart this.version = version; this.displayType = displayType; this.groupType = groupType; + this.previewImageFileName = previewImageFileName; } public Chart() @@ -115,6 +117,16 @@ public class Chart this.groupType = chartGroupType; } + public String getPreviewImageFileName() + { + return previewImageFileName; + } + + public void setPreviewImageFileName(String previewImageFileName) + { + this.previewImageFileName = previewImageFileName; + } + @Override public String toString() { @@ -126,6 +138,7 @@ public class Chart ", version=" + version + ", displayType=" + displayType + ", chartGroupType=" + groupType + + ", previewImageFileName=" + previewImageFileName + '}'; } @@ -135,12 +148,12 @@ public class Chart if(this == o) return true; if(o == null || getClass() != o.getClass()) return false; Chart chart = (Chart) o; - return version == chart.version && Objects.equals(ID, chart.ID) && Objects.equals(name, chart.name) && Objects.equals(script, chart.script) && type == chart.type && displayType == chart.displayType && groupType == chart.groupType; + return version == chart.version && Objects.equals(ID, chart.ID) && Objects.equals(name, chart.name) && Objects.equals(script, chart.script) && type == chart.type && displayType == chart.displayType && groupType == chart.groupType && Objects.equals(previewImageFileName, chart.previewImageFileName); } @Override public int hashCode() { - return Objects.hash(ID, name, script, type, version, displayType, groupType); + return Objects.hash(ID, name, script, type, version, displayType, groupType, previewImageFileName); } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartService.java b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartService.java index e479e0f2b..b0beea706 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartService.java @@ -73,6 +73,7 @@ public class ChartService implements Resettable, AccessAllEntities<Chart> currentChart.setScript(chart.getScript()); currentChart.setDisplayType(chart.getDisplayType()); currentChart.setGroupType(chart.getGroupType()); + currentChart.setPreviewImageFileName(chart.getPreviewImageFileName()); chartRepository.save(currentChart); } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java b/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java index 40838aa2e..d5852eee9 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java +++ b/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java @@ -16,39 +16,39 @@ public class DefaultCharts public static final Chart CHART_DEFAULT = new Chart(null, getChartFromFile("charts/Default.js"), - ChartType.CUSTOM, -1, ChartDisplayType.CUSTOM, ChartGroupType.NONE); + ChartType.CUSTOM, -1, ChartDisplayType.CUSTOM, ChartGroupType.NONE, null); private static final Chart CHART_ACCOUNT_SUM_PER_DAY = new Chart("charts.default.accountSumPerDay", getChartFromFile("charts/AccountSumPerDay.js"), - ChartType.DEFAULT, 10, ChartDisplayType.LINE, ChartGroupType.NONE); + ChartType.DEFAULT, 11, ChartDisplayType.LINE, ChartGroupType.NONE, "accountSumPerDay.png"); private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_MONTH_BAR = new Chart("charts.default.incomesAndExpendituresPerMonthBar", getChartFromFile("charts/IncomesAndExpendituresPerMonthBar.js"), - ChartType.DEFAULT, 10, ChartDisplayType.BAR, ChartGroupType.MONTH); + ChartType.DEFAULT, 11, ChartDisplayType.BAR, ChartGroupType.MONTH, "incomesAndExpendituresPerMonthBar.png"); private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_MONTH_LINE = new Chart("charts.default.incomesAndExpendituresPerMonthLine", getChartFromFile("charts/IncomesAndExpendituresPerMonthLine.js"), - ChartType.DEFAULT, 10, ChartDisplayType.LINE, ChartGroupType.MONTH); + ChartType.DEFAULT, 11, ChartDisplayType.LINE, ChartGroupType.MONTH, "incomesAndExpendituresPerMonthLine.png"); private static final Chart CHART_INCOMES_AND_EXPENDITURES_BY_CATEGORY_BAR = new Chart("charts.default.incomesAndExpendituresByCategoryBar", getChartFromFile("charts/IncomesAndExpendituresByCategoryBar.js"), - ChartType.DEFAULT, 5, ChartDisplayType.BAR, ChartGroupType.NONE); + ChartType.DEFAULT, 6, ChartDisplayType.BAR, ChartGroupType.NONE, "incomesAndExpendituresByCategoryBar.png"); private static final Chart CHART_INCOMES_AND_EXPENDITURES_BY_CATEGORY_PIE = new Chart("charts.default.incomesAndExpendituresByCategoryPie", getChartFromFile("charts/IncomesAndExpendituresByCategoryPie.js"), - ChartType.DEFAULT, 6, ChartDisplayType.PIE, ChartGroupType.NONE); + ChartType.DEFAULT, 7, ChartDisplayType.PIE, ChartGroupType.NONE, "incomesAndExpendituresByCategoryPie.png"); private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_MONTH_BY_CATEGORIES = new Chart("charts.default.incomesAndExpendituresPerMonthByCategories", getChartFromFile("charts/IncomesAndExpendituresPerMonthByCategories.js"), - ChartType.DEFAULT, 20, ChartDisplayType.BAR, ChartGroupType.MONTH); + ChartType.DEFAULT, 21, ChartDisplayType.BAR, ChartGroupType.MONTH, "incomesAndExpendituresPerMonthByCategories.png"); private static final Chart CHART_REST_PER_MONTH = new Chart("charts.default.restPerMonth", getChartFromFile("charts/RestPerMonth.js"), - ChartType.DEFAULT, 6, ChartDisplayType.BAR, ChartGroupType.MONTH); + ChartType.DEFAULT, 7, ChartDisplayType.BAR, ChartGroupType.MONTH, "restPerMonth.png"); private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_YEAR_BAR = new Chart("charts.default.incomesAndExpendituresPerYearBar", getChartFromFile("charts/IncomesAndExpendituresPerYearBar.js"), - ChartType.DEFAULT, 5, ChartDisplayType.BAR, ChartGroupType.YEAR); + ChartType.DEFAULT, 6, ChartDisplayType.BAR, ChartGroupType.YEAR, "incomesAndExpendituresPerYearBar.png"); private DefaultCharts() { diff --git a/src/main/resources/templates/charts/charts.ftl b/src/main/resources/templates/charts/charts.ftl index d3ea2db82..429c9b71f 100644 --- a/src/main/resources/templates/charts/charts.ftl +++ b/src/main/resources/templates/charts/charts.ftl @@ -296,7 +296,7 @@ <div class="col s6 m4 l3 center-align"> <div class="card chart-preview background-grey-dark"> <div class="card-image"> - <img src="<@s.url '/images/charts/a.png'/>"> + <img src="<@s.url '/images/charts/' + chart.getPreviewImageFileName()!"placeholder.png"/>"> </div> <div class="card-action bold"> ${chartFunctions.getChartName(chart)} diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v7_convertToInternalTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v7_convertToInternalTest.java index e1d829406..f322b7938 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v7_convertToInternalTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v7_convertToInternalTest.java @@ -68,7 +68,7 @@ class DatabaseParser_v7_convertToInternalTest DatabaseParser_v7 importer = new DatabaseParser_v7(json); InternalDatabase database = importer.parseDatabaseFromJSON().convertToInternal(); - final Chart chart = new Chart("The best chart", "/* This list will be dynamically filled with all the transactions between\r\n* the start and and date you select on the \"Show Chart\" page\r\n* and filtered according to your specified filter.\r\n* An example entry for this list and tutorial about how to create custom charts ca be found in the BudgetMaster wiki:\r\n* https://github.com/deadlocker8/BudgetMaster/wiki/How-to-create-custom-charts\r\n*/\r\nvar transactionData \u003d [];\r\n\r\n// Prepare your chart settings here (mandatory)\r\nvar plotlyData \u003d [{\r\n x: [],\r\n y: [],\r\n type: \u0027bar\u0027\r\n}];\r\n\r\n// Add your Plotly layout settings here (optional)\r\nvar plotlyLayout \u003d {};\r\n\r\n// Add your Plotly configuration settings here (optional)\r\nvar plotlyConfig \u003d {\r\n showSendToCloud: false,\r\n displaylogo: false,\r\n showLink: false,\r\n responsive: true\r\n};\r\n\r\n// Don\u0027t touch this line\r\nPlotly.newPlot(\"containerID\", plotlyData, plotlyLayout, plotlyConfig);\r\n", ChartType.CUSTOM, 7, ChartDisplayType.CUSTOM, ChartGroupType.NONE); + final Chart chart = new Chart("The best chart", "/* This list will be dynamically filled with all the transactions between\r\n* the start and and date you select on the \"Show Chart\" page\r\n* and filtered according to your specified filter.\r\n* An example entry for this list and tutorial about how to create custom charts ca be found in the BudgetMaster wiki:\r\n* https://github.com/deadlocker8/BudgetMaster/wiki/How-to-create-custom-charts\r\n*/\r\nvar transactionData \u003d [];\r\n\r\n// Prepare your chart settings here (mandatory)\r\nvar plotlyData \u003d [{\r\n x: [],\r\n y: [],\r\n type: \u0027bar\u0027\r\n}];\r\n\r\n// Add your Plotly layout settings here (optional)\r\nvar plotlyLayout \u003d {};\r\n\r\n// Add your Plotly configuration settings here (optional)\r\nvar plotlyConfig \u003d {\r\n showSendToCloud: false,\r\n displaylogo: false,\r\n showLink: false,\r\n responsive: true\r\n};\r\n\r\n// Don\u0027t touch this line\r\nPlotly.newPlot(\"containerID\", plotlyData, plotlyLayout, plotlyConfig);\r\n", ChartType.CUSTOM, 7, ChartDisplayType.CUSTOM, ChartGroupType.NONE, null); chart.setID(9); assertThat(database.getCharts()).hasSize(1) -- GitLab