Browse Source

images of games :) no more useless "com.example....."

master
GAM 4 years ago
parent
commit
ac0cd449cd
93 changed files with 626 additions and 370 deletions
  1. +2
    -0
      .gitignore
  2. +8
    -8
      README.md
  3. +87
    -87
      db/db_init.sql
  4. +0
    -0
      frontend/app/components/leafletmap/leaflet-map.js
  5. +0
    -0
      frontend/app/views/about/about-view.css
  6. +0
    -0
      frontend/app/views/addressform/address-form-view.css
  7. +0
    -0
      frontend/app/views/cardlist/card-list-view.css
  8. +0
    -0
      frontend/app/views/creditcardform/credit-card-form-view.css
  9. +0
    -0
      frontend/app/views/helloworld/hello-world-view.css
  10. +0
    -0
      frontend/app/views/main/main-view.css
  11. +0
    -0
      frontend/app/views/map/map-view.css
  12. +0
    -0
      frontend/app/views/masterdetail/master-detail-view.css
  13. +0
    -0
      frontend/app/views/personform/person-form-view.css
  14. +0
    -0
      frontend/app/views/results/results-view.css
  15. +0
    -0
      frontend/app/views/table/table-view.css
  16. +1
    -1
      pom.xml
  17. +1
    -1
      src/main/java/app/Application.java
  18. +2
    -2
      src/main/java/app/components/leafletmap/LeafletMap.java
  19. +2
    -2
      src/main/java/app/components/navigation/SeasonAndMatchdayNavigation.java
  20. +1
    -1
      src/main/java/app/data/AbstractEntity.java
  21. +3
    -3
      src/main/java/app/data/bean/CalculatedMatch.java
  22. +2
    -2
      src/main/java/app/data/bean/PlayerForTable.java
  23. +1
    -1
      src/main/java/app/data/chesscom/ChessComArchive.java
  24. +1
    -1
      src/main/java/app/data/chesscom/ChessComArchiveList.java
  25. +1
    -1
      src/main/java/app/data/chesscom/ChessComGame.java
  26. +1
    -1
      src/main/java/app/data/entity/Game.java
  27. +1
    -1
      src/main/java/app/data/entity/GameInfo.java
  28. +1
    -1
      src/main/java/app/data/entity/Match.java
  29. +1
    -1
      src/main/java/app/data/entity/Matchday.java
  30. +1
    -1
      src/main/java/app/data/entity/Player.java
  31. +1
    -1
      src/main/java/app/data/entity/PlayerInfo.java
  32. +2
    -2
      src/main/java/app/data/entity/SampleAddress.java
  33. +2
    -2
      src/main/java/app/data/entity/SamplePerson.java
  34. +1
    -1
      src/main/java/app/data/entity/Season.java
  35. +2
    -2
      src/main/java/app/data/generator/DataGenerator.java
  36. +142
    -0
      src/main/java/app/data/service/ChessComService.java
  37. +2
    -2
      src/main/java/app/data/service/GameInfoRepository.java
  38. +2
    -2
      src/main/java/app/data/service/GameInfoService.java
  39. +2
    -2
      src/main/java/app/data/service/GameRepository.java
  40. +2
    -2
      src/main/java/app/data/service/GameService.java
  41. +2
    -2
      src/main/java/app/data/service/MatchRepository.java
  42. +5
    -5
      src/main/java/app/data/service/MatchService.java
  43. +2
    -2
      src/main/java/app/data/service/MatchdayRepository.java
  44. +3
    -3
      src/main/java/app/data/service/MatchdayService.java
  45. +2
    -2
      src/main/java/app/data/service/PlayerInfoRepository.java
  46. +2
    -2
      src/main/java/app/data/service/PlayerInfoService.java
  47. +2
    -2
      src/main/java/app/data/service/PlayerRepository.java
  48. +5
    -5
      src/main/java/app/data/service/PlayerService.java
  49. +2
    -2
      src/main/java/app/data/service/SampleAddressRepository.java
  50. +2
    -2
      src/main/java/app/data/service/SampleAddressService.java
  51. +2
    -2
      src/main/java/app/data/service/SamplePersonRepository.java
  52. +2
    -2
      src/main/java/app/data/service/SamplePersonService.java
  53. +2
    -2
      src/main/java/app/data/service/SeasonRepository.java
  54. +2
    -2
      src/main/java/app/data/service/SeasonService.java
  55. +75
    -0
      src/main/java/app/image/ImageGenerator.java
  56. +48
    -0
      src/main/java/app/image/ImageService.java
  57. +36
    -0
      src/main/java/app/image/ImageUtils.java
  58. +8
    -8
      src/main/java/app/navigation/Navigation.java
  59. +1
    -2
      src/main/java/app/navigation/NavigationUtils.java
  60. +1
    -1
      src/main/java/app/navigation/UrlParameterType.java
  61. +8
    -7
      src/main/java/app/utils/ChessComUtils.java
  62. +1
    -1
      src/main/java/app/utils/HttpUtils.java
  63. +1
    -1
      src/main/java/app/utils/StringUtils.java
  64. +2
    -2
      src/main/java/app/utils/VaadinUtils.java
  65. +4
    -4
      src/main/java/app/views/about/AboutView.java
  66. +5
    -5
      src/main/java/app/views/addressform/AddressFormView.java
  67. +3
    -3
      src/main/java/app/views/cardlist/CardListView.java
  68. +1
    -1
      src/main/java/app/views/cardlist/Person.java
  69. +3
    -3
      src/main/java/app/views/creditcardform/CreditCardFormView.java
  70. +3
    -3
      src/main/java/app/views/helloworld/HelloWorldView.java
  71. +6
    -5
      src/main/java/app/views/main/MainView.java
  72. +3
    -3
      src/main/java/app/views/map/MapView.java
  73. +5
    -5
      src/main/java/app/views/masterdetail/MasterDetailView.java
  74. +5
    -5
      src/main/java/app/views/personform/PersonFormView.java
  75. +66
    -0
      src/main/java/app/views/results/MatchView.java
  76. +9
    -9
      src/main/java/app/views/results/MatchdayView.java
  77. +9
    -6
      src/main/java/app/views/results/ResultsView.java
  78. +13
    -14
      src/main/java/app/views/table/TableView.java
  79. +0
    -81
      src/main/java/com/example/application/data/service/ChessComService.java
  80. +0
    -35
      src/main/java/com/example/application/views/results/MatchView.java
  81. BIN
      src/main/resources/META-INF/resources/images/chess-sources/bb.png
  82. BIN
      src/main/resources/META-INF/resources/images/chess-sources/bk.png
  83. BIN
      src/main/resources/META-INF/resources/images/chess-sources/bn.png
  84. BIN
      src/main/resources/META-INF/resources/images/chess-sources/board.png
  85. BIN
      src/main/resources/META-INF/resources/images/chess-sources/bp.png
  86. BIN
      src/main/resources/META-INF/resources/images/chess-sources/bq.png
  87. BIN
      src/main/resources/META-INF/resources/images/chess-sources/br.png
  88. BIN
      src/main/resources/META-INF/resources/images/chess-sources/wb.png
  89. BIN
      src/main/resources/META-INF/resources/images/chess-sources/wk.png
  90. BIN
      src/main/resources/META-INF/resources/images/chess-sources/wn.png
  91. BIN
      src/main/resources/META-INF/resources/images/chess-sources/wp.png
  92. BIN
      src/main/resources/META-INF/resources/images/chess-sources/wq.png
  93. BIN
      src/main/resources/META-INF/resources/images/chess-sources/wr.png

+ 2
- 0
.gitignore View File

@ -97,3 +97,5 @@ fabric.properties
hs_err_pid* hs_err_pid*
.gitignore .gitignore
src/main/resources/META-INF/resources/images/games/*

+ 8
- 8
README.md View File

@ -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. To run from the command line, use `mvn` and open http://localhost:8080 in your browser.
### Running and debugging the application in Intellij IDEA ### 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. 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. 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 ### 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. 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. You can now also attach breakpoints in code for debugging purposes, by clicking next to a line number in any source file.
## Project structure ## 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? ## What next?


+ 87
- 87
db/db_init.sql View File

@ -1,8 +1,8 @@
-- Database: chessleague
-- Database: app
-- DROP DATABASE chessleague;
-- DROP DATABASE app;
-- CREATE DATABASE chessleague
-- CREATE DATABASE app
-- WITH -- WITH
-- OWNER = postgres -- OWNER = postgres
-- ENCODING = 'UTF8' -- 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 ( 7, 13, 26);
INSERT INTO "match" ("player1", "player2", "matchday") VALUES (14, 2, 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'));


frontend/components/leafletmap/leaflet-map.js → frontend/app/components/leafletmap/leaflet-map.js View File


frontend/views/about/about-view.css → frontend/app/views/about/about-view.css View File


frontend/views/addressform/address-form-view.css → frontend/app/views/addressform/address-form-view.css View File


frontend/views/cardlist/card-list-view.css → frontend/app/views/cardlist/card-list-view.css View File


frontend/views/creditcardform/credit-card-form-view.css → frontend/app/views/creditcardform/credit-card-form-view.css View File


frontend/views/helloworld/hello-world-view.css → frontend/app/views/helloworld/hello-world-view.css View File


frontend/views/main/main-view.css → frontend/app/views/main/main-view.css View File


frontend/views/map/map-view.css → frontend/app/views/map/map-view.css View File


frontend/views/masterdetail/master-detail-view.css → frontend/app/views/masterdetail/master-detail-view.css View File


frontend/views/personform/person-form-view.css → frontend/app/views/personform/person-form-view.css View File


frontend/views/results/results-view.css → frontend/app/views/results/results-view.css View File


frontend/views/table/table-view.css → frontend/app/views/table/table-view.css View File


+ 1
- 1
pom.xml View File

@ -67,7 +67,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.vaadin</groupId> <groupId>com.vaadin</groupId>
<!-- Replace artifactId with vaadin-core to use only free components -->
<!-- Replace artifactId with vaadin-core to use only free app.components -->
<artifactId>vaadin</artifactId> <artifactId>vaadin</artifactId>
<exclusions> <exclusions>
<!-- Webjars are only needed when running in Vaadin 13 compatibility mode --> <!-- Webjars are only needed when running in Vaadin 13 compatibility mode -->


src/main/java/com/example/application/Application.java → src/main/java/app/Application.java View File

@ -1,4 +1,4 @@
package com.example.application;
package app;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

src/main/java/com/example/application/components/leafletmap/LeafletMap.java → src/main/java/app/components/leafletmap/LeafletMap.java View File

@ -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.Component;
import com.vaadin.flow.component.HasSize; import com.vaadin.flow.component.HasSize;
@ -7,7 +7,7 @@ import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.dependency.JsModule; import com.vaadin.flow.component.dependency.JsModule;
@CssImport("leaflet/dist/leaflet.css") @CssImport("leaflet/dist/leaflet.css")
@JsModule("./components/leafletmap/leaflet-map.js")
@JsModule("app/components/leafletmap/leaflet-map.js")
@Tag("leaflet-map") @Tag("leaflet-map")
public class LeafletMap extends Component implements HasSize { public class LeafletMap extends Component implements HasSize {

src/main/java/com/example/application/components/navigation/SeasonAndMatchdayNavigation.java → src/main/java/app/components/navigation/SeasonAndMatchdayNavigation.java View File

@ -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.html.Label;
import com.vaadin.flow.component.orderedlayout.FlexComponent; import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.HorizontalLayout;

src/main/java/com/example/application/data/AbstractEntity.java → src/main/java/app/data/AbstractEntity.java View File

@ -1,4 +1,4 @@
package com.example.application.data;
package app.data;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.Id; import javax.persistence.Id;

src/main/java/com/example/application/data/bean/CalculatedMatch.java → src/main/java/app/data/bean/CalculatedMatch.java View File

@ -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 { public class CalculatedMatch {
private Match match; private Match match;

src/main/java/com/example/application/data/bean/PlayerForTable.java → src/main/java/app/data/bean/PlayerForTable.java View File

@ -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 { public class PlayerForTable {
private Player player; private Player player;

src/main/java/com/example/application/data/chesscom/ChessComArchive.java → src/main/java/app/data/chesscom/ChessComArchive.java View File

@ -1,4 +1,4 @@
package com.example.application.data.chesscom;
package app.data.chesscom;
import java.util.List; import java.util.List;

src/main/java/com/example/application/data/chesscom/ChessComArchiveList.java → src/main/java/app/data/chesscom/ChessComArchiveList.java View File

@ -1,4 +1,4 @@
package com.example.application.data.chesscom;
package app.data.chesscom;
import java.util.List; import java.util.List;

src/main/java/com/example/application/data/chesscom/ChessComGame.java → src/main/java/app/data/chesscom/ChessComGame.java View File

@ -1,4 +1,4 @@
package com.example.application.data.chesscom;
package app.data.chesscom;
public class ChessComGame { public class ChessComGame {
private String url; private String url;

src/main/java/com/example/application/data/entity/Game.java → src/main/java/app/data/entity/Game.java View File

@ -1,4 +1,4 @@
package com.example.application.data.entity;
package app.data.entity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Objects; import java.util.Objects;

src/main/java/com/example/application/data/entity/GameInfo.java → src/main/java/app/data/entity/GameInfo.java View File

@ -1,4 +1,4 @@
package com.example.application.data.entity;
package app.data.entity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Objects; import java.util.Objects;

src/main/java/com/example/application/data/entity/Match.java → src/main/java/app/data/entity/Match.java View File

@ -1,4 +1,4 @@
package com.example.application.data.entity;
package app.data.entity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Collection; import java.util.Collection;

src/main/java/com/example/application/data/entity/Matchday.java → src/main/java/app/data/entity/Matchday.java View File

@ -1,4 +1,4 @@
package com.example.application.data.entity;
package app.data.entity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Collection; import java.util.Collection;

src/main/java/com/example/application/data/entity/Player.java → src/main/java/app/data/entity/Player.java View File

@ -1,4 +1,4 @@
package com.example.application.data.entity;
package app.data.entity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Collection; import java.util.Collection;

src/main/java/com/example/application/data/entity/PlayerInfo.java → src/main/java/app/data/entity/PlayerInfo.java View File

@ -1,4 +1,4 @@
package com.example.application.data.entity;
package app.data.entity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Objects; import java.util.Objects;

src/main/java/com/example/application/data/entity/SampleAddress.java → src/main/java/app/data/entity/SampleAddress.java View File

@ -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 javax.persistence.Entity;

src/main/java/com/example/application/data/entity/SamplePerson.java → src/main/java/app/data/entity/SamplePerson.java View File

@ -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 javax.persistence.Entity;
import java.time.LocalDate; import java.time.LocalDate;

src/main/java/com/example/application/data/entity/Season.java → src/main/java/app/data/entity/Season.java View File

@ -1,4 +1,4 @@
package com.example.application.data.entity;
package app.data.entity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Collection; import java.util.Collection;

src/main/java/com/example/application/data/generator/DataGenerator.java → src/main/java/app/data/generator/DataGenerator.java View File

@ -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 com.vaadin.flow.spring.annotation.SpringComponent;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;

+ 142
- 0
src/main/java/app/data/service/ChessComService.java View File

@ -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<Game> getLatestGamesBetweenPlayers(@NonNull Match match, int minAmountOfGames, int maxAmountOfMonths) {
List<Game> 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<ChessComGame> getChessComGames(String archiveUrl) {
List<ChessComGame> list = new ArrayList<>();
getChessComArchive(archiveUrl).ifPresent(chessComArchive -> list.addAll(chessComArchive.getGames()));
return list;
}
private Optional<ChessComArchive> 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<String> getLatestArchiveUrls(@NonNull Player player, int maxAmountOfMonths) {
List<String> archiveUrls = getArchiveUrls(player);
if (archiveUrls.size() >= maxAmountOfMonths) {
archiveUrls = archiveUrls.subList(0, maxAmountOfMonths);
}
return archiveUrls;
}
private List<String> getArchiveUrls(@NonNull Player player) {
String endPoint = ARCHIVES_ENDPOINT.replace("{username}", ChessComUtils.getUsernameForUrl(player));
List<String> 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<ChessComGame> getChessComGame(@NonNull Game game) {
return getChessComGame(game, game.getMatch().getPlayer1())
.or(() -> getChessComGame(game, game.getMatch().getPlayer2()));
}
private Optional<ChessComGame> 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> chessComArchive = getChessComArchive(archiveUrl);
if (chessComArchive.isEmpty()) {
continue;
}
List<ChessComGame> 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<ChessComGame> 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<Optional<ChessComArchive>, Stream<ChessComGame>>)
// chessComArchive -> chessComArchive.stream()
// .flatMap(archive -> archive.getGames().stream()))
// .filter(chessComGame -> chessComGame.getUrl().equals(game.getGameInfo().getUrl()))
// .findFirst();
// }
}

src/main/java/com/example/application/data/service/GameInfoRepository.java → src/main/java/app/data/service/GameInfoRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface GameInfoRepository extends JpaRepository<GameInfo, Integer> { public interface GameInfoRepository extends JpaRepository<GameInfo, Integer> {

src/main/java/com/example/application/data/service/GameInfoService.java → src/main/java/app/data/service/GameInfoService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.vaadin.artur.helpers.CrudService; import org.vaadin.artur.helpers.CrudService;

src/main/java/com/example/application/data/service/GameRepository.java → src/main/java/app/data/service/GameRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface GameRepository extends JpaRepository<Game, Integer> { public interface GameRepository extends JpaRepository<Game, Integer> {

src/main/java/com/example/application/data/service/GameService.java → src/main/java/app/data/service/GameService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.vaadin.artur.helpers.CrudService; import org.vaadin.artur.helpers.CrudService;

src/main/java/com/example/application/data/service/MatchRepository.java → src/main/java/app/data/service/MatchRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface MatchRepository extends JpaRepository<Match, Integer> { public interface MatchRepository extends JpaRepository<Match, Integer> {

src/main/java/com/example/application/data/service/MatchService.java → src/main/java/app/data/service/MatchService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.vaadin.artur.helpers.CrudService; import org.vaadin.artur.helpers.CrudService;

src/main/java/com/example/application/data/service/MatchdayRepository.java → src/main/java/app/data/service/MatchdayRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface MatchdayRepository extends JpaRepository<Matchday, Integer> { public interface MatchdayRepository extends JpaRepository<Matchday, Integer> {

src/main/java/com/example/application/data/service/MatchdayService.java → src/main/java/app/data/service/MatchdayService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

src/main/java/com/example/application/data/service/PlayerInfoRepository.java → src/main/java/app/data/service/PlayerInfoRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface PlayerInfoRepository extends JpaRepository<PlayerInfo, Integer> { public interface PlayerInfoRepository extends JpaRepository<PlayerInfo, Integer> {

src/main/java/com/example/application/data/service/PlayerInfoService.java → src/main/java/app/data/service/PlayerInfoService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.vaadin.artur.helpers.CrudService; import org.vaadin.artur.helpers.CrudService;

src/main/java/com/example/application/data/service/PlayerRepository.java → src/main/java/app/data/service/PlayerRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface PlayerRepository extends JpaRepository<Player, Integer> { public interface PlayerRepository extends JpaRepository<Player, Integer> {

src/main/java/com/example/application/data/service/PlayerService.java → src/main/java/app/data/service/PlayerService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.vaadin.artur.helpers.CrudService; import org.vaadin.artur.helpers.CrudService;

src/main/java/com/example/application/data/service/SampleAddressRepository.java → src/main/java/app/data/service/SampleAddressRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface SampleAddressRepository extends JpaRepository<SampleAddress, Integer> { public interface SampleAddressRepository extends JpaRepository<SampleAddress, Integer> {

src/main/java/com/example/application/data/service/SampleAddressService.java → src/main/java/app/data/service/SampleAddressService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.vaadin.artur.helpers.CrudService; import org.vaadin.artur.helpers.CrudService;

src/main/java/com/example/application/data/service/SamplePersonRepository.java → src/main/java/app/data/service/SamplePersonRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface SamplePersonRepository extends JpaRepository<SamplePerson, Integer> { public interface SamplePersonRepository extends JpaRepository<SamplePerson, Integer> {

src/main/java/com/example/application/data/service/SamplePersonService.java → src/main/java/app/data/service/SamplePersonService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.vaadin.artur.helpers.CrudService; import org.vaadin.artur.helpers.CrudService;

src/main/java/com/example/application/data/service/SeasonRepository.java → src/main/java/app/data/service/SeasonRepository.java View File

@ -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; import org.springframework.data.jpa.repository.JpaRepository;
public interface SeasonRepository extends JpaRepository<Season, Integer> { public interface SeasonRepository extends JpaRepository<Season, Integer> {

src/main/java/com/example/application/data/service/SeasonService.java → src/main/java/app/data/service/SeasonService.java View File

@ -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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.vaadin.artur.helpers.CrudService; import org.vaadin.artur.helpers.CrudService;

+ 75
- 0
src/main/java/app/image/ImageGenerator.java View File

@ -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<Character> WHITE_PIECES = Set.of('B', 'K', 'N', 'P', 'Q', 'R');
private static final Set<Character> BLACK_PIECES = Set.of('b', 'k', 'n', 'p', 'q', 'r');
private static final Set<Character> 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!");
}
}

+ 48
- 0
src/main/java/app/image/ImageService.java View File

@ -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<String> getVaadinImagePath(Game game) {
return getImagePath(game).map(path -> path.replace("src/main/resources/META-INF/resources/", ""));
}
public Optional<String> 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<String> 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<String> getFen(Game game) {
return chessComService.getChessComGame(game).map(ChessComGame::getFen);
}
}

+ 36
- 0
src/main/java/app/image/ImageUtils.java View File

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

src/main/java/com/example/application/navigation/Navigation.java → src/main/java/app/navigation/Navigation.java View File

@ -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.*;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.html.Label; import com.vaadin.flow.component.html.Label;

src/main/java/com/example/application/navigation/NavigationUtils.java → src/main/java/app/navigation/NavigationUtils.java View File

@ -1,8 +1,7 @@
package com.example.application.navigation;
package app.navigation;
import com.vaadin.flow.router.WildcardParameter; import com.vaadin.flow.router.WildcardParameter;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;

src/main/java/com/example/application/navigation/UrlParameterType.java → src/main/java/app/navigation/UrlParameterType.java View File

@ -1,4 +1,4 @@
package com.example.application.navigation;
package app.navigation;
public enum UrlParameterType { public enum UrlParameterType {
SEASON, SEASON,

src/main/java/com/example/application/utils/ChessComUtils.java → src/main/java/app/utils/ChessComUtils.java View File

@ -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; import org.springframework.lang.NonNull;
public class ChessComUtils { public class ChessComUtils {
@ -15,7 +16,7 @@ public class ChessComUtils {
.replace("time_control", "timeControl"); .replace("time_control", "timeControl");
} }
public static String getUrlPart(Player player) {
public static String getUsernameForUrl(Player player) {
return player.getNickname().toLowerCase(); return player.getNickname().toLowerCase();
} }
@ -29,11 +30,11 @@ public class ChessComUtils {
return 0; 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 white = game.getWhite().getUsername();
String black = game.getBlack().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)); return (white.equals(name1) || white.equals(name2)) && (black.equals(name1) || black.equals(name2));
} }

src/main/java/com/example/application/utils/HttpUtils.java → src/main/java/app/utils/HttpUtils.java View File

@ -1,4 +1,4 @@
package com.example.application.utils;
package app.utils;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;

src/main/java/com/example/application/utils/StringUtils.java → src/main/java/app/utils/StringUtils.java View File

@ -1,4 +1,4 @@
package com.example.application.utils;
package app.utils;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;

src/main/java/com/example/application/utils/VaadinUtils.java → src/main/java/app/utils/VaadinUtils.java View File

@ -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.data.renderer.TemplateRenderer;
import com.vaadin.flow.function.ValueProvider; import com.vaadin.flow.function.ValueProvider;

src/main/java/com/example/application/views/about/AboutView.java → src/main/java/app/views/about/AboutView.java View File

@ -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.Text;
import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.html.Div; import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; 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) @Route(value = "about", layout = MainView.class)
@PageTitle("About") @PageTitle("About")
public class AboutView extends Div { public class AboutView extends Div {

src/main/java/com/example/application/views/addressform/AddressFormView.java → src/main/java/app/views/addressform/AddressFormView.java View File

@ -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.Component;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant; 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.PageTitle;
import com.vaadin.flow.router.Route; 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) @Route(value = "address-form", layout = MainView.class)
@PageTitle("Address Form") @PageTitle("Address Form")
public class AddressFormView extends Div { public class AddressFormView extends Div {

src/main/java/com/example/application/views/cardlist/CardListView.java → src/main/java/app/views/cardlist/CardListView.java View File

@ -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.dependency.CssImport;
import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.GridVariant; import com.vaadin.flow.component.grid.GridVariant;
@ -18,7 +18,7 @@ import com.vaadin.flow.router.Route;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; 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) @Route(value = "card-list", layout = MainView.class)
@PageTitle("Card List") @PageTitle("Card List")
public class CardListView extends Div implements AfterNavigationObserver { public class CardListView extends Div implements AfterNavigationObserver {

src/main/java/com/example/application/views/cardlist/Person.java → src/main/java/app/views/cardlist/Person.java View File

@ -1,4 +1,4 @@
package com.example.application.views.cardlist;
package app.views.cardlist;
public class Person { public class Person {

src/main/java/com/example/application/views/creditcardform/CreditCardFormView.java → src/main/java/app/views/creditcardform/CreditCardFormView.java View File

@ -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.Component;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant; 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.PageTitle;
import com.vaadin.flow.router.Route; 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) @Route(value = "credit-card-form", layout = MainView.class)
@PageTitle("Credit Card Form") @PageTitle("Credit Card Form")
public class CreditCardFormView extends Div { public class CreditCardFormView extends Div {

src/main/java/com/example/application/views/helloworld/HelloWorldView.java → src/main/java/app/views/helloworld/HelloWorldView.java View File

@ -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.button.Button;
import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.notification.Notification; 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.PageTitle;
import com.vaadin.flow.router.Route; 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) @Route(value = "hello", layout = MainView.class)
@PageTitle("Hello World") @PageTitle("Hello World")
public class HelloWorldView extends HorizontalLayout { public class HelloWorldView extends HorizontalLayout {

src/main/java/com/example/application/views/main/MainView.java → src/main/java/app/views/main/MainView.java View File

@ -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.Component;
import com.vaadin.flow.component.ComponentUtil; import com.vaadin.flow.component.ComponentUtil;
import com.vaadin.flow.component.applayout.AppLayout; import com.vaadin.flow.component.applayout.AppLayout;
@ -25,9 +26,9 @@ import com.vaadin.flow.theme.lumo.Lumo;
import java.util.Optional; 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", @PWA(name = "Schachliga DACH",
shortName = "Schachliga DACH", shortName = "Schachliga DACH",
iconPath = "images/logo.png", iconPath = "images/logo.png",

src/main/java/com/example/application/views/map/MapView.java → src/main/java/app/views/map/MapView.java View File

@ -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.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;

src/main/java/com/example/application/views/masterdetail/MasterDetailView.java → src/main/java/app/views/masterdetail/MasterDetailView.java View File

@ -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.Component;
import com.vaadin.flow.component.HasStyle; import com.vaadin.flow.component.HasStyle;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
@ -29,7 +29,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; 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) @Route(value = "master-detail", layout = MainView.class)
@PageTitle("Master-Detail") @PageTitle("Master-Detail")
public class MasterDetailView extends Div { public class MasterDetailView extends Div {

src/main/java/com/example/application/views/personform/PersonFormView.java → src/main/java/app/views/personform/PersonFormView.java View File

@ -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.Component;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant; 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.PageTitle;
import com.vaadin.flow.router.Route; 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) @Route(value = "person-form", layout = MainView.class)
@PageTitle("Person Form") @PageTitle("Person Form")
public class PersonFormView extends Div { public class PersonFormView extends Div {

+ 66
- 0
src/main/java/app/views/results/MatchView.java View File

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

src/main/java/com/example/application/views/results/MatchdayView.java → src/main/java/app/views/results/MatchdayView.java View File

@ -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.button.Button;
import com.vaadin.flow.component.grid.ColumnTextAlign; import com.vaadin.flow.component.grid.ColumnTextAlign;
import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.grid.Grid;

src/main/java/com/example/application/views/results/ResultsView.java → src/main/java/app/views/results/ResultsView.java View File

@ -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.dependency.CssImport;
import com.vaadin.flow.component.html.Div; import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.splitlayout.SplitLayout; import com.vaadin.flow.component.splitlayout.SplitLayout;
import com.vaadin.flow.router.*; import com.vaadin.flow.router.*;
import org.springframework.beans.factory.annotation.Autowired; 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) @Route(value = "results", layout = MainView.class)
@RouteAlias(value = "", layout = MainView.class)
@PageTitle("Schachliga DACH - Results") @PageTitle("Schachliga DACH - Results")
public class ResultsView extends Div implements HasUrlParameter<String> { public class ResultsView extends Div implements HasUrlParameter<String> {
@ -24,6 +26,7 @@ public class ResultsView extends Div implements HasUrlParameter<String> {
public ResultsView(@Autowired SeasonService seasonService, public ResultsView(@Autowired SeasonService seasonService,
@Autowired MatchdayService matchdayService, @Autowired MatchdayService matchdayService,
@Autowired MatchService matchService, @Autowired MatchService matchService,
@Autowired ImageService imageService,
@Autowired ChessComService chessComService, @Autowired ChessComService chessComService,
@Autowired PlayerService playerService) { @Autowired PlayerService playerService) {
@ -31,7 +34,7 @@ public class ResultsView extends Div implements HasUrlParameter<String> {
this.navigation.setAutoselectSeason(true); this.navigation.setAutoselectSeason(true);
this.navigation.setAutoselectMatchday(true); this.navigation.setAutoselectMatchday(true);
this.matchdayView = new MatchdayView(navigation, matchService); this.matchdayView = new MatchdayView(navigation, matchService);
this.matchView = new MatchView(navigation, this);
this.matchView = new MatchView(navigation, this, imageService);
addClassName("results-view"); addClassName("results-view");

src/main/java/com/example/application/views/table/TableView.java → src/main/java/app/views/table/TableView.java View File

@ -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.dependency.CssImport;
import com.vaadin.flow.component.grid.ColumnTextAlign; import com.vaadin.flow.component.grid.ColumnTextAlign;
import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.grid.Grid;
@ -24,9 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
@CssImport("./views/table/table-view.css")
@CssImport("app/views/table/table-view.css")
@Route(value = "table", layout = MainView.class) @Route(value = "table", layout = MainView.class)
@RouteAlias(value = "", layout = MainView.class)
@PageTitle("Schachliga DACH - Table") @PageTitle("Schachliga DACH - Table")
public class TableView extends VerticalLayout implements HasUrlParameter<String> { public class TableView extends VerticalLayout implements HasUrlParameter<String> {

+ 0
- 81
src/main/java/com/example/application/data/service/ChessComService.java View File

@ -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<Game> 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<String> archiveUrls = gson.fromJson(HttpUtils.getJson(url), ChessComArchiveList.class).getArchives();
archiveUrls.sort(Collections.reverseOrder());
if (archiveUrls.size() >= 2) {
archiveUrls = archiveUrls.subList(0, 2);
}
List<Game> list = new ArrayList<>();
for (String archiveUrl : archiveUrls) {
String unpreparedJson = HttpUtils.getJson(archiveUrl);
if (unpreparedJson == null) {
continue;
}
String preparedJson = ChessComUtils.getPreparedArchiveJson(unpreparedJson);
List<ChessComGame> 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!
}
}

+ 0
- 35
src/main/java/com/example/application/views/results/MatchView.java View File

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

BIN
src/main/resources/META-INF/resources/images/chess-sources/bb.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.4 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/bk.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.4 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/bn.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.5 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/board.png View File

Before After
Width: 1200  |  Height: 1200  |  Size: 13 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/bp.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.1 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/bq.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.9 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/br.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.3 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/wb.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.6 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/wk.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.7 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/wn.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.6 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/wp.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.2 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/wq.png View File

Before After
Width: 150  |  Height: 150  |  Size: 2.1 KiB

BIN
src/main/resources/META-INF/resources/images/chess-sources/wr.png View File

Before After
Width: 150  |  Height: 150  |  Size: 1.5 KiB

Loading…
Cancel
Save