5
0
mirror of https://github.com/AJMicke/KickerELO.git synced 2026-03-11 13:31:02 +01:00

Add working ELO graphs

This commit is contained in:
Anton Micke
2025-02-07 15:38:48 +01:00
parent 9f6589d8d2
commit f25c9a33a2
9 changed files with 85 additions and 19 deletions

View File

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

View File

@@ -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<Spieler> getSpielerEntities() {
return spielerRepository.findAll().stream().sorted(new SpielerEloComparator()).toList();
return spielerRepository.findAll().stream().sorted(new Spieler1vs1EloComparator()).toList();
}
public void enterResult1vs1(String gewinnerName, String verliererName,

View File

@@ -4,7 +4,7 @@ import org.kickerelo.kickerelo.data.Spieler;
import java.util.Comparator;
public class SpielerEloComparator implements Comparator<Spieler> {
public class Spieler1vs1EloComparator implements Comparator<Spieler> {
@Override
public int compare(Spieler o1, Spieler o2) {
return Float.compare(o1.getElo1vs1(), o2.getElo1vs1());

View File

@@ -0,0 +1,12 @@
package org.kickerelo.kickerelo.util;
import org.kickerelo.kickerelo.data.Spieler;
import java.util.Comparator;
public class Spieler2vs2EloComparator implements Comparator<Spieler> {
@Override
public int compare(Spieler o1, Spieler o2) {
return Float.compare(o1.getElo2vs2(), o2.getElo2vs2());
}
}

View File

@@ -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<Spieler> 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());
}
}

View File

@@ -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<Spieler> 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());
}
}

View File

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

View File

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

View File

@@ -23,13 +23,14 @@ public class PlayerListView extends VerticalLayout {
playerGrid.removeColumnByKey("id");
playerGrid.removeColumnByKey("elo_alt");
Grid.Column<Spieler> nameColumn = playerGrid.getColumnByKey("name");
Grid.Column<Spieler> eloColumn = playerGrid.getColumnByKey("elo");
Grid.Column<Spieler> elo1vs1Column = playerGrid.getColumnByKey("elo1vs1");
Grid.Column<Spieler> 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<Spieler> sortOrder = new GridSortOrder<>(eloColumn, SortDirection.DESCENDING);
GridSortOrder<Spieler> sortOrder = new GridSortOrder<>(elo1vs1Column, SortDirection.DESCENDING);
playerGrid.sort(List.of(sortOrder));
add(subheading, playerGrid);
}