From 1a4fb278faf2ca37caf2369fa9ecbdf6fe621878 Mon Sep 17 00:00:00 2001 From: "Christian P. MOMON" Date: Wed, 22 Jan 2020 12:09:49 +0100 Subject: [PATCH] Improved code on building closed/concluded charts. --- .../agirstatool/core/AgirStatoolUtils.java | 8 +- .../pages/CreatedConcludedCountChartView.java | 160 ++++++++++++++---- .../agirstatool/core/pages/ProjectPage.java | 6 +- .../core/pages/chartLineView.xhtml | 9 +- 4 files changed, 137 insertions(+), 46 deletions(-) diff --git a/src/org/april/agirstatool/core/AgirStatoolUtils.java b/src/org/april/agirstatool/core/AgirStatoolUtils.java index e2067f6..8eebc65 100644 --- a/src/org/april/agirstatool/core/AgirStatoolUtils.java +++ b/src/org/april/agirstatool/core/AgirStatoolUtils.java @@ -101,7 +101,8 @@ public class AgirStatoolUtils if (index < source.size()) { DateCount current = source.get(index); - AgirStatoolUtils.logger.info("===> " + dateToken + " " + current.getDate()); + // AgirStatoolUtils.logger.info("===> " + dateToken + " " + + // current.getDate()); if (StringUtils.equals(current.getDate(), dateToken)) { count = current.getCount(); @@ -148,13 +149,8 @@ public class AgirStatoolUtils DateCount current = source.get(dateToken); if (current != null) { - AgirStatoolUtils.logger.info("xxx> " + dateToken + " " + current.getDate()); count += current.getCount(); } - else - { - AgirStatoolUtils.logger.info("xxx> " + dateToken + " " + null); - } result.add(new DateCount(dateToken, count)); date = date.plusWeeks(1); } diff --git a/src/org/april/agirstatool/core/pages/CreatedConcludedCountChartView.java b/src/org/april/agirstatool/core/pages/CreatedConcludedCountChartView.java index e4369cb..9feceb1 100644 --- a/src/org/april/agirstatool/core/pages/CreatedConcludedCountChartView.java +++ b/src/org/april/agirstatool/core/pages/CreatedConcludedCountChartView.java @@ -41,6 +41,63 @@ public class CreatedConcludedCountChartView { private static Logger logger = LoggerFactory.getLogger(CreatedConcludedCountChartView.class); + /** + * Builds the. + * + * @param title + * the title + * @param project + * the project + * @param start + * the start + * @param end + * the end + * @return the string + * @throws AgirStatoolException + * the agir statool exception + */ + public static String build(final String title, final Project project, final LocalDate start, final LocalDate end) throws AgirStatoolException + { + String result; + + try + { + logger.info("Building created/closed x months chart view…"); + + if (project.hasIssue()) + { + String source = XidynUtils.load(AgirStatool.class.getResource("/org/april/agirstatool/core/pages/chartLineView.xhtml")); + String code = XidynUtils.extractBodyContent(source); + + code = code.replaceAll("myChart", "myChart_" + DigestUtils.md5Hex(title + "lineChart")); + + StringList labels = buildWeekLabels(start, end); + code = code.replaceAll("labels: \\[.*\\]", "labels: " + AgirStatoolUtils.toJSonStrings(labels)); + + DateCountList dates = project.issueStats().getWeekCreatedIssueCounts(); + StringList values = AgirStatoolUtils.normalizedWeekCountList(dates, start, end).toValueList(); + code = code.replaceAll("data: \\[.*\\]", "data: " + AgirStatoolUtils.toJSonNumbers(values)); + + dates = project.issueStats().getWeekConcludedIssueCounts(); + values = AgirStatoolUtils.normalizedWeekCountList(dates, start, end).toValueList(); + code = code.replaceAll("data: \\[.*\\] ", "data: " + AgirStatoolUtils.toJSonNumbers(values)); + + result = code.toString(); + } + else + { + result = "No issue."; + } + } + catch (IOException exception) + { + throw new AgirStatoolException("Error building ProjectsRaw view: " + exception.getMessage(), exception); + } + + // + return result; + } + /** * Builds the. * @@ -50,7 +107,7 @@ public class CreatedConcludedCountChartView * @throws AgirStatoolException * the agir statool exception */ - public static String build(final String title, final Project project) throws AgirStatoolException + public static String buildFull(final String title, final Project project) throws AgirStatoolException { String result; @@ -101,46 +158,31 @@ public class CreatedConcludedCountChartView * @throws AgirStatoolException * the agir statool exception */ - public static String build(final String title, final Project project, final int monthCount) throws AgirStatoolException + public static String buildLastMonth(final String title, final Project project, final int monthCount) throws AgirStatoolException { String result; - try - { - logger.info("Building created/closed x months chart view…"); + logger.info("Building created/closed x months chart view…"); - if (project.hasIssue()) - { - String source = XidynUtils.load(AgirStatool.class.getResource("/org/april/agirstatool/core/pages/chartLineView.xhtml")); - String code = XidynUtils.extractBodyContent(source); + result = build(title, project, LocalDate.now().minusMonths(monthCount), LocalDate.now()); - code = code.replaceAll("myChart", "myChart_" + DigestUtils.md5Hex(title + "lineChartXMonths")); + // + return result; + } - LocalDate start = LocalDate.now().minusMonths(monthCount); - LocalDate end = LocalDate.now(); + /** + * @param title + * @param project + * @return + * @throws AgirStatoolException + */ + public static String buildLastYear(final String title, final Project project) throws AgirStatoolException + { + String result; - StringList labels = buildWeekLabels(start); - code = code.replaceAll("labels: \\[.*\\]", "labels: " + AgirStatoolUtils.toJSonStrings(labels)); + logger.info("Building created/closed x months chart view…"); - DateCountList dates = project.issueStats().getWeekCreatedIssueCounts(); - StringList values = AgirStatoolUtils.normalizedWeekCountList(dates, start, end).toValueList(); - code = code.replaceAll("data: \\[.*\\]", "data: " + AgirStatoolUtils.toJSonNumbers(values)); - - dates = project.issueStats().getWeekConcludedIssueCounts(); - values = AgirStatoolUtils.normalizedWeekCountList(dates, start, end).toValueList(); - code = code.replaceAll("data: \\[.*\\] ", "data: " + AgirStatoolUtils.toJSonNumbers(values)); - - result = code.toString(); - } - else - { - result = "No issue."; - } - } - catch (IOException exception) - { - throw new AgirStatoolException("Error building ProjectsRaw view: " + exception.getMessage(), exception); - } + result = buildYear(title, project, LocalDate.now().getYear() - 1); // return result; @@ -157,13 +199,32 @@ public class CreatedConcludedCountChartView { StringList result; + result = buildWeekLabels(start, LocalDate.now()); + + // + return result; + } + + /** + * Builds the week labels. + * + * @param start + * the start + * @param end + * the end + * @return the string list + */ + private static StringList buildWeekLabels(final LocalDate start, final LocalDate end) + { + StringList result; + result = new StringList(); if (start != null) { - LocalDate end = AgirStatoolUtils.normaliseWeekDate(LocalDate.now()); + LocalDate normalizedEnd = AgirStatoolUtils.normaliseWeekDate(end); LocalDate date = AgirStatoolUtils.normaliseWeekDate(start); - while (date.isBefore(end) || date.isEqual(end)) + while (date.isBefore(normalizedEnd) || date.isEqual(normalizedEnd)) { String label = date.format(DateTimeFormatter.ofPattern("yyyy-MMM")); result.add(label); @@ -174,4 +235,33 @@ public class CreatedConcludedCountChartView // return result; } + + /** + * Builds the year. + * + * @param title + * the title + * @param project + * the project + * @param year + * the year + * @return the string + * @throws AgirStatoolException + * the agir statool exception + */ + public static String buildYear(final String title, final Project project, final int year) throws AgirStatoolException + { + String result; + + logger.info("Building created/closed x months chart view…"); + + LocalDate start = LocalDate.of(year, 1, 1).minusDays(7); + LocalDate end = LocalDate.of(year + 1, 1, 1).minusDays(1); + + result = build(title, project, start, end); + + // + return result; + } + } diff --git a/src/org/april/agirstatool/core/pages/ProjectPage.java b/src/org/april/agirstatool/core/pages/ProjectPage.java index 4b3152e..9305f4b 100644 --- a/src/org/april/agirstatool/core/pages/ProjectPage.java +++ b/src/org/april/agirstatool/core/pages/ProjectPage.java @@ -58,9 +58,9 @@ public class ProjectPage data.setContent("agirLink", project.getName()); data.setAttribute("agirLink", "href", "https://agir.april.org/projects/" + project.getIdentifier() + "/issues"); - data.setContent("issueCreatedClosedChart", CreatedConcludedCountChartView.build("Created/closed Count", project)); - data.setContent("issueCreatedClosed3MonthsChart", CreatedConcludedCountChartView.build("Created/closed 3 months Count", project, 3)); - data.setContent("issueCreatedClosed6MonthsChart", CreatedConcludedCountChartView.build("Created/closed 6 months Count", project, 6)); + data.setContent("issueCreatedClosed3MonthsChart", CreatedConcludedCountChartView.buildLastYear("Created/closed last year Count", project)); + data.setContent("issueCreatedClosed6MonthsChart", CreatedConcludedCountChartView.buildLastMonth("Created/closed 6 months Count", project, 6)); + data.setContent("issueCreatedClosedChart", CreatedConcludedCountChartView.buildFull("Created/closed Count", project)); data.setContent("issueRawChart", IssueStatChartView.build("Issue Raw Count", project)); data.setContent("issueGroupedChart", IssueStatChartView.buildGrouped("Issue Grouped Count", project)); diff --git a/src/org/april/agirstatool/core/pages/chartLineView.xhtml b/src/org/april/agirstatool/core/pages/chartLineView.xhtml index 7277888..d02e1a4 100644 --- a/src/org/april/agirstatool/core/pages/chartLineView.xhtml +++ b/src/org/april/agirstatool/core/pages/chartLineView.xhtml @@ -49,20 +49,25 @@ var myChart = new Chart(ctx, options: { maintainAspectRatio: false, + title: { + display: false, + text: 'Min and Max Settings' + }, scales: { xAxes: [{ ticks: { - beginAtZero: true + beginAtZero: false } }], yAxes: [{ ticks: { - beginAtZero: true + beginAtZero: false, + suggestedMax: 10 } }] }