You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

147 lines
4.9 KiB

package app.views.match.components.utils;
import app.data.entity.Game;
import app.data.entity.Player;
import app.gameimage.GameImageUtils;
import app.utils.ChessComUtils;
import app.utils.EntityComponentUtils;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import java.util.ArrayList;
import java.util.List;
public class GameComponentUtils {
private GameComponentUtils() {
}
public static int getGameNumber(Game game) {
List<Game> games = new ArrayList<>(game.getMatch().getGames());
int index = games.indexOf(game);
if (index < 0) throw new IllegalStateException("The match associated with the Game does not contain the Game!");
return games.indexOf(game) + 1;
}
public static String getImagePath(Game game) {
String[] urlParts = game.getGameInfo().getChessComId().split("/");
return GameImageUtils.IMAGE_PATH_CLIENT + urlParts[urlParts.length - 1] + GameImageUtils.EXTENSION;
}
public static Player getWhitePlayer(Game game) {
return game.getPlayer1IsWhite() ? game.getMatch().getPlayer1() : game.getMatch().getPlayer2();
}
public static Player getBlackPlayer(Game game) {
return game.getPlayer1IsWhite() ? game.getMatch().getPlayer2() : game.getMatch().getPlayer1();
}
public static Div getPlayerDiv(Game game, boolean white) {
Player player = white ? getWhitePlayer(game) : getBlackPlayer(game);
Div div = new Div();
div.addClassName("player");
div.addClassName(white ? "white-player" : "black-player");
HorizontalLayout playerLabel = EntityComponentUtils.getPlayerLabel(player);
playerLabel.setWidthFull();
playerLabel.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
Label resultLabel = getResultLabel(game, white);
playerLabel.add(resultLabel);
div.add(playerLabel);
return div;
}
private static Label getResultLabel(Game game, boolean white) {
String resultString;
switch (game.getResult()) {
case -1:
resultString = white ? "0" : "1";
break;
case 0:
resultString = "0.5";
break;
case 1:
resultString = white ? "1" : "0";
break;
default:
throw new IllegalStateException(String.format("Game result must be either -1, 0, or 1, but it is %d!", game.getResult()));
}
Label resultLabel = new Label(resultString);
resultLabel.addClassName("bold-label");
return resultLabel;
}
public static Div getTimeControlDiv(Game game) {
String timeControl = game.getGameInfo().getTimeControl();
Icon icon;
String string;
switch (timeControl) {
case "600":
icon = new Icon(VaadinIcon.STOPWATCH);
string = "10 min";
break;
case "300":
icon = new Icon(VaadinIcon.BOLT);
string = "5 min";
break;
case "180":
icon = new Icon(VaadinIcon.BOMB);
string = "3 min";
break;
default:
icon = new Icon(VaadinIcon.QUESTION);
string = String.format("Unknown Time Control: %s", timeControl);
break;
}
Div div = new Div();
div.addClassName("time-control");
HorizontalLayout horizontalLayout = new HorizontalLayout();
horizontalLayout.setWidthFull();
horizontalLayout.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
horizontalLayout.add(icon, new Label(string));
div.add(horizontalLayout);
return div;
}
public static Label getHeader(Game game) {
Label label = new Label();
label.setText(String.format("Game %d", getGameNumber(game)));
label.addClassName("game-header");
return label;
}
public static Button getChessComButton(Game game) {
String string = "Watch on Chess.com";
Icon icon = new Icon(VaadinIcon.EYE);
Button button = new Button(string, icon);
button.setWidthFull();
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
button.addClickListener(event ->
button.getUI().ifPresent(ui ->
ui.getPage().open(ChessComUtils.getGameURL(game), "_blank")));
return button;
}
public static Label getVsLabel() {
Label label = new Label("vs.");
label.addClassName("vs-label");
return label;
}
}