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);
+ }
+}