UserProfileContext extends GraphicalContext<BorderPane> { User createUser( @NonNull final GazePlay gazePlay, @NonNull final FlowPane choicePanel, @NonNull final String userProfileName, @NonNull final ImagePattern imagePattern, final boolean editable, final boolean newUser, final Dimension2D screenDimension ) { if (userProfileName.trim().isEmpty()) { throw new IllegalArgumentException("userProfileName should not be empty"); } final User user = new User(userProfileName); final Rectangle pictureRectangle = new Rectangle(0, 0, cardWidth, cardHeight); pictureRectangle.setFill(imagePattern); final Text userNameText = new Text(user.getName()); userNameText.setFill(Color.WHITE); userNameText.getStyleClass().add("gameChooserButtonTitle"); BorderPane.setAlignment(userNameText, Pos.BOTTOM_CENTER); final BorderPane content = new BorderPane(); content.getStyleClass().add("gameChooserButton"); content.getStyleClass().add("button"); content.setPadding(new Insets(10)); content.setCenter(pictureRectangle); content.setBottom(userNameText); user.setAlignment(Pos.TOP_RIGHT); user.getChildren().add(content); if (editable) { final double buttonsSize = screenDimension.getWidth() / 50; final BorderPane editUserButton = createEditUserButton(getGazePlay(), choicePanel, user, buttonsSize, screenDimension); final BorderPane deleteUserButton = createDeleteUserButton(getGazePlay(), choicePanel, user, buttonsSize); final VBox buttonBox = new VBox(); buttonBox.getChildren().addAll(editUserButton, deleteUserButton); user.getChildren().add(buttonBox); } final EventHandler<Event> mouseClickedEventHandler; if (newUser) { mouseClickedEventHandler = event -> { log.info("Adding user"); root.setEffect(new BoxBlur()); final Stage dialog = createDialog(gazePlay, gazePlay.getPrimaryStage(), choicePanel, user, true, screenDimension); final String dialogTitle = getGazePlay().getTranslator().translate("NewUser"); dialog.setTitle(dialogTitle); dialog.show(); dialog.toFront(); dialog.setAlwaysOnTop(true); }; } else { mouseClickedEventHandler = event -> { if (!user.getName().equals(getGazePlay().getTranslator().translate("DefaultUser"))) { ActiveConfigurationContext.switchToUser(user.getName()); } gazePlay.getTranslator().notifyLanguageChanged(); final Configuration config = ActiveConfigurationContext.getInstance(); CssUtil.setPreferredStylesheets(config, gazePlay.getPrimaryScene(), gazePlay.getCurrentScreenDimensionSupplier()); BackgroundMusicManager.onConfigurationChanged(); choicePanel.getChildren().clear(); gazePlay.onReturnToMenu(); }; } content.addEventFilter(MouseEvent.MOUSE_CLICKED, mouseClickedEventHandler); return user; } UserProfileContext(final GazePlay gazePlay); @Override ObservableList<Node> getChildren();  }
@Test void shouldThrowExceptionIfUserNameIsEmpty() { UserProfileContext context = new UserProfileContext(mockGazePlay); FlowPane choicePanel = new FlowPane(); ImagePattern imagePattern = new ImagePattern(new Image("bear.jpg")); assertThrows(IllegalArgumentException.class, () -> context.createUser(mockGazePlay, choicePanel, "", imagePattern, false, false, screenDimension)); }