diff --git a/pom.xml b/pom.xml index aacfdfd..8a4aacf 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,16 @@ 24.6.4 + + + Vaadin Directory + https://maven.vaadin.com/vaadin-addons + + false + + + + org.springframework.boot @@ -31,6 +41,11 @@ com.vaadin vaadin-spring-boot-starter + + com.github.appreciated + apexcharts + 24.0.1 + org.mariadb.jdbc diff --git a/src/main/java/org/kickerelo/kickerelo/layout/KickerAppLayout.java b/src/main/java/org/kickerelo/kickerelo/layout/KickerAppLayout.java index 4b2a430..e77af40 100644 --- a/src/main/java/org/kickerelo/kickerelo/layout/KickerAppLayout.java +++ b/src/main/java/org/kickerelo/kickerelo/layout/KickerAppLayout.java @@ -13,6 +13,8 @@ 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; @Layout public class KickerAppLayout extends AppLayout { @@ -27,8 +29,10 @@ public class KickerAppLayout extends AppLayout { RouterLink enter1vs1 = new RouterLink("1 vs 1", Enter1vs1View.class); 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); - Tabs tabs = new Tabs(new Tab(enter1vs1), new Tab(enter2vs2)); + Tabs tabs = new Tabs(new Tab(enter1vs1), new Tab(enter2vs2), new Tab(playerList), new Tab(graph1vs1)); tabs.setOrientation(Tabs.Orientation.VERTICAL); addToDrawer(tabs); } diff --git a/src/main/java/org/kickerelo/kickerelo/repository/SpielerRepository.java b/src/main/java/org/kickerelo/kickerelo/repository/SpielerRepository.java index 833de58..44e340a 100644 --- a/src/main/java/org/kickerelo/kickerelo/repository/SpielerRepository.java +++ b/src/main/java/org/kickerelo/kickerelo/repository/SpielerRepository.java @@ -4,6 +4,7 @@ import org.kickerelo.kickerelo.data.Spieler; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; @Repository diff --git a/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java b/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java index 73931af..1217b2b 100644 --- a/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java +++ b/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java @@ -11,6 +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.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,7 +29,11 @@ public class KickerEloService { private EloCalculationService eloCalculationService; public List getSpielerNamen() { - return spielerRepository.findAll().stream().map(Spieler::getName).toList(); + return spielerRepository.findAll().stream().map(Spieler::getName).sorted().toList(); + } + + public List getSpielerEntities() { + return spielerRepository.findAll().stream().sorted(new SpielerEloComparator()).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/SpielerEloComparator.java new file mode 100644 index 0000000..f7801eb --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/util/SpielerEloComparator.java @@ -0,0 +1,12 @@ +package org.kickerelo.kickerelo.util; + +import org.kickerelo.kickerelo.data.Spieler; + +import java.util.Comparator; + +public class SpielerEloComparator implements Comparator { + @Override + public int compare(Spieler o1, Spieler o2) { + return Float.compare(o1.getElo(), o2.getElo()); + } +} diff --git a/src/main/java/org/kickerelo/kickerelo/views/Chart1vs1.java b/src/main/java/org/kickerelo/kickerelo/views/Chart1vs1.java new file mode 100644 index 0000000..f4583ab --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/views/Chart1vs1.java @@ -0,0 +1,23 @@ +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 java.math.BigDecimal; + +public class Chart1vs1 extends ApexChartsBuilder { + public Chart1vs1() { + 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()); + } +} diff --git a/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java b/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java new file mode 100644 index 0000000..f188bfa --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java @@ -0,0 +1,14 @@ +package org.kickerelo.kickerelo.views; + +import com.github.appreciated.apexcharts.ApexChartsBuilder; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.router.Route; + +@Route("graph1vs1") +public class Graph1vs1View extends VerticalLayout { + ApexChartsBuilder chart1vs1 = new Chart1vs1(); + public Graph1vs1View() { + add(chart1vs1.build()); + } + +} diff --git a/src/main/java/org/kickerelo/kickerelo/views/PlayerListView.java b/src/main/java/org/kickerelo/kickerelo/views/PlayerListView.java new file mode 100644 index 0000000..53c83b4 --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/views/PlayerListView.java @@ -0,0 +1,36 @@ +package org.kickerelo.kickerelo.views; + +import com.vaadin.flow.component.grid.Grid; +import com.vaadin.flow.component.grid.GridSortOrder; +import com.vaadin.flow.component.html.H2; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.data.provider.SortDirection; +import com.vaadin.flow.router.Route; +import org.kickerelo.kickerelo.data.Spieler; +import org.kickerelo.kickerelo.service.KickerEloService; + +import java.util.List; + +@Route("playerlist") +public class PlayerListView extends VerticalLayout { + public PlayerListView(KickerEloService eloService) { + H2 subheading = new H2("Spielerliste"); + + List players = eloService.getSpielerEntities(); + Grid playerGrid = new Grid<>(Spieler.class); + + playerGrid.setItems(players); + playerGrid.removeColumnByKey("id"); + playerGrid.removeColumnByKey("elo_alt"); + Grid.Column nameColumn = playerGrid.getColumnByKey("name"); + Grid.Column eloColumn = playerGrid.getColumnByKey("elo"); + nameColumn.setHeader("Name"); + eloColumn.setHeader("Elo"); + + playerGrid.setColumnOrder(nameColumn, eloColumn); + + GridSortOrder sortOrder = new GridSortOrder<>(eloColumn, SortDirection.DESCENDING); + playerGrid.sort(List.of(sortOrder)); + add(subheading, playerGrid); + } +}