diff --git a/.gitignore b/.gitignore index 4b3d37f..d2297c3 100644 --- a/.gitignore +++ b/.gitignore @@ -97,3 +97,5 @@ fabric.properties hs_err_pid* .gitignore + +src/main/resources/META-INF/resources/images/games/* \ No newline at end of file diff --git a/README.md b/README.md index ead3634..0247bf0 100644 --- a/README.md +++ b/README.md @@ -13,16 +13,16 @@ This project was created from https://start.vaadin.com. To run from the command line, use `mvn` and open http://localhost:8080 in your browser. ### Running and debugging the application in Intellij IDEA -- Locate the Application.java class in the Project view. It is in the src folder, under the main package's root. -- Right-click on the Application class -- Select "Debug 'Application.main()'" from the list +- Locate the app.Application.java class in the Project view. It is in the src folder, under the main package's root. +- Right-click on the app.Application class +- Select "Debug 'app.Application.main()'" from the list After the application has started, you can view it at http://localhost:8080/ in your browser. You can now also attach breakpoints in code for debugging purposes, by clicking next to a line number in any source file. ### Running and debugging the application in Eclipse -- Locate the Application.java class in the Package Explorer. It is in `src/main/java`, under the main package. -- Right-click on the file and select `Debug As` --> `Java Application`. +- Locate the app.Application.java class in the Package Explorer. It is in `src/main/java`, under the main package. +- Right-click on the file and select `Debug As` --> `Java app.Application`. Do not worry if the debugger breaks at a `SilentExitException`. This is a Spring Boot feature and happens on every startup. @@ -30,9 +30,9 @@ After the application has started, you can view it at http://localhost:8080/ in You can now also attach breakpoints in code for debugging purposes, by clicking next to a line number in any source file. ## Project structure -- `MainView.java` in `src/main/java` contains the navigation setup. It uses [App Layout](https://vaadin.com/components/vaadin-app-layout). -- `views` package in `src/main/java` contains the server-side Java views of your application. -- `views` folder in `frontend/` contains the client-side JavaScript views of your application. +- `MainView.java` in `src/main/java` contains the app.navigation setup. It uses [App Layout](https://vaadin.com/components/vaadin-app-layout). +- `app.views` package in `src/main/java` contains the server-side Java app.views of your application. +- `app.views` folder in `frontend/` contains the client-side JavaScript app.views of your application. ## What next? diff --git a/db/db_init.sql b/db/db_init.sql index afd0455..409333c 100644 --- a/db/db_init.sql +++ b/db/db_init.sql @@ -1,8 +1,8 @@ --- Database: chessleague +-- Database: app --- DROP DATABASE chessleague; +-- DROP DATABASE app; --- CREATE DATABASE chessleague +-- CREATE DATABASE app -- WITH -- OWNER = postgres -- ENCODING = 'UTF8' @@ -357,137 +357,137 @@ INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 9, 5, 26); INSERT INTO "match" ("player1", "player2", "matchday") VALUES ( 7, 13, 26); INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 2, 26); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8722014513'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8722014513')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8722014513'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8722014513')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8723231941'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8723231941')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8723231941'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8723231941')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8724907847'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8724907847')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8724907847'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8724907847')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8725036665'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8725036665')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8725036665'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8725036665')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8725614379'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8725614379')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8725614379'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8725614379')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8726184583'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8726184583')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8726184583'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=2 AND player2=9 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8726184583')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8616485043'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8616485043')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8616485043'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8616485043')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8618149677'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8618149677')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8618149677'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8618149677')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8702757001'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8702757001')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8702757001'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8702757001')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8705204521'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8705204521')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8705204521'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8705204521')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8705796221'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8705796221')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8705796221'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8705796221')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8706438057'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8706438057')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8706438057'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=14 AND player2=7 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8706438057')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8617630129'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8617630129')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8617630129'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8617630129')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8618225533'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8618225533')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8618225533'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8618225533')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8619306585'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8619306585')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8619306585'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8619306585')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8619471075'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8619471075')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8619471075'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8619471075')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8620078695'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8620078695')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8620078695'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8620078695')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8620568591'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8620568591')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8620568591'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=10 AND player2=4 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8620568591')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8504667551'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, 0, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8504667551')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8504667551'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, 0, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8504667551')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8505882389'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8505882389')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8505882389'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8505882389')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8507004247'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8507004247')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8507004247'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8507004247')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8507617133'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8507617133')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8507617133'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8507617133')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8508203475'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8508203475')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8508203475'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8508203475')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8508297031'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8508297031')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8508297031'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=13 AND player2=6 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8508297031')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8624735639'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8624735639')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8624735639'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8624735639')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8625353555'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8625353555')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8625353555'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8625353555')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8625963087'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8625963087')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8625963087'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8625963087')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8853361491'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8853361491')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8853361491'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8853361491')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8853455035'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8853455035')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8853455035'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8853455035')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8854002505'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8854002505')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8854002505'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=11 AND player2=8 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8854002505')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8858219835'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8858219835')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8858219835'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8858219835')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8859375675'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8859375675')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8859375675'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8859375675')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8859976305'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8859976305')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8859976305'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8859976305')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8860591347'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8860591347')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8860591347'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8860591347')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8860675419'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8860675419')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8860675419'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8860675419')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8861228997'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8861228997')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8861228997'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=12 AND player2=1 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8861228997')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8877523129'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8877523129')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8877523129'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8877523129')); -INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/live/game/8878652939'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8878652939')); +INSERT INTO "game_info" (time_control, url)VALUES ('600', 'https://www.chess.com/game/live/8878652939'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8878652939')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8879853665'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8879853665')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8879853665'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8879853665')); -INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/live/game/8880469509'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8880469509')); +INSERT INTO "game_info" (time_control, url)VALUES ('300', 'https://www.chess.com/game/live/8880469509'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, 1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8880469509')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8881562307'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8881562307')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8881562307'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), FALSE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8881562307')); -INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/live/game/8881610243'); -INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/live/game/8881610243')); +INSERT INTO "game_info" (time_control, url)VALUES ('180', 'https://www.chess.com/game/live/8881610243'); +INSERT INTO "game" (match, player1_is_white, result, info) VALUES ((SELECT id from match WHERE player1=5 AND player2=3 AND matchday=1), TRUE, -1, (SELECT id from game_info WHERE url='https://www.chess.com/game/live/8881610243')); diff --git a/frontend/components/leafletmap/leaflet-map.js b/frontend/app/components/leafletmap/leaflet-map.js similarity index 100% rename from frontend/components/leafletmap/leaflet-map.js rename to frontend/app/components/leafletmap/leaflet-map.js diff --git a/frontend/views/about/about-view.css b/frontend/app/views/about/about-view.css similarity index 100% rename from frontend/views/about/about-view.css rename to frontend/app/views/about/about-view.css diff --git a/frontend/views/addressform/address-form-view.css b/frontend/app/views/addressform/address-form-view.css similarity index 100% rename from frontend/views/addressform/address-form-view.css rename to frontend/app/views/addressform/address-form-view.css diff --git a/frontend/views/cardlist/card-list-view.css b/frontend/app/views/cardlist/card-list-view.css similarity index 100% rename from frontend/views/cardlist/card-list-view.css rename to frontend/app/views/cardlist/card-list-view.css diff --git a/frontend/views/creditcardform/credit-card-form-view.css b/frontend/app/views/creditcardform/credit-card-form-view.css similarity index 100% rename from frontend/views/creditcardform/credit-card-form-view.css rename to frontend/app/views/creditcardform/credit-card-form-view.css diff --git a/frontend/views/helloworld/hello-world-view.css b/frontend/app/views/helloworld/hello-world-view.css similarity index 100% rename from frontend/views/helloworld/hello-world-view.css rename to frontend/app/views/helloworld/hello-world-view.css diff --git a/frontend/views/main/main-view.css b/frontend/app/views/main/main-view.css similarity index 100% rename from frontend/views/main/main-view.css rename to frontend/app/views/main/main-view.css diff --git a/frontend/views/map/map-view.css b/frontend/app/views/map/map-view.css similarity index 100% rename from frontend/views/map/map-view.css rename to frontend/app/views/map/map-view.css diff --git a/frontend/views/masterdetail/master-detail-view.css b/frontend/app/views/masterdetail/master-detail-view.css similarity index 100% rename from frontend/views/masterdetail/master-detail-view.css rename to frontend/app/views/masterdetail/master-detail-view.css diff --git a/frontend/views/personform/person-form-view.css b/frontend/app/views/personform/person-form-view.css similarity index 100% rename from frontend/views/personform/person-form-view.css rename to frontend/app/views/personform/person-form-view.css diff --git a/frontend/views/results/results-view.css b/frontend/app/views/results/results-view.css similarity index 100% rename from frontend/views/results/results-view.css rename to frontend/app/views/results/results-view.css diff --git a/frontend/views/table/table-view.css b/frontend/app/views/table/table-view.css similarity index 100% rename from frontend/views/table/table-view.css rename to frontend/app/views/table/table-view.css diff --git a/pom.xml b/pom.xml index 21a46da..26bd1a5 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ com.vaadin - + vaadin diff --git a/src/main/java/com/example/application/Application.java b/src/main/java/app/Application.java similarity index 94% rename from src/main/java/com/example/application/Application.java rename to src/main/java/app/Application.java index bcbda61..fdf3b16 100644 --- a/src/main/java/com/example/application/Application.java +++ b/src/main/java/app/Application.java @@ -1,4 +1,4 @@ -package com.example.application; +package app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/src/main/java/com/example/application/components/leafletmap/LeafletMap.java b/src/main/java/app/components/leafletmap/LeafletMap.java similarity index 83% rename from src/main/java/com/example/application/components/leafletmap/LeafletMap.java rename to src/main/java/app/components/leafletmap/LeafletMap.java index 41bcbda..654991b 100644 --- a/src/main/java/com/example/application/components/leafletmap/LeafletMap.java +++ b/src/main/java/app/components/leafletmap/LeafletMap.java @@ -1,4 +1,4 @@ -package com.example.application.components.leafletmap; +package app.components.leafletmap; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.HasSize; @@ -7,7 +7,7 @@ import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.dependency.JsModule; @CssImport("leaflet/dist/leaflet.css") -@JsModule("./components/leafletmap/leaflet-map.js") +@JsModule("app/components/leafletmap/leaflet-map.js") @Tag("leaflet-map") public class LeafletMap extends Component implements HasSize { diff --git a/src/main/java/com/example/application/components/navigation/SeasonAndMatchdayNavigation.java b/src/main/java/app/components/navigation/SeasonAndMatchdayNavigation.java similarity index 84% rename from src/main/java/com/example/application/components/navigation/SeasonAndMatchdayNavigation.java rename to src/main/java/app/components/navigation/SeasonAndMatchdayNavigation.java index d4e433a..8171b2f 100644 --- a/src/main/java/com/example/application/components/navigation/SeasonAndMatchdayNavigation.java +++ b/src/main/java/app/components/navigation/SeasonAndMatchdayNavigation.java @@ -1,6 +1,6 @@ -package com.example.application.components.navigation; +package app.components.navigation; -import com.example.application.navigation.Navigation; +import app.navigation.Navigation; import com.vaadin.flow.component.html.Label; import com.vaadin.flow.component.orderedlayout.FlexComponent; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; diff --git a/src/main/java/com/example/application/data/AbstractEntity.java b/src/main/java/app/data/AbstractEntity.java similarity index 95% rename from src/main/java/com/example/application/data/AbstractEntity.java rename to src/main/java/app/data/AbstractEntity.java index 96f139f..8fd809d 100644 --- a/src/main/java/com/example/application/data/AbstractEntity.java +++ b/src/main/java/app/data/AbstractEntity.java @@ -1,4 +1,4 @@ -package com.example.application.data; +package app.data; import javax.persistence.GeneratedValue; import javax.persistence.Id; diff --git a/src/main/java/com/example/application/data/bean/CalculatedMatch.java b/src/main/java/app/data/bean/CalculatedMatch.java similarity index 88% rename from src/main/java/com/example/application/data/bean/CalculatedMatch.java rename to src/main/java/app/data/bean/CalculatedMatch.java index 02e4b38..fbdf1cf 100644 --- a/src/main/java/com/example/application/data/bean/CalculatedMatch.java +++ b/src/main/java/app/data/bean/CalculatedMatch.java @@ -1,7 +1,7 @@ -package com.example.application.data.bean; +package app.data.bean; -import com.example.application.data.entity.Match; -import com.example.application.data.entity.Player; +import app.data.entity.Match; +import app.data.entity.Player; public class CalculatedMatch { private Match match; diff --git a/src/main/java/com/example/application/data/bean/PlayerForTable.java b/src/main/java/app/data/bean/PlayerForTable.java similarity index 97% rename from src/main/java/com/example/application/data/bean/PlayerForTable.java rename to src/main/java/app/data/bean/PlayerForTable.java index 27726ae..3fc542e 100644 --- a/src/main/java/com/example/application/data/bean/PlayerForTable.java +++ b/src/main/java/app/data/bean/PlayerForTable.java @@ -1,6 +1,6 @@ -package com.example.application.data.bean; +package app.data.bean; -import com.example.application.data.entity.Player; +import app.data.entity.Player; public class PlayerForTable { private Player player; diff --git a/src/main/java/com/example/application/data/chesscom/ChessComArchive.java b/src/main/java/app/data/chesscom/ChessComArchive.java similarity index 84% rename from src/main/java/com/example/application/data/chesscom/ChessComArchive.java rename to src/main/java/app/data/chesscom/ChessComArchive.java index c2ad97e..9283cd8 100644 --- a/src/main/java/com/example/application/data/chesscom/ChessComArchive.java +++ b/src/main/java/app/data/chesscom/ChessComArchive.java @@ -1,4 +1,4 @@ -package com.example.application.data.chesscom; +package app.data.chesscom; import java.util.List; diff --git a/src/main/java/com/example/application/data/chesscom/ChessComArchiveList.java b/src/main/java/app/data/chesscom/ChessComArchiveList.java similarity index 84% rename from src/main/java/com/example/application/data/chesscom/ChessComArchiveList.java rename to src/main/java/app/data/chesscom/ChessComArchiveList.java index fb10c17..c9b139b 100644 --- a/src/main/java/com/example/application/data/chesscom/ChessComArchiveList.java +++ b/src/main/java/app/data/chesscom/ChessComArchiveList.java @@ -1,4 +1,4 @@ -package com.example.application.data.chesscom; +package app.data.chesscom; import java.util.List; diff --git a/src/main/java/com/example/application/data/chesscom/ChessComGame.java b/src/main/java/app/data/chesscom/ChessComGame.java similarity index 98% rename from src/main/java/com/example/application/data/chesscom/ChessComGame.java rename to src/main/java/app/data/chesscom/ChessComGame.java index f7f4262..5fcc4c5 100644 --- a/src/main/java/com/example/application/data/chesscom/ChessComGame.java +++ b/src/main/java/app/data/chesscom/ChessComGame.java @@ -1,4 +1,4 @@ -package com.example.application.data.chesscom; +package app.data.chesscom; public class ChessComGame { private String url; diff --git a/src/main/java/com/example/application/data/entity/Game.java b/src/main/java/app/data/entity/Game.java similarity index 97% rename from src/main/java/com/example/application/data/entity/Game.java rename to src/main/java/app/data/entity/Game.java index 22b18fd..9d0de0b 100644 --- a/src/main/java/com/example/application/data/entity/Game.java +++ b/src/main/java/app/data/entity/Game.java @@ -1,4 +1,4 @@ -package com.example.application.data.entity; +package app.data.entity; import javax.persistence.*; import java.util.Objects; diff --git a/src/main/java/com/example/application/data/entity/GameInfo.java b/src/main/java/app/data/entity/GameInfo.java similarity index 97% rename from src/main/java/com/example/application/data/entity/GameInfo.java rename to src/main/java/app/data/entity/GameInfo.java index 4c73968..48eecef 100644 --- a/src/main/java/com/example/application/data/entity/GameInfo.java +++ b/src/main/java/app/data/entity/GameInfo.java @@ -1,4 +1,4 @@ -package com.example.application.data.entity; +package app.data.entity; import javax.persistence.*; import java.util.Objects; diff --git a/src/main/java/com/example/application/data/entity/Match.java b/src/main/java/app/data/entity/Match.java similarity index 97% rename from src/main/java/com/example/application/data/entity/Match.java rename to src/main/java/app/data/entity/Match.java index 21d21f7..554ac12 100644 --- a/src/main/java/com/example/application/data/entity/Match.java +++ b/src/main/java/app/data/entity/Match.java @@ -1,4 +1,4 @@ -package com.example.application.data.entity; +package app.data.entity; import javax.persistence.*; import java.util.Collection; diff --git a/src/main/java/com/example/application/data/entity/Matchday.java b/src/main/java/app/data/entity/Matchday.java similarity index 97% rename from src/main/java/com/example/application/data/entity/Matchday.java rename to src/main/java/app/data/entity/Matchday.java index f940dcb..f267f28 100644 --- a/src/main/java/com/example/application/data/entity/Matchday.java +++ b/src/main/java/app/data/entity/Matchday.java @@ -1,4 +1,4 @@ -package com.example.application.data.entity; +package app.data.entity; import javax.persistence.*; import java.util.Collection; diff --git a/src/main/java/com/example/application/data/entity/Player.java b/src/main/java/app/data/entity/Player.java similarity index 98% rename from src/main/java/com/example/application/data/entity/Player.java rename to src/main/java/app/data/entity/Player.java index f5e1bf7..8669b90 100644 --- a/src/main/java/com/example/application/data/entity/Player.java +++ b/src/main/java/app/data/entity/Player.java @@ -1,4 +1,4 @@ -package com.example.application.data.entity; +package app.data.entity; import javax.persistence.*; import java.util.Collection; diff --git a/src/main/java/com/example/application/data/entity/PlayerInfo.java b/src/main/java/app/data/entity/PlayerInfo.java similarity index 96% rename from src/main/java/com/example/application/data/entity/PlayerInfo.java rename to src/main/java/app/data/entity/PlayerInfo.java index 034d2a1..45adaf4 100644 --- a/src/main/java/com/example/application/data/entity/PlayerInfo.java +++ b/src/main/java/app/data/entity/PlayerInfo.java @@ -1,4 +1,4 @@ -package com.example.application.data.entity; +package app.data.entity; import javax.persistence.*; import java.util.Objects; diff --git a/src/main/java/com/example/application/data/entity/SampleAddress.java b/src/main/java/app/data/entity/SampleAddress.java similarity index 90% rename from src/main/java/com/example/application/data/entity/SampleAddress.java rename to src/main/java/app/data/entity/SampleAddress.java index 9dcea51..59e69e9 100644 --- a/src/main/java/com/example/application/data/entity/SampleAddress.java +++ b/src/main/java/app/data/entity/SampleAddress.java @@ -1,6 +1,6 @@ -package com.example.application.data.entity; +package app.data.entity; -import com.example.application.data.AbstractEntity; +import app.data.AbstractEntity; import javax.persistence.Entity; diff --git a/src/main/java/com/example/application/data/entity/SamplePerson.java b/src/main/java/app/data/entity/SamplePerson.java similarity index 93% rename from src/main/java/com/example/application/data/entity/SamplePerson.java rename to src/main/java/app/data/entity/SamplePerson.java index 0dce05b..40204be 100644 --- a/src/main/java/com/example/application/data/entity/SamplePerson.java +++ b/src/main/java/app/data/entity/SamplePerson.java @@ -1,6 +1,6 @@ -package com.example.application.data.entity; +package app.data.entity; -import com.example.application.data.AbstractEntity; +import app.data.AbstractEntity; import javax.persistence.Entity; import java.time.LocalDate; diff --git a/src/main/java/com/example/application/data/entity/Season.java b/src/main/java/app/data/entity/Season.java similarity index 97% rename from src/main/java/com/example/application/data/entity/Season.java rename to src/main/java/app/data/entity/Season.java index ecaac56..0dad9b7 100644 --- a/src/main/java/com/example/application/data/entity/Season.java +++ b/src/main/java/app/data/entity/Season.java @@ -1,4 +1,4 @@ -package com.example.application.data.entity; +package app.data.entity; import javax.persistence.*; import java.util.Collection; diff --git a/src/main/java/com/example/application/data/generator/DataGenerator.java b/src/main/java/app/data/generator/DataGenerator.java similarity index 94% rename from src/main/java/com/example/application/data/generator/DataGenerator.java rename to src/main/java/app/data/generator/DataGenerator.java index 9aab05f..10a3b61 100644 --- a/src/main/java/com/example/application/data/generator/DataGenerator.java +++ b/src/main/java/app/data/generator/DataGenerator.java @@ -1,6 +1,6 @@ -package com.example.application.data.generator; +package app.data.generator; -import com.example.application.data.service.SamplePersonRepository; +import app.data.service.SamplePersonRepository; import com.vaadin.flow.spring.annotation.SpringComponent; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Bean; diff --git a/src/main/java/app/data/service/ChessComService.java b/src/main/java/app/data/service/ChessComService.java new file mode 100644 index 0000000..80ce226 --- /dev/null +++ b/src/main/java/app/data/service/ChessComService.java @@ -0,0 +1,142 @@ +package app.data.service; + +import app.data.chesscom.ChessComArchive; +import app.data.chesscom.ChessComArchiveList; +import app.data.chesscom.ChessComGame; +import app.data.entity.Game; +import app.data.entity.GameInfo; +import app.data.entity.Match; +import app.data.entity.Player; +import app.utils.ChessComUtils; +import app.utils.HttpUtils; +import com.google.gson.Gson; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Service +public class ChessComService { + // TODO: make everything nullsafe + + private static final Gson gson = new Gson(); + private static final String ARCHIVES_ENDPOINT = "https://api.chess.com/pub/player/{username}/games/archives"; + + public ChessComService() { + } + + @NonNull + public List getLatestGamesBetweenPlayers(@NonNull Match match, int minAmountOfGames, int maxAmountOfMonths) { + List list = new ArrayList<>(); + for (String archiveUrl : getLatestArchiveUrls(match.getPlayer1(), maxAmountOfMonths)) { + list.addAll(getChessComGames(archiveUrl).stream() + .sorted(Comparator.comparingLong(ChessComGame::getEndTime).reversed()) + .filter(chessComGame -> ChessComUtils.isGameBetweenPlayers(chessComGame, match)) + .filter(ChessComUtils::hasValidTimeControl) + .map(chessComGame -> createGame(chessComGame, match)) + .collect(Collectors.toList())); + + if (list.size() >= minAmountOfGames) { + break; + } + } + return list; + } // TODO: find exactly two games of each time control + + private List getChessComGames(String archiveUrl) { + List list = new ArrayList<>(); + getChessComArchive(archiveUrl).ifPresent(chessComArchive -> list.addAll(chessComArchive.getGames())); + return list; + } + + private Optional getChessComArchive(String archiveUrl) { + String unpreparedJson = HttpUtils.getJson(archiveUrl); + if (unpreparedJson == null) { + return Optional.empty(); + } + String preparedJson = ChessComUtils.getPreparedArchiveJson(unpreparedJson); + return Optional.of(gson.fromJson(preparedJson, ChessComArchive.class)); + } + + private List getLatestArchiveUrls(@NonNull Player player, int maxAmountOfMonths) { + List archiveUrls = getArchiveUrls(player); + if (archiveUrls.size() >= maxAmountOfMonths) { + archiveUrls = archiveUrls.subList(0, maxAmountOfMonths); + } + return archiveUrls; + } + + private List getArchiveUrls(@NonNull Player player) { + String endPoint = ARCHIVES_ENDPOINT.replace("{username}", ChessComUtils.getUsernameForUrl(player)); + + List archiveUrls = gson.fromJson(HttpUtils.getJson(endPoint), ChessComArchiveList.class).getArchives(); + archiveUrls.sort(Collections.reverseOrder()); + return archiveUrls; + } + + @NonNull + private Game createGame(@NonNull ChessComGame chessComGame, @NonNull Match match) { + Game game = new Game(); + GameInfo gameInfo = new GameInfo(); + + game.setMatch(match); + game.setPlayer1IsWhite(chessComGame.getWhite().getUsername().equals(match.getPlayer1().getNickname())); + game.setResult(ChessComUtils.getResult(chessComGame)); + game.setGameInfo(gameInfo); + + gameInfo.setUrl(chessComGame.getUrl()); + gameInfo.setTimeControl(chessComGame.getTimeControl()); + gameInfo.setGame(game); + + return game; + } + + public Optional getChessComGame(@NonNull Game game) { + return getChessComGame(game, game.getMatch().getPlayer1()) + .or(() -> getChessComGame(game, game.getMatch().getPlayer2())); + } + + private Optional getChessComGame(@NonNull Game game, Player player) { + if (!(game.getMatch().getPlayer1().equals(player) || game.getMatch().getPlayer2().equals(player))) { + throw new IllegalArgumentException("Player must be participating in Game!"); + } + for (String archiveUrl : getArchiveUrls(player)) { + Optional chessComArchive = getChessComArchive(archiveUrl); + if (chessComArchive.isEmpty()) { + continue; + } + List chessComGames = chessComArchive.get().getGames(); + for (ChessComGame chessComGame : chessComGames) { + if (chessComGame.getUrl().equals(game.getGameInfo().getUrl())) { + return Optional.of(chessComGame); + } + } + } + return Optional.empty(); + } +// return getArchiveUrls(player).stream() +// .map(this::getChessComArchive) +// .flatMap(chessComArchive -> chessComArchive.orElseThrow().getGames().stream()) +// .filter(chessComGame -> chessComGame.getUrl().equals(game.getGameInfo().getUrl())) +// .findFirst(); + +// .forEach(g -> g +// .filter(chessComGame -> chessComGame.getUrl().equals(game.getGameInfo().getUrl()))) +// .findFirst(); +// } +// private Optional getChessComGame(@NonNull Game game, Player player) { +// if (!(game.getMatch().getPlayer1().equals(player) || game.getMatch().getPlayer2().equals(player))) { +// throw new IllegalArgumentException("Player must be participating in Game!"); +// } +// return getArchiveUrls(player).stream() +// .map(this::getChessComArchive) +// .flatMap((Function, Stream>) +// chessComArchive -> chessComArchive.stream() +// .flatMap(archive -> archive.getGames().stream())) +// .filter(chessComGame -> chessComGame.getUrl().equals(game.getGameInfo().getUrl())) +// .findFirst(); +// } +} diff --git a/src/main/java/com/example/application/data/service/GameInfoRepository.java b/src/main/java/app/data/service/GameInfoRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/GameInfoRepository.java rename to src/main/java/app/data/service/GameInfoRepository.java index 562fbf8..37e945a 100644 --- a/src/main/java/com/example/application/data/service/GameInfoRepository.java +++ b/src/main/java/app/data/service/GameInfoRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.GameInfo; +import app.data.entity.GameInfo; import org.springframework.data.jpa.repository.JpaRepository; public interface GameInfoRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/GameInfoService.java b/src/main/java/app/data/service/GameInfoService.java similarity index 83% rename from src/main/java/com/example/application/data/service/GameInfoService.java rename to src/main/java/app/data/service/GameInfoService.java index 1c04470..c0f4d72 100644 --- a/src/main/java/com/example/application/data/service/GameInfoService.java +++ b/src/main/java/app/data/service/GameInfoService.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.GameInfo; +import app.data.entity.GameInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; diff --git a/src/main/java/com/example/application/data/service/GameRepository.java b/src/main/java/app/data/service/GameRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/GameRepository.java rename to src/main/java/app/data/service/GameRepository.java index 54dc4f6..fca7b4e 100644 --- a/src/main/java/com/example/application/data/service/GameRepository.java +++ b/src/main/java/app/data/service/GameRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.Game; +import app.data.entity.Game; import org.springframework.data.jpa.repository.JpaRepository; public interface GameRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/GameService.java b/src/main/java/app/data/service/GameService.java similarity index 83% rename from src/main/java/com/example/application/data/service/GameService.java rename to src/main/java/app/data/service/GameService.java index 2f985bb..6c77908 100644 --- a/src/main/java/com/example/application/data/service/GameService.java +++ b/src/main/java/app/data/service/GameService.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.Game; +import app.data.entity.Game; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; diff --git a/src/main/java/com/example/application/data/service/MatchRepository.java b/src/main/java/app/data/service/MatchRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/MatchRepository.java rename to src/main/java/app/data/service/MatchRepository.java index da42e7f..7fb0627 100644 --- a/src/main/java/com/example/application/data/service/MatchRepository.java +++ b/src/main/java/app/data/service/MatchRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.Match; +import app.data.entity.Match; import org.springframework.data.jpa.repository.JpaRepository; public interface MatchRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/MatchService.java b/src/main/java/app/data/service/MatchService.java similarity index 88% rename from src/main/java/com/example/application/data/service/MatchService.java rename to src/main/java/app/data/service/MatchService.java index a6d6bb7..3f9a67c 100644 --- a/src/main/java/com/example/application/data/service/MatchService.java +++ b/src/main/java/app/data/service/MatchService.java @@ -1,9 +1,9 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.bean.CalculatedMatch; -import com.example.application.data.entity.Game; -import com.example.application.data.entity.Match; -import com.example.application.data.entity.Matchday; +import app.data.bean.CalculatedMatch; +import app.data.entity.Game; +import app.data.entity.Match; +import app.data.entity.Matchday; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; diff --git a/src/main/java/com/example/application/data/service/MatchdayRepository.java b/src/main/java/app/data/service/MatchdayRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/MatchdayRepository.java rename to src/main/java/app/data/service/MatchdayRepository.java index 5f69e62..a37a153 100644 --- a/src/main/java/com/example/application/data/service/MatchdayRepository.java +++ b/src/main/java/app/data/service/MatchdayRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.Matchday; +import app.data.entity.Matchday; import org.springframework.data.jpa.repository.JpaRepository; public interface MatchdayRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/MatchdayService.java b/src/main/java/app/data/service/MatchdayService.java similarity index 93% rename from src/main/java/com/example/application/data/service/MatchdayService.java rename to src/main/java/app/data/service/MatchdayService.java index 88e1aff..7310055 100644 --- a/src/main/java/com/example/application/data/service/MatchdayService.java +++ b/src/main/java/app/data/service/MatchdayService.java @@ -1,7 +1,7 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.Matchday; -import com.example.application.data.entity.Season; +import app.data.entity.Matchday; +import app.data.entity.Season; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/example/application/data/service/PlayerInfoRepository.java b/src/main/java/app/data/service/PlayerInfoRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/PlayerInfoRepository.java rename to src/main/java/app/data/service/PlayerInfoRepository.java index 69881e0..005f13f 100644 --- a/src/main/java/com/example/application/data/service/PlayerInfoRepository.java +++ b/src/main/java/app/data/service/PlayerInfoRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.PlayerInfo; +import app.data.entity.PlayerInfo; import org.springframework.data.jpa.repository.JpaRepository; public interface PlayerInfoRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/PlayerInfoService.java b/src/main/java/app/data/service/PlayerInfoService.java similarity index 83% rename from src/main/java/com/example/application/data/service/PlayerInfoService.java rename to src/main/java/app/data/service/PlayerInfoService.java index 07b4b0f..7c0b756 100644 --- a/src/main/java/com/example/application/data/service/PlayerInfoService.java +++ b/src/main/java/app/data/service/PlayerInfoService.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.PlayerInfo; +import app.data.entity.PlayerInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; diff --git a/src/main/java/com/example/application/data/service/PlayerRepository.java b/src/main/java/app/data/service/PlayerRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/PlayerRepository.java rename to src/main/java/app/data/service/PlayerRepository.java index a6e7bc5..2a9414b 100644 --- a/src/main/java/com/example/application/data/service/PlayerRepository.java +++ b/src/main/java/app/data/service/PlayerRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.Player; +import app.data.entity.Player; import org.springframework.data.jpa.repository.JpaRepository; public interface PlayerRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/PlayerService.java b/src/main/java/app/data/service/PlayerService.java similarity index 96% rename from src/main/java/com/example/application/data/service/PlayerService.java rename to src/main/java/app/data/service/PlayerService.java index 8626cbb..f17bbbd 100644 --- a/src/main/java/com/example/application/data/service/PlayerService.java +++ b/src/main/java/app/data/service/PlayerService.java @@ -1,9 +1,9 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.bean.CalculatedMatch; -import com.example.application.data.bean.PlayerForTable; -import com.example.application.data.entity.Matchday; -import com.example.application.data.entity.Player; +import app.data.bean.CalculatedMatch; +import app.data.bean.PlayerForTable; +import app.data.entity.Matchday; +import app.data.entity.Player; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; diff --git a/src/main/java/com/example/application/data/service/SampleAddressRepository.java b/src/main/java/app/data/service/SampleAddressRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/SampleAddressRepository.java rename to src/main/java/app/data/service/SampleAddressRepository.java index f33b1c4..39a7483 100644 --- a/src/main/java/com/example/application/data/service/SampleAddressRepository.java +++ b/src/main/java/app/data/service/SampleAddressRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.SampleAddress; +import app.data.entity.SampleAddress; import org.springframework.data.jpa.repository.JpaRepository; public interface SampleAddressRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/SampleAddressService.java b/src/main/java/app/data/service/SampleAddressService.java similarity index 83% rename from src/main/java/com/example/application/data/service/SampleAddressService.java rename to src/main/java/app/data/service/SampleAddressService.java index fb183b8..7dd8149 100644 --- a/src/main/java/com/example/application/data/service/SampleAddressService.java +++ b/src/main/java/app/data/service/SampleAddressService.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.SampleAddress; +import app.data.entity.SampleAddress; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; diff --git a/src/main/java/com/example/application/data/service/SamplePersonRepository.java b/src/main/java/app/data/service/SamplePersonRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/SamplePersonRepository.java rename to src/main/java/app/data/service/SamplePersonRepository.java index 59dbfb1..076f29c 100644 --- a/src/main/java/com/example/application/data/service/SamplePersonRepository.java +++ b/src/main/java/app/data/service/SamplePersonRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.SamplePerson; +import app.data.entity.SamplePerson; import org.springframework.data.jpa.repository.JpaRepository; public interface SamplePersonRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/SamplePersonService.java b/src/main/java/app/data/service/SamplePersonService.java similarity index 83% rename from src/main/java/com/example/application/data/service/SamplePersonService.java rename to src/main/java/app/data/service/SamplePersonService.java index 34eccee..f12a5c5 100644 --- a/src/main/java/com/example/application/data/service/SamplePersonService.java +++ b/src/main/java/app/data/service/SamplePersonService.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.SamplePerson; +import app.data.entity.SamplePerson; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; diff --git a/src/main/java/com/example/application/data/service/SeasonRepository.java b/src/main/java/app/data/service/SeasonRepository.java similarity index 59% rename from src/main/java/com/example/application/data/service/SeasonRepository.java rename to src/main/java/app/data/service/SeasonRepository.java index f667a39..a49a594 100644 --- a/src/main/java/com/example/application/data/service/SeasonRepository.java +++ b/src/main/java/app/data/service/SeasonRepository.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.Season; +import app.data.entity.Season; import org.springframework.data.jpa.repository.JpaRepository; public interface SeasonRepository extends JpaRepository { diff --git a/src/main/java/com/example/application/data/service/SeasonService.java b/src/main/java/app/data/service/SeasonService.java similarity index 93% rename from src/main/java/com/example/application/data/service/SeasonService.java rename to src/main/java/app/data/service/SeasonService.java index 4b70688..24c2974 100644 --- a/src/main/java/com/example/application/data/service/SeasonService.java +++ b/src/main/java/app/data/service/SeasonService.java @@ -1,6 +1,6 @@ -package com.example.application.data.service; +package app.data.service; -import com.example.application.data.entity.Season; +import app.data.entity.Season; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; diff --git a/src/main/java/app/image/ImageGenerator.java b/src/main/java/app/image/ImageGenerator.java new file mode 100644 index 0000000..4759658 --- /dev/null +++ b/src/main/java/app/image/ImageGenerator.java @@ -0,0 +1,75 @@ +package app.image; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.Objects; +import java.util.Set; + +public class ImageGenerator { + + private static final int FIELD_SIZE = 150; + private static final Set WHITE_PIECES = Set.of('B', 'K', 'N', 'P', 'Q', 'R'); + private static final Set BLACK_PIECES = Set.of('b', 'k', 'n', 'p', 'q', 'r'); + private static final Set BLANKS = Set.of('1', '2', '3', '4', '5', '6', '7', '8'); + private static final Character ROW_DELIMITER = '/'; + + private ImageGenerator() {} + + public static BufferedImage generateImage(String fen) { + BufferedImage image = app.image.ImageUtils.readImage("board"); + Graphics2D g = image.createGraphics(); + g.drawImage(image, 0, 0, null); + + int x = 0; + int y = 0; + for (Character c : fen.split(" ")[0].toCharArray()) { + if (isPiece(c)) { + g.drawImage(app.image.ImageUtils.readImage(getFilename(c)), x * FIELD_SIZE, y * FIELD_SIZE, null); + x += 1; + continue; + } + if (isRowDelimiter(c)) { + x = 0; + y += 1; + continue; + } + if (isBlank(c)) { + x += Character.getNumericValue(c); + continue; + } + throw new IllegalArgumentException("FEN is invalid!"); + } + g.dispose(); + return image; + } + + private static boolean isBlank(Character c) { + return BLANKS.contains(c); + } + + private static boolean isRowDelimiter(Character c) { + return Objects.equals(c, ROW_DELIMITER); + } + + private static boolean isPiece(Character c) { + return isWhite(c) || isBlack(c); + } + + private static boolean isWhite(Character c) { + return WHITE_PIECES.contains(c); + } + + private static boolean isBlack(Character c) { + return BLACK_PIECES.contains(c); + } + + private static String getFilename(Character piece) { + if (isWhite(piece)) { + return "w" + piece.toString().toLowerCase(); + } + if (isBlack(piece)) { + return "b" + piece.toString(); + } + throw new IllegalArgumentException("Character must represent a piece!"); + } +} diff --git a/src/main/java/app/image/ImageService.java b/src/main/java/app/image/ImageService.java new file mode 100644 index 0000000..ba042e0 --- /dev/null +++ b/src/main/java/app/image/ImageService.java @@ -0,0 +1,48 @@ +package app.image; + +import app.data.chesscom.ChessComGame; +import app.data.entity.Game; +import app.data.service.ChessComService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.util.Optional; + +@Service +public class ImageService { + + private final ChessComService chessComService; + + public ImageService(@Autowired ChessComService chessComService) { + this.chessComService = chessComService; + } + + public Optional getVaadinImagePath(Game game) { + return getImagePath(game).map(path -> path.replace("src/main/resources/META-INF/resources/", "")); + } + + public Optional getImagePath(Game game) { + String path = ImageUtils.IMAGE_DEST_PATH + getGameNumber(game) + ImageUtils.EXTENSION; + File f = new File(path); + if(f.isFile()) { + return Optional.of(path); + } + Optional optionalFen = getFen(game); + + if (optionalFen.isPresent()) { + ImageUtils.writeImage(ImageGenerator.generateImage(optionalFen.get()), getGameNumber(game)); + return Optional.of(path); + } + return Optional.empty(); + } + + private String getGameNumber(Game game) { + String[] url = game.getGameInfo().getUrl().split("/"); + return url[url.length -1]; + } + + private Optional getFen(Game game) { + return chessComService.getChessComGame(game).map(ChessComGame::getFen); + } +} diff --git a/src/main/java/app/image/ImageUtils.java b/src/main/java/app/image/ImageUtils.java new file mode 100644 index 0000000..67f0960 --- /dev/null +++ b/src/main/java/app/image/ImageUtils.java @@ -0,0 +1,36 @@ +package app.image; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +public class ImageUtils { + public static final String IMAGE_SOURCE_PATH = "src/main/resources/META-INF/resources/images/chess-sources/"; + public static final String IMAGE_DEST_PATH = "src/main/resources/META-INF/resources/images/games/"; + public static final String EXTENSION = ".png"; + private static final String EXTENSION_WITHOUT_DOT = "png"; + + private ImageUtils() {} + + public static BufferedImage readImage(String fileNameWithoutExtension) { + BufferedImage img = null; + try { + String path = IMAGE_SOURCE_PATH + fileNameWithoutExtension + EXTENSION; + img = ImageIO.read(new File(path)); + } catch (IOException e) { + e.printStackTrace(); + } + return img; + } + + public static void writeImage(BufferedImage img, String fileNameWithoutExtension) { + try { + String path = IMAGE_DEST_PATH + fileNameWithoutExtension + EXTENSION; + File outputFile = new File(path); + ImageIO.write(img, EXTENSION_WITHOUT_DOT, outputFile); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/example/application/navigation/Navigation.java b/src/main/java/app/navigation/Navigation.java similarity index 97% rename from src/main/java/com/example/application/navigation/Navigation.java rename to src/main/java/app/navigation/Navigation.java index b3eafe5..eb21db6 100644 --- a/src/main/java/com/example/application/navigation/Navigation.java +++ b/src/main/java/app/navigation/Navigation.java @@ -1,11 +1,11 @@ -package com.example.application.navigation; - -import com.example.application.data.entity.Match; -import com.example.application.data.entity.Matchday; -import com.example.application.data.entity.Season; -import com.example.application.data.service.MatchService; -import com.example.application.data.service.MatchdayService; -import com.example.application.data.service.SeasonService; +package app.navigation; + +import app.data.entity.Match; +import app.data.entity.Matchday; +import app.data.entity.Season; +import app.data.service.MatchService; +import app.data.service.MatchdayService; +import app.data.service.SeasonService; import com.vaadin.flow.component.*; import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.html.Label; diff --git a/src/main/java/com/example/application/navigation/NavigationUtils.java b/src/main/java/app/navigation/NavigationUtils.java similarity index 92% rename from src/main/java/com/example/application/navigation/NavigationUtils.java rename to src/main/java/app/navigation/NavigationUtils.java index 980e081..2698e93 100644 --- a/src/main/java/com/example/application/navigation/NavigationUtils.java +++ b/src/main/java/app/navigation/NavigationUtils.java @@ -1,8 +1,7 @@ -package com.example.application.navigation; +package app.navigation; import com.vaadin.flow.router.WildcardParameter; import org.springframework.lang.NonNull; -import org.springframework.lang.Nullable; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/example/application/navigation/UrlParameterType.java b/src/main/java/app/navigation/UrlParameterType.java similarity index 61% rename from src/main/java/com/example/application/navigation/UrlParameterType.java rename to src/main/java/app/navigation/UrlParameterType.java index 7c9b347..9e74c9f 100644 --- a/src/main/java/com/example/application/navigation/UrlParameterType.java +++ b/src/main/java/app/navigation/UrlParameterType.java @@ -1,4 +1,4 @@ -package com.example.application.navigation; +package app.navigation; public enum UrlParameterType { SEASON, diff --git a/src/main/java/com/example/application/utils/ChessComUtils.java b/src/main/java/app/utils/ChessComUtils.java similarity index 75% rename from src/main/java/com/example/application/utils/ChessComUtils.java rename to src/main/java/app/utils/ChessComUtils.java index 2e027c4..c1364de 100644 --- a/src/main/java/com/example/application/utils/ChessComUtils.java +++ b/src/main/java/app/utils/ChessComUtils.java @@ -1,7 +1,8 @@ -package com.example.application.utils; +package app.utils; -import com.example.application.data.chesscom.ChessComGame; -import com.example.application.data.entity.Player; +import app.data.chesscom.ChessComGame; +import app.data.entity.Match; +import app.data.entity.Player; import org.springframework.lang.NonNull; public class ChessComUtils { @@ -15,7 +16,7 @@ public class ChessComUtils { .replace("time_control", "timeControl"); } - public static String getUrlPart(Player player) { + public static String getUsernameForUrl(Player player) { return player.getNickname().toLowerCase(); } @@ -29,11 +30,11 @@ public class ChessComUtils { return 0; } - public static boolean isGameBetween(@NonNull ChessComGame game, @NonNull Player player1, @NonNull Player player2) { + public static boolean isGameBetweenPlayers(@NonNull ChessComGame game, @NonNull Match match) { String white = game.getWhite().getUsername(); String black = game.getBlack().getUsername(); - String name1 = player1.getNickname(); - String name2 = player2.getNickname(); + String name1 = match.getPlayer1().getNickname(); + String name2 = match.getPlayer2().getNickname(); return (white.equals(name1) || white.equals(name2)) && (black.equals(name1) || black.equals(name2)); } diff --git a/src/main/java/com/example/application/utils/HttpUtils.java b/src/main/java/app/utils/HttpUtils.java similarity index 96% rename from src/main/java/com/example/application/utils/HttpUtils.java rename to src/main/java/app/utils/HttpUtils.java index f66e2a2..c78a8f3 100644 --- a/src/main/java/com/example/application/utils/HttpUtils.java +++ b/src/main/java/app/utils/HttpUtils.java @@ -1,4 +1,4 @@ -package com.example.application.utils; +package app.utils; import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; diff --git a/src/main/java/com/example/application/utils/StringUtils.java b/src/main/java/app/utils/StringUtils.java similarity index 97% rename from src/main/java/com/example/application/utils/StringUtils.java rename to src/main/java/app/utils/StringUtils.java index 54c8376..49be410 100644 --- a/src/main/java/com/example/application/utils/StringUtils.java +++ b/src/main/java/app/utils/StringUtils.java @@ -1,4 +1,4 @@ -package com.example.application.utils; +package app.utils; import org.apache.commons.lang3.RandomStringUtils; diff --git a/src/main/java/com/example/application/utils/VaadinUtils.java b/src/main/java/app/utils/VaadinUtils.java similarity index 93% rename from src/main/java/com/example/application/utils/VaadinUtils.java rename to src/main/java/app/utils/VaadinUtils.java index cba308a..b41978c 100644 --- a/src/main/java/com/example/application/utils/VaadinUtils.java +++ b/src/main/java/app/utils/VaadinUtils.java @@ -1,6 +1,6 @@ -package com.example.application.utils; +package app.utils; -import com.example.application.data.entity.Player; +import app.data.entity.Player; import com.vaadin.flow.data.renderer.TemplateRenderer; import com.vaadin.flow.function.ValueProvider; diff --git a/src/main/java/com/example/application/views/about/AboutView.java b/src/main/java/app/views/about/AboutView.java similarity index 86% rename from src/main/java/com/example/application/views/about/AboutView.java rename to src/main/java/app/views/about/AboutView.java index bcdcc7e..2b44756 100644 --- a/src/main/java/com/example/application/views/about/AboutView.java +++ b/src/main/java/app/views/about/AboutView.java @@ -1,14 +1,14 @@ -package com.example.application.views.about; +package app.views.about; -import com.example.application.data.service.GameService; -import com.example.application.views.main.MainView; +import app.data.service.GameService; +import app.views.main.MainView; import com.vaadin.flow.component.Text; import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.html.Div; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; -@CssImport("./views/about/about-view.css") +@CssImport("app/views/about/about-view.css") @Route(value = "about", layout = MainView.class) @PageTitle("About") public class AboutView extends Div { diff --git a/src/main/java/com/example/application/views/addressform/AddressFormView.java b/src/main/java/app/views/addressform/AddressFormView.java similarity index 90% rename from src/main/java/com/example/application/views/addressform/AddressFormView.java rename to src/main/java/app/views/addressform/AddressFormView.java index 81c889f..a53f562 100644 --- a/src/main/java/com/example/application/views/addressform/AddressFormView.java +++ b/src/main/java/app/views/addressform/AddressFormView.java @@ -1,8 +1,8 @@ -package com.example.application.views.addressform; +package app.views.addressform; -import com.example.application.data.entity.SampleAddress; -import com.example.application.data.service.SampleAddressService; -import com.example.application.views.main.MainView; +import app.data.entity.SampleAddress; +import app.data.service.SampleAddressService; +import app.views.main.MainView; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.ButtonVariant; @@ -18,7 +18,7 @@ import com.vaadin.flow.data.binder.Binder; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; -@CssImport("./views/addressform/address-form-view.css") +@CssImport("app/views/addressform/address-form-view.css") @Route(value = "address-form", layout = MainView.class) @PageTitle("Address Form") public class AddressFormView extends Div { diff --git a/src/main/java/com/example/application/views/cardlist/CardListView.java b/src/main/java/app/views/cardlist/CardListView.java similarity index 98% rename from src/main/java/com/example/application/views/cardlist/CardListView.java rename to src/main/java/app/views/cardlist/CardListView.java index ef6ebf9..d3134c7 100644 --- a/src/main/java/com/example/application/views/cardlist/CardListView.java +++ b/src/main/java/app/views/cardlist/CardListView.java @@ -1,6 +1,6 @@ -package com.example.application.views.cardlist; +package app.views.cardlist; -import com.example.application.views.main.MainView; +import app.views.main.MainView; import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.grid.GridVariant; @@ -18,7 +18,7 @@ import com.vaadin.flow.router.Route; import java.util.Arrays; import java.util.List; -@CssImport("./views/cardlist/card-list-view.css") +@CssImport("app/views/cardlist/card-list-view.css") @Route(value = "card-list", layout = MainView.class) @PageTitle("Card List") public class CardListView extends Div implements AfterNavigationObserver { diff --git a/src/main/java/com/example/application/views/cardlist/Person.java b/src/main/java/app/views/cardlist/Person.java similarity index 96% rename from src/main/java/com/example/application/views/cardlist/Person.java rename to src/main/java/app/views/cardlist/Person.java index d4a40ef..9e1a9f8 100644 --- a/src/main/java/com/example/application/views/cardlist/Person.java +++ b/src/main/java/app/views/cardlist/Person.java @@ -1,4 +1,4 @@ -package com.example.application.views.cardlist; +package app.views.cardlist; public class Person { diff --git a/src/main/java/com/example/application/views/creditcardform/CreditCardFormView.java b/src/main/java/app/views/creditcardform/CreditCardFormView.java similarity index 95% rename from src/main/java/com/example/application/views/creditcardform/CreditCardFormView.java rename to src/main/java/app/views/creditcardform/CreditCardFormView.java index e1d4f6e..2b4b1ae 100644 --- a/src/main/java/com/example/application/views/creditcardform/CreditCardFormView.java +++ b/src/main/java/app/views/creditcardform/CreditCardFormView.java @@ -1,6 +1,6 @@ -package com.example.application.views.creditcardform; +package app.views.creditcardform; -import com.example.application.views.main.MainView; +import app.views.main.MainView; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.ButtonVariant; @@ -17,7 +17,7 @@ import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; -@CssImport("./views/creditcardform/credit-card-form-view.css") +@CssImport("app/views/creditcardform/credit-card-form-view.css") @Route(value = "credit-card-form", layout = MainView.class) @PageTitle("Credit Card Form") public class CreditCardFormView extends Div { diff --git a/src/main/java/com/example/application/views/helloworld/HelloWorldView.java b/src/main/java/app/views/helloworld/HelloWorldView.java similarity index 85% rename from src/main/java/com/example/application/views/helloworld/HelloWorldView.java rename to src/main/java/app/views/helloworld/HelloWorldView.java index fbdde75..92179c7 100644 --- a/src/main/java/com/example/application/views/helloworld/HelloWorldView.java +++ b/src/main/java/app/views/helloworld/HelloWorldView.java @@ -1,6 +1,6 @@ -package com.example.application.views.helloworld; +package app.views.helloworld; -import com.example.application.views.main.MainView; +import app.views.main.MainView; import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.notification.Notification; @@ -9,7 +9,7 @@ import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; -@CssImport("./views/helloworld/hello-world-view.css") +@CssImport("app/views/helloworld/hello-world-view.css") @Route(value = "hello", layout = MainView.class) @PageTitle("Hello World") public class HelloWorldView extends HorizontalLayout { diff --git a/src/main/java/com/example/application/views/main/MainView.java b/src/main/java/app/views/main/MainView.java similarity index 94% rename from src/main/java/com/example/application/views/main/MainView.java rename to src/main/java/app/views/main/MainView.java index 4c9f85f..e2d9693 100644 --- a/src/main/java/com/example/application/views/main/MainView.java +++ b/src/main/java/app/views/main/MainView.java @@ -1,7 +1,8 @@ -package com.example.application.views.main; +package app.views.main; -import com.example.application.views.results.ResultsView; -import com.example.application.views.table.TableView; +import app.views.cardlist.CardListView; +import app.views.results.ResultsView; +import app.views.table.TableView; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.ComponentUtil; import com.vaadin.flow.component.applayout.AppLayout; @@ -25,9 +26,9 @@ import com.vaadin.flow.theme.lumo.Lumo; import java.util.Optional; /** - * The main view is a top-level placeholder for other views. + * The main view is a top-level placeholder for other chessleague.views. */ -@CssImport("./views/main/main-view.css") +@CssImport("app/views/main/main-view.css") @PWA(name = "Schachliga DACH", shortName = "Schachliga DACH", iconPath = "images/logo.png", diff --git a/src/main/java/com/example/application/views/map/MapView.java b/src/main/java/app/views/map/MapView.java similarity index 74% rename from src/main/java/com/example/application/views/map/MapView.java rename to src/main/java/app/views/map/MapView.java index c77587a..d20136c 100644 --- a/src/main/java/com/example/application/views/map/MapView.java +++ b/src/main/java/app/views/map/MapView.java @@ -1,7 +1,7 @@ -package com.example.application.views.map; +package app.views.map; -import com.example.application.components.leafletmap.LeafletMap; -import com.example.application.views.main.MainView; +import app.components.leafletmap.LeafletMap; +import app.views.main.MainView; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; diff --git a/src/main/java/com/example/application/views/masterdetail/MasterDetailView.java b/src/main/java/app/views/masterdetail/MasterDetailView.java similarity index 96% rename from src/main/java/com/example/application/views/masterdetail/MasterDetailView.java rename to src/main/java/app/views/masterdetail/MasterDetailView.java index f4f12c9..d47d32d 100644 --- a/src/main/java/com/example/application/views/masterdetail/MasterDetailView.java +++ b/src/main/java/app/views/masterdetail/MasterDetailView.java @@ -1,8 +1,8 @@ -package com.example.application.views.masterdetail; +package app.views.masterdetail; -import com.example.application.data.entity.SamplePerson; -import com.example.application.data.service.SamplePersonService; -import com.example.application.views.main.MainView; +import app.data.entity.SamplePerson; +import app.data.service.SamplePersonService; +import app.views.main.MainView; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.HasStyle; import com.vaadin.flow.component.button.Button; @@ -29,7 +29,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -@CssImport("./views/masterdetail/master-detail-view.css") +@CssImport("app/views/masterdetail/master-detail-view.css") @Route(value = "master-detail", layout = MainView.class) @PageTitle("Master-Detail") public class MasterDetailView extends Div { diff --git a/src/main/java/com/example/application/views/personform/PersonFormView.java b/src/main/java/app/views/personform/PersonFormView.java similarity index 94% rename from src/main/java/com/example/application/views/personform/PersonFormView.java rename to src/main/java/app/views/personform/PersonFormView.java index 22e16f8..50a863f 100644 --- a/src/main/java/com/example/application/views/personform/PersonFormView.java +++ b/src/main/java/app/views/personform/PersonFormView.java @@ -1,8 +1,8 @@ -package com.example.application.views.personform; +package app.views.personform; -import com.example.application.data.entity.SamplePerson; -import com.example.application.data.service.SamplePersonService; -import com.example.application.views.main.MainView; +import app.data.entity.SamplePerson; +import app.data.service.SamplePersonService; +import app.views.main.MainView; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.ButtonVariant; @@ -21,7 +21,7 @@ import com.vaadin.flow.data.binder.Binder; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; -@CssImport("./views/personform/person-form-view.css") +@CssImport("app/views/personform/person-form-view.css") @Route(value = "person-form", layout = MainView.class) @PageTitle("Person Form") public class PersonFormView extends Div { diff --git a/src/main/java/app/views/results/MatchView.java b/src/main/java/app/views/results/MatchView.java new file mode 100644 index 0000000..8926693 --- /dev/null +++ b/src/main/java/app/views/results/MatchView.java @@ -0,0 +1,66 @@ +package app.views.results; + +import app.data.entity.Game; +import com.vaadin.flow.component.html.Div; +import com.vaadin.flow.component.html.Image; +import app.data.entity.Match; +import app.image.ImageService; +import app.navigation.Navigation; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class MatchView extends VerticalLayout { + + private final ResultsView parent; + private final Navigation navigation; + private final List images = new ArrayList<>(); + + private final ImageService imageService; + +// private final ChessComService chessComService; +// private final PlayerService playerService; + + // public ResultsViewRight(@Autowired ChessComService chessComService, @Autowired PlayerService playerService) { + public MatchView(Navigation navigation, ResultsView resultsView, @Autowired ImageService imageService) { + this.parent = resultsView; + this.navigation = navigation; + this.imageService = imageService; + + navigation.addRunnableToBeRunAfterMatchSelection(this::configureContent); + navigation.addRunnableToBeRunAfterMatchSelection(this::configureParentSplit); +// this.chessComService = chessComService; +// this.playerService = playerService; + } + + private void configureParentSplit() { + navigation.getSelectedMatch().ifPresentOrElse( + match -> parent.enableSplit(), + parent::disableSplit + ); + } + + private void configureContent() { + Match match = navigation.getSelectedMatch().orElseThrow(); + + removeAll(); + for (Game game : match.getGames()) { + Image image = new Image(imageService.getVaadinImagePath(game).orElse(""), "image"); +// Image img = new Image() +// image.setWidth(200, Unit.PIXELS); +// image.setHeight(200, Unit.PIXELS); + image.setWidth("30%"); +// image.setHeight("30%"); + add(image); + } +// +// images.addAll(match.getGames().stream() +// .map(game -> new Image(imageService.getImagePath(game).orElse(""), "app/image")) +// .collect(Collectors.toList())); +// images.forEach(this::add); + } + +} diff --git a/src/main/java/com/example/application/views/results/MatchdayView.java b/src/main/java/app/views/results/MatchdayView.java similarity index 90% rename from src/main/java/com/example/application/views/results/MatchdayView.java rename to src/main/java/app/views/results/MatchdayView.java index 8df81e7..ebc871d 100644 --- a/src/main/java/com/example/application/views/results/MatchdayView.java +++ b/src/main/java/app/views/results/MatchdayView.java @@ -1,12 +1,12 @@ -package com.example.application.views.results; - -import com.example.application.components.navigation.SeasonAndMatchdayNavigation; -import com.example.application.data.bean.CalculatedMatch; -import com.example.application.data.entity.Matchday; -import com.example.application.data.service.MatchService; -import com.example.application.navigation.Navigation; -import com.example.application.utils.StringUtils; -import com.example.application.utils.VaadinUtils; +package app.views.results; + +import app.components.navigation.SeasonAndMatchdayNavigation; +import app.data.bean.CalculatedMatch; +import app.data.entity.Matchday; +import app.data.service.MatchService; +import app.navigation.Navigation; +import app.utils.StringUtils; +import app.utils.VaadinUtils; import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.grid.ColumnTextAlign; import com.vaadin.flow.component.grid.Grid; diff --git a/src/main/java/com/example/application/views/results/ResultsView.java b/src/main/java/app/views/results/ResultsView.java similarity index 84% rename from src/main/java/com/example/application/views/results/ResultsView.java rename to src/main/java/app/views/results/ResultsView.java index 4a5e36b..7839042 100644 --- a/src/main/java/com/example/application/views/results/ResultsView.java +++ b/src/main/java/app/views/results/ResultsView.java @@ -1,16 +1,18 @@ -package com.example.application.views.results; +package app.views.results; -import com.example.application.data.service.*; -import com.example.application.navigation.Navigation; -import com.example.application.views.main.MainView; +import app.views.main.MainView; +import app.data.service.*; +import app.image.ImageService; +import app.navigation.Navigation; import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.html.Div; import com.vaadin.flow.component.splitlayout.SplitLayout; import com.vaadin.flow.router.*; import org.springframework.beans.factory.annotation.Autowired; -@CssImport("./views/results/results-view.css") +@CssImport("app/views/results/results-view.css") @Route(value = "results", layout = MainView.class) +@RouteAlias(value = "", layout = MainView.class) @PageTitle("Schachliga DACH - Results") public class ResultsView extends Div implements HasUrlParameter { @@ -24,6 +26,7 @@ public class ResultsView extends Div implements HasUrlParameter { public ResultsView(@Autowired SeasonService seasonService, @Autowired MatchdayService matchdayService, @Autowired MatchService matchService, + @Autowired ImageService imageService, @Autowired ChessComService chessComService, @Autowired PlayerService playerService) { @@ -31,7 +34,7 @@ public class ResultsView extends Div implements HasUrlParameter { this.navigation.setAutoselectSeason(true); this.navigation.setAutoselectMatchday(true); this.matchdayView = new MatchdayView(navigation, matchService); - this.matchView = new MatchView(navigation, this); + this.matchView = new MatchView(navigation, this, imageService); addClassName("results-view"); diff --git a/src/main/java/com/example/application/views/table/TableView.java b/src/main/java/app/views/table/TableView.java similarity index 89% rename from src/main/java/com/example/application/views/table/TableView.java rename to src/main/java/app/views/table/TableView.java index 88a0287..ad30ca9 100644 --- a/src/main/java/com/example/application/views/table/TableView.java +++ b/src/main/java/app/views/table/TableView.java @@ -1,15 +1,15 @@ -package com.example.application.views.table; - -import com.example.application.components.navigation.SeasonAndMatchdayNavigation; -import com.example.application.data.bean.PlayerForTable; -import com.example.application.data.service.MatchService; -import com.example.application.data.service.MatchdayService; -import com.example.application.data.service.PlayerService; -import com.example.application.data.service.SeasonService; -import com.example.application.utils.StringUtils; -import com.example.application.utils.VaadinUtils; -import com.example.application.navigation.Navigation; -import com.example.application.views.main.MainView; +package app.views.table; + +import app.components.navigation.SeasonAndMatchdayNavigation; +import app.data.bean.PlayerForTable; +import app.data.service.MatchService; +import app.data.service.MatchdayService; +import app.data.service.PlayerService; +import app.data.service.SeasonService; +import app.utils.StringUtils; +import app.utils.VaadinUtils; +import app.navigation.Navigation; +import app.views.main.MainView; import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.grid.ColumnTextAlign; import com.vaadin.flow.component.grid.Grid; @@ -24,9 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired; import java.util.NoSuchElementException; -@CssImport("./views/table/table-view.css") +@CssImport("app/views/table/table-view.css") @Route(value = "table", layout = MainView.class) -@RouteAlias(value = "", layout = MainView.class) @PageTitle("Schachliga DACH - Table") public class TableView extends VerticalLayout implements HasUrlParameter { diff --git a/src/main/java/com/example/application/data/service/ChessComService.java b/src/main/java/com/example/application/data/service/ChessComService.java deleted file mode 100644 index 56f3007..0000000 --- a/src/main/java/com/example/application/data/service/ChessComService.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.example.application.data.service; - -import com.example.application.data.chesscom.ChessComArchive; -import com.example.application.data.chesscom.ChessComArchiveList; -import com.example.application.data.chesscom.ChessComGame; -import com.example.application.data.entity.Game; -import com.example.application.data.entity.GameInfo; -import com.example.application.data.entity.Player; -import com.example.application.utils.ChessComUtils; -import com.example.application.utils.HttpUtils; -import com.google.gson.Gson; -import org.springframework.lang.NonNull; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - - -@Service -public class ChessComService { - // TODO: make everything nullsafe - - private static final Gson gson = new Gson(); - - public ChessComService() { - } - - @NonNull - public List getLatestGamesBetweenPlayers(@NonNull Player player1, @NonNull Player player2, int minimum_amount_of_games) { - String url = String.format("https://api.chess.com/pub/player/%s/games/archives", ChessComUtils.getUrlPart(player1)); - - List archiveUrls = gson.fromJson(HttpUtils.getJson(url), ChessComArchiveList.class).getArchives(); - archiveUrls.sort(Collections.reverseOrder()); - - if (archiveUrls.size() >= 2) { - archiveUrls = archiveUrls.subList(0, 2); - } - - List list = new ArrayList<>(); - for (String archiveUrl : archiveUrls) { - String unpreparedJson = HttpUtils.getJson(archiveUrl); - if (unpreparedJson == null) { - continue; - } - String preparedJson = ChessComUtils.getPreparedArchiveJson(unpreparedJson); - List games = gson.fromJson(preparedJson, ChessComArchive.class).getGames(); - - list.addAll(games.stream() - .sorted(Comparator.comparingLong(ChessComGame::getEndTime).reversed()) - .filter(chessComGame -> ChessComUtils.isGameBetween(chessComGame, player1, player2)) - .filter(ChessComUtils::hasValidTimeControl) - .map(chessComGame -> getGame(chessComGame, player1, player2)) - .collect(Collectors.toList())); - - if (list.size() >= minimum_amount_of_games) { - break; - } - } - return list; - } // TODO: find exactly two games of each time control - - @NonNull - private Game getGame(@NonNull ChessComGame chessComGame, @NonNull Player player1, @NonNull Player player2) { - Game game = new Game(); - GameInfo gameInfo = new GameInfo(); - - game.setPlayer1IsWhite(chessComGame.getWhite().getUsername().equals(player1.getNickname())); - game.setResult(ChessComUtils.getResult(chessComGame)); - game.setGameInfo(gameInfo); - - gameInfo.setUrl(chessComGame.getUrl()); - gameInfo.setTimeControl(chessComGame.getTimeControl()); - gameInfo.setGame(game); - - return game; // important: match is not set here! - } - -} diff --git a/src/main/java/com/example/application/views/results/MatchView.java b/src/main/java/com/example/application/views/results/MatchView.java deleted file mode 100644 index 68ace45..0000000 --- a/src/main/java/com/example/application/views/results/MatchView.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.example.application.views.results; - -import com.example.application.navigation.Navigation; -import com.vaadin.flow.component.html.Div; -import com.vaadin.flow.component.html.Label; - -public class MatchView extends Div { - - private final ResultsView parent; - private final Navigation navigation; - private final Label label = new Label(); - -// private final ChessComService chessComService; -// private final PlayerService playerService; - - // public ResultsViewRight(@Autowired ChessComService chessComService, @Autowired PlayerService playerService) { - public MatchView(Navigation navigation, ResultsView resultsView) { - this.parent = resultsView; - this.navigation = navigation; - navigation.addRunnableToBeRunAfterMatchSelection(() -> label.setText(navigation.getSelectedMatch().toString())); - navigation.addRunnableToBeRunAfterMatchSelection(this::configureSplit); - add(label); -// this.chessComService = chessComService; -// this.playerService = playerService; - } - - private void configureSplit() { - navigation.getSelectedMatch().ifPresentOrElse( - match -> parent.enableSplit(), - parent::disableSplit - ); - - } - -} diff --git a/src/main/resources/META-INF/resources/images/chess-sources/bb.png b/src/main/resources/META-INF/resources/images/chess-sources/bb.png new file mode 100644 index 0000000..df2e407 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/bb.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/bk.png b/src/main/resources/META-INF/resources/images/chess-sources/bk.png new file mode 100644 index 0000000..35637f5 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/bk.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/bn.png b/src/main/resources/META-INF/resources/images/chess-sources/bn.png new file mode 100644 index 0000000..e79df05 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/bn.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/board.png b/src/main/resources/META-INF/resources/images/chess-sources/board.png new file mode 100644 index 0000000..265873d Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/board.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/bp.png b/src/main/resources/META-INF/resources/images/chess-sources/bp.png new file mode 100644 index 0000000..bb3cfdf Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/bp.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/bq.png b/src/main/resources/META-INF/resources/images/chess-sources/bq.png new file mode 100644 index 0000000..a2ed748 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/bq.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/br.png b/src/main/resources/META-INF/resources/images/chess-sources/br.png new file mode 100644 index 0000000..722db00 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/br.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/wb.png b/src/main/resources/META-INF/resources/images/chess-sources/wb.png new file mode 100644 index 0000000..5e26a38 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/wb.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/wk.png b/src/main/resources/META-INF/resources/images/chess-sources/wk.png new file mode 100644 index 0000000..44ded88 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/wk.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/wn.png b/src/main/resources/META-INF/resources/images/chess-sources/wn.png new file mode 100644 index 0000000..e382675 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/wn.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/wp.png b/src/main/resources/META-INF/resources/images/chess-sources/wp.png new file mode 100644 index 0000000..6d1b1fe Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/wp.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/wq.png b/src/main/resources/META-INF/resources/images/chess-sources/wq.png new file mode 100644 index 0000000..bdc6ff3 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/wq.png differ diff --git a/src/main/resources/META-INF/resources/images/chess-sources/wr.png b/src/main/resources/META-INF/resources/images/chess-sources/wr.png new file mode 100644 index 0000000..49b7d0f Binary files /dev/null and b/src/main/resources/META-INF/resources/images/chess-sources/wr.png differ