From e7e2953d0007e89720cb6e2d5d31a00eafda6756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Tue, 25 Feb 2025 12:23:46 +0100 Subject: [PATCH] Graph bars for type=Meter --- .../java/de/ph87/data/series/Alignment.java | 18 +++++++++------ .../java/de/ph87/data/series/graph/Graph.java | 23 +++++++++++++------ .../data/series/graph/GraphController.java | 2 +- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/ph87/data/series/Alignment.java b/src/main/java/de/ph87/data/series/Alignment.java index 91653e2..6e1f2b3 100644 --- a/src/main/java/de/ph87/data/series/Alignment.java +++ b/src/main/java/de/ph87/data/series/Alignment.java @@ -7,21 +7,25 @@ import java.time.temporal.*; import java.util.function.*; public enum Alignment { - FIVE(t -> t.truncatedTo(ChronoUnit.MINUTES).minusMinutes(t.getMinute() % 5), (t, a) -> t.plusMinutes(5 * a)), - HOUR(t -> t.truncatedTo(ChronoUnit.HOURS), ZonedDateTime::plusHours), - DAY(t -> t.truncatedTo(ChronoUnit.DAYS), ZonedDateTime::plusDays), - WEEK(t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfWeek().getValue() - 1), ZonedDateTime::plusWeeks), - MONTH(t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfMonth() - 1), ZonedDateTime::plusMonths), - YEAR(t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfYear() - 1), ZonedDateTime::plusYears), + FIVE(Duration.ofMinutes(5), t -> t.truncatedTo(ChronoUnit.MINUTES).minusMinutes(t.getMinute() % 5), (t, a) -> t.plusMinutes(5 * a)), + HOUR(Duration.ofHours(1), t -> t.truncatedTo(ChronoUnit.HOURS), ZonedDateTime::plusHours), + DAY(Duration.ofDays(1), t -> t.truncatedTo(ChronoUnit.DAYS), ZonedDateTime::plusDays), + WEEK(Duration.ofDays(7), t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfWeek().getValue() - 1), ZonedDateTime::plusWeeks), + MONTH(Duration.ofDays(31), t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfMonth() - 1), ZonedDateTime::plusMonths), + YEAR(Duration.ofDays(366), t -> t.truncatedTo(ChronoUnit.DAYS).minusDays(t.getDayOfYear() - 1), ZonedDateTime::plusYears), ; + @NonNull + public final Duration maxDuration; + @NonNull public final Function align; @NonNull public final BiFunction plus; - Alignment(@NonNull final Function align, @NonNull final BiFunction plus) { + Alignment(final @NonNull Duration maxDuration, @NonNull final Function align, @NonNull final BiFunction plus) { + this.maxDuration = maxDuration; this.align = align; this.plus = plus; } diff --git a/src/main/java/de/ph87/data/series/graph/Graph.java b/src/main/java/de/ph87/data/series/graph/Graph.java index 9c720bb..b65a9c9 100644 --- a/src/main/java/de/ph87/data/series/graph/Graph.java +++ b/src/main/java/de/ph87/data/series/graph/Graph.java @@ -100,7 +100,7 @@ public class Graph { minuteMin = begin.date.toEpochSecond() / 60; minuteMax = end.date.toEpochSecond() / 60; minuteRange = minuteMax - minuteMin; - minuteScale = (double) widthInner / minuteRange; + minuteScale = (double) widthInner / (minuteRange + begin.alignment.maxDuration.toMinutes()); valueMin = vMin; valueMax = vMax; @@ -133,13 +133,22 @@ public class Graph { g.setColor(Color.BLACK); g.drawLine(widthInner, 0, widthInner, heightInner); // y-axis - Point last = null; - g.setColor(Color.RED); - for (final Point current : points) { - if (last != null) { - g.drawLine(last.x, last.y, current.x, current.y); + if (series.type == SeriesType.METER) { + g.setColor(Color.PINK); + final int space = (int) (minuteScale * begin.alignment.maxDuration.toMinutes()); + final int width = (int) (space * 0.95); + for (final Point point : points) { + g.fillRect(point.x + (space - width), 0, width, point.y); + } + } else { + g.setColor(Color.RED); + Point last = null; + for (final Point current : points) { + if (last != null) { + g.drawLine(last.x, last.y, current.x, current.y); + } + last = current; } - last = current; } return image; } diff --git a/src/main/java/de/ph87/data/series/graph/GraphController.java b/src/main/java/de/ph87/data/series/graph/GraphController.java index 33e9384..06fa930 100644 --- a/src/main/java/de/ph87/data/series/graph/GraphController.java +++ b/src/main/java/de/ph87/data/series/graph/GraphController.java @@ -23,7 +23,7 @@ public class GraphController { public void graph(@PathVariable final long seriesId, final HttpServletResponse response, @PathVariable final int width, @PathVariable final int height, @PathVariable final String alignmentName, @PathVariable final long offset, @PathVariable final long duration) throws IOException { final Alignment alignment = Alignment.valueOf(alignmentName); final Aligned end = alignment.align(ZonedDateTime.now()).minus(offset); - final Aligned begin = end.minus(duration); + final Aligned begin = end.minus(duration - 1); final Graph graph = graphService.getGraph(seriesId, begin, end, width, height, 10); final BufferedImage image = graph.draw(); response.setContentType("image/png");