From f25c9a33a203b535730804045ef5bd82e0631db3 Mon Sep 17 00:00:00 2001 From: Anton Micke Date: Fri, 7 Feb 2025 15:38:48 +0100 Subject: [PATCH] Add working ELO graphs --- .../kickerelo/layout/KickerAppLayout.java | 10 +++---- .../kickerelo/service/KickerEloService.java | 4 +-- ...tor.java => Spieler1vs1EloComparator.java} | 2 +- .../util/Spieler2vs2EloComparator.java | 12 +++++++++ .../kickerelo/kickerelo/views/Chart1vs1.java | 12 ++++++--- .../kickerelo/kickerelo/views/Chart2vs2.java | 26 +++++++++++++++++++ .../kickerelo/views/Graph1vs1View.java | 12 ++++++--- .../kickerelo/views/Graph2vs2View.java | 17 ++++++++++++ .../kickerelo/views/PlayerListView.java | 9 ++++--- 9 files changed, 85 insertions(+), 19 deletions(-) rename src/main/java/org/kickerelo/kickerelo/util/{SpielerEloComparator.java => Spieler1vs1EloComparator.java} (77%) create mode 100644 src/main/java/org/kickerelo/kickerelo/util/Spieler2vs2EloComparator.java create mode 100644 src/main/java/org/kickerelo/kickerelo/views/Chart2vs2.java create mode 100644 src/main/java/org/kickerelo/kickerelo/views/Graph2vs2View.java diff --git a/src/main/java/org/kickerelo/kickerelo/layout/KickerAppLayout.java b/src/main/java/org/kickerelo/kickerelo/layout/KickerAppLayout.java index e77af40..78162ff 100644 --- a/src/main/java/org/kickerelo/kickerelo/layout/KickerAppLayout.java +++ b/src/main/java/org/kickerelo/kickerelo/layout/KickerAppLayout.java @@ -11,10 +11,7 @@ import com.vaadin.flow.router.Layout; import com.vaadin.flow.router.Route; import com.vaadin.flow.router.RouterLink; import com.vaadin.flow.theme.lumo.LumoUtility; -import org.kickerelo.kickerelo.views.Enter1vs1View; -import org.kickerelo.kickerelo.views.Enter2vs2View; -import org.kickerelo.kickerelo.views.Graph1vs1View; -import org.kickerelo.kickerelo.views.PlayerListView; +import org.kickerelo.kickerelo.views.*; @Layout public class KickerAppLayout extends AppLayout { @@ -31,8 +28,11 @@ public class KickerAppLayout extends AppLayout { RouterLink enter2vs2 = new RouterLink("2 vs 2", Enter2vs2View.class); RouterLink playerList = new RouterLink("Spielerliste", PlayerListView.class); RouterLink graph1vs1 = new RouterLink("Graph 1 vs 1", Graph1vs1View.class); + RouterLink graph2vs2 = new RouterLink("Graph 2 vs 2", Graph2vs2View.class); - Tabs tabs = new Tabs(new Tab(enter1vs1), new Tab(enter2vs2), new Tab(playerList), new Tab(graph1vs1)); + + + Tabs tabs = new Tabs(new Tab(enter1vs1), new Tab(enter2vs2), new Tab(playerList), new Tab(graph1vs1), new Tab(graph2vs2)); tabs.setOrientation(Tabs.Orientation.VERTICAL); addToDrawer(tabs); } diff --git a/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java b/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java index e195091..0c0b189 100644 --- a/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java +++ b/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java @@ -11,7 +11,7 @@ import org.kickerelo.kickerelo.model.ResultInfo2vs2; import org.kickerelo.kickerelo.repository.Ergebnis1vs1Repository; import org.kickerelo.kickerelo.repository.Ergebnis2vs2Repository; import org.kickerelo.kickerelo.repository.SpielerRepository; -import org.kickerelo.kickerelo.util.SpielerEloComparator; +import org.kickerelo.kickerelo.util.Spieler1vs1EloComparator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -33,7 +33,7 @@ public class KickerEloService { } public List getSpielerEntities() { - return spielerRepository.findAll().stream().sorted(new SpielerEloComparator()).toList(); + return spielerRepository.findAll().stream().sorted(new Spieler1vs1EloComparator()).toList(); } public void enterResult1vs1(String gewinnerName, String verliererName, diff --git a/src/main/java/org/kickerelo/kickerelo/util/SpielerEloComparator.java b/src/main/java/org/kickerelo/kickerelo/util/Spieler1vs1EloComparator.java similarity index 77% rename from src/main/java/org/kickerelo/kickerelo/util/SpielerEloComparator.java rename to src/main/java/org/kickerelo/kickerelo/util/Spieler1vs1EloComparator.java index 19e7d6d..57254fe 100644 --- a/src/main/java/org/kickerelo/kickerelo/util/SpielerEloComparator.java +++ b/src/main/java/org/kickerelo/kickerelo/util/Spieler1vs1EloComparator.java @@ -4,7 +4,7 @@ import org.kickerelo.kickerelo.data.Spieler; import java.util.Comparator; -public class SpielerEloComparator implements Comparator { +public class Spieler1vs1EloComparator implements Comparator { @Override public int compare(Spieler o1, Spieler o2) { return Float.compare(o1.getElo1vs1(), o2.getElo1vs1()); diff --git a/src/main/java/org/kickerelo/kickerelo/util/Spieler2vs2EloComparator.java b/src/main/java/org/kickerelo/kickerelo/util/Spieler2vs2EloComparator.java new file mode 100644 index 0000000..3886b2a --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/util/Spieler2vs2EloComparator.java @@ -0,0 +1,12 @@ +package org.kickerelo.kickerelo.util; + +import org.kickerelo.kickerelo.data.Spieler; + +import java.util.Comparator; + +public class Spieler2vs2EloComparator implements Comparator { + @Override + public int compare(Spieler o1, Spieler o2) { + return Float.compare(o1.getElo2vs2(), o2.getElo2vs2()); + } +} diff --git a/src/main/java/org/kickerelo/kickerelo/views/Chart1vs1.java b/src/main/java/org/kickerelo/kickerelo/views/Chart1vs1.java index f4583ab..f3985dc 100644 --- a/src/main/java/org/kickerelo/kickerelo/views/Chart1vs1.java +++ b/src/main/java/org/kickerelo/kickerelo/views/Chart1vs1.java @@ -8,16 +8,20 @@ import com.github.appreciated.apexcharts.config.chart.Type; import com.github.appreciated.apexcharts.config.chart.builder.ZoomBuilder; import com.github.appreciated.apexcharts.config.chart.zoom.ZoomType; import com.github.appreciated.apexcharts.helper.Series; +import org.kickerelo.kickerelo.data.Spieler; +import org.kickerelo.kickerelo.util.Spieler1vs1EloComparator; import java.math.BigDecimal; +import java.util.List; public class Chart1vs1 extends ApexChartsBuilder { - public Chart1vs1() { + public Chart1vs1(List l) { withChart(ChartBuilder.get().withType(Type.SCATTER) .withZoom(ZoomBuilder.get().withEnabled(true).withType(ZoomType.XY).build()).build()) .withSeries(new Series<>("ELO", - new BigDecimal[]{new BigDecimal(1), new BigDecimal(3)}, - new BigDecimal[]{new BigDecimal(2), new BigDecimal(4)})) - .withXaxis(XAxisBuilder.get().build()).withYaxis(YAxisBuilder.get().build()); + l.stream().sorted(new Spieler1vs1EloComparator()).map(Spieler::getElo1vs1).toArray() + )) + .withXaxis(XAxisBuilder.get().withCategories(l.stream().sorted(new Spieler1vs1EloComparator()).map(Spieler::getName).toList()).build()) + .withYaxis(YAxisBuilder.get().build()); } } diff --git a/src/main/java/org/kickerelo/kickerelo/views/Chart2vs2.java b/src/main/java/org/kickerelo/kickerelo/views/Chart2vs2.java new file mode 100644 index 0000000..8de13b8 --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/views/Chart2vs2.java @@ -0,0 +1,26 @@ +package org.kickerelo.kickerelo.views; + +import com.github.appreciated.apexcharts.ApexChartsBuilder; +import com.github.appreciated.apexcharts.config.builder.ChartBuilder; +import com.github.appreciated.apexcharts.config.builder.XAxisBuilder; +import com.github.appreciated.apexcharts.config.builder.YAxisBuilder; +import com.github.appreciated.apexcharts.config.chart.Type; +import com.github.appreciated.apexcharts.config.chart.builder.ZoomBuilder; +import com.github.appreciated.apexcharts.config.chart.zoom.ZoomType; +import com.github.appreciated.apexcharts.helper.Series; +import org.kickerelo.kickerelo.data.Spieler; +import org.kickerelo.kickerelo.util.Spieler2vs2EloComparator; + +import java.util.List; + +public class Chart2vs2 extends ApexChartsBuilder { + public Chart2vs2(List l) { + withChart(ChartBuilder.get().withType(Type.SCATTER) + .withZoom(ZoomBuilder.get().withEnabled(true).withType(ZoomType.XY).build()).build()) + .withSeries(new Series<>("ELO", + l.stream().sorted(new Spieler2vs2EloComparator()).map(Spieler::getElo2vs2).toArray() + )) + .withXaxis(XAxisBuilder.get().withCategories(l.stream().sorted(new Spieler2vs2EloComparator()).map(Spieler::getName).toList()).build()) + .withYaxis(YAxisBuilder.get().build()); + } +} diff --git a/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java b/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java index f188bfa..73d7136 100644 --- a/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java +++ b/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java @@ -1,14 +1,20 @@ package org.kickerelo.kickerelo.views; import com.github.appreciated.apexcharts.ApexChartsBuilder; +import com.vaadin.flow.component.html.H2; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.Route; +import org.kickerelo.kickerelo.service.KickerEloService; +import org.springframework.beans.factory.annotation.Autowired; @Route("graph1vs1") public class Graph1vs1View extends VerticalLayout { - ApexChartsBuilder chart1vs1 = new Chart1vs1(); - public Graph1vs1View() { - add(chart1vs1.build()); + + ApexChartsBuilder chart1vs1; + public Graph1vs1View(KickerEloService service) { + H2 subheading = new H2("1 vs 1 Elo"); + chart1vs1 = new Chart1vs1(service.getSpielerEntities()); + add(chart1vs1.build(), subheading); } } diff --git a/src/main/java/org/kickerelo/kickerelo/views/Graph2vs2View.java b/src/main/java/org/kickerelo/kickerelo/views/Graph2vs2View.java new file mode 100644 index 0000000..46a5107 --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/views/Graph2vs2View.java @@ -0,0 +1,17 @@ +package org.kickerelo.kickerelo.views; + +import com.github.appreciated.apexcharts.ApexChartsBuilder; +import com.vaadin.flow.component.html.H2; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.router.Route; +import org.kickerelo.kickerelo.service.KickerEloService; + +@Route("graph2vs2") +public class Graph2vs2View extends VerticalLayout { + ApexChartsBuilder chart2vs2; + public Graph2vs2View(KickerEloService service) { + H2 subheading = new H2("2 vs 2 Elo"); + chart2vs2 = new Chart2vs2(service.getSpielerEntities()); + add(chart2vs2.build(), subheading); + } +} diff --git a/src/main/java/org/kickerelo/kickerelo/views/PlayerListView.java b/src/main/java/org/kickerelo/kickerelo/views/PlayerListView.java index 53c83b4..1fd8d79 100644 --- a/src/main/java/org/kickerelo/kickerelo/views/PlayerListView.java +++ b/src/main/java/org/kickerelo/kickerelo/views/PlayerListView.java @@ -23,13 +23,14 @@ public class PlayerListView extends VerticalLayout { playerGrid.removeColumnByKey("id"); playerGrid.removeColumnByKey("elo_alt"); Grid.Column nameColumn = playerGrid.getColumnByKey("name"); - Grid.Column eloColumn = playerGrid.getColumnByKey("elo"); + Grid.Column elo1vs1Column = playerGrid.getColumnByKey("elo1vs1"); + Grid.Column elo2vs2Column = playerGrid.getColumnByKey("elo2vs2"); nameColumn.setHeader("Name"); - eloColumn.setHeader("Elo"); + elo1vs1Column.setHeader("Elo 1 vs 1"); - playerGrid.setColumnOrder(nameColumn, eloColumn); + playerGrid.setColumnOrder(nameColumn, elo1vs1Column, elo2vs2Column); - GridSortOrder sortOrder = new GridSortOrder<>(eloColumn, SortDirection.DESCENDING); + GridSortOrder sortOrder = new GridSortOrder<>(elo1vs1Column, SortDirection.DESCENDING); playerGrid.sort(List.of(sortOrder)); add(subheading, playerGrid); }