public class ShopPane extends BorderPane {
private static final String CONSOLES = "Konsolen";
private static final String VIDEO_GAMES = "Videospiele";
private BorderPane leftPane;
private ComboBox<String> articleTypeBox;
// general for center
private TextField nameTextField;
// specific for video games
private TextField ageRestrictionTextField;
private ComboBox<Genre> genreBox;
// specific for consoles
private ComboBox<Manufacturer> manufacturerBox;
private HBox buttonBox;
private Button buyButton;
private Button sellButton;
private Storage<VideoGame> videoGameStorage;
private Storage<GamingConsole> gamingConsoleStorage;
private TableView<VideoGame> videoGameTableView;
private TableView<GamingConsole> gamingConsoleTableView;
public ShopPane() {
this.videoGameStorage = new VideoGameStorage();
this.gamingConsoleStorage = new GamingConsoleStorage();
this.videoGameTableView = this.createVideoGameTableView(this.videoGameStorage.getArticles());
this.gamingConsoleTableView = this.createGamingConsoleTableView(this.gamingConsoleStorage.getArticles());
this.nameTextField = new TextField();
this.nameTextField.setPromptText("Name");
this.ageRestrictionTextField = new TextField();
this.ageRestrictionTextField.setPromptText("Age Restriction (int)");
this.genreBox = new ComboBox<>();
this.genreBox.getItems().addAll(Genre.values());
this.genreBox.getSelectionModel().selectFirst();
this.manufacturerBox = new ComboBox<>();
this.manufacturerBox.getItems().addAll(Manufacturer.values());
this.manufacturerBox.getSelectionModel().selectFirst();
this.articleTypeBox = new ComboBox<String>(FXCollections.observableArrayList(CONSOLES, VIDEO_GAMES));
this.articleTypeBox.valueProperty().addListener((observable, oldValue, newValue) -> {
if (newValue.equals(CONSOLES)) {
this.leftPane.setCenter(this.createConsoleCenter());
this.setCenter(this.gamingConsoleTableView);
} else {
this.leftPane.setCenter(this.createVideoGameCenter());
this.setCenter(this.videoGameTableView);
}
});
this.leftPane = new BorderPane();
this.leftPane.setTop(this.articleTypeBox);
this.setLeft(this.leftPane);
this.leftPane.setBottom(this.createButtonBox());
this.articleTypeBox.getSelectionModel().selectFirst();
// this.articleTypeBox.setValue(CONSOLES);
}
private Node createButtonBox() {
this.buttonBox = new HBox();
this.buyButton = new Button("Kaufen");
this.buyButton.setOnAction(event -> {
if (this.articleTypeBox.getValue().equals(CONSOLES)) {
GamingConsole console = new GamingConsole(this.nameTextField.getText(),
this.manufacturerBox.getValue());
this.gamingConsoleStorage.addArticle(console);
} else { // VIDEO_GAMES
VideoGame game = new VideoGame(this.nameTextField.getText(), this.genreBox.getValue());
String ageRestrictionString = this.ageRestrictionTextField.getText();
if (ageRestrictionString == null || ageRestrictionString.isEmpty()) {
this.videoGameStorage.addArticle(game);
} else if (ageRestrictionString.matches("[0-9]+")) {
game.setAgeRestriction(Integer.parseInt(ageRestrictionString));
this.videoGameStorage.addArticle(game);
}
}
});
this.sellButton = new Button("Verkaufen");
this.sellButton.setOnAction(event -> {
if (this.articleTypeBox.getValue().equals(CONSOLES)) {
GamingConsole console = this.gamingConsoleTableView.getSelectionModel().getSelectedItem();
if (console != null) {
this.gamingConsoleStorage.getArticles().remove(console);
}
} else { // VIDEO_GAMES
VideoGame game = this.videoGameTableView.getSelectionModel().getSelectedItem();
if (game != null) {
this.videoGameStorage.getArticles().remove(game);
}
}
});
this.buttonBox.getChildren().addAll(this.buyButton, this.sellButton);
return this.buttonBox;
}
private Node createVideoGameCenter() {
VBox vbox = new VBox();
vbox.getChildren().add(this.nameTextField);
vbox.getChildren().add(this.genreBox);
vbox.getChildren().add(this.ageRestrictionTextField);
return vbox;
}
private Node createConsoleCenter() {
VBox vbox = new VBox();
vbox.getChildren().add(this.nameTextField);
vbox.getChildren().add(this.manufacturerBox);
return vbox;
}
private TableView<VideoGame> createVideoGameTableView(ObservableList<VideoGame> videoGameList) {
TableColumn<VideoGame, String> idColumn = new TableColumn<VideoGame, String>("ID");
idColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
TableColumn<VideoGame, String> nameColumn = new TableColumn<VideoGame, String>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<VideoGame, String> genreColumn = new TableColumn<VideoGame, String>("Genre");
genreColumn.setCellValueFactory(new PropertyValueFactory<>("genre"));
TableColumn<VideoGame, String> ageRestrictionColumn = new TableColumn<VideoGame, String>("Age Restriction");
ageRestrictionColumn.setCellValueFactory(new PropertyValueFactory<>("ageRestriction"));
TableView<VideoGame> tableView = new TableView<VideoGame>(videoGameList);
tableView.getColumns().add(idColumn);
tableView.getColumns().add(nameColumn);
tableView.getColumns().add(genreColumn);
tableView.getColumns().add(ageRestrictionColumn);
return tableView;
}
private TableView<GamingConsole> createGamingConsoleTableView(ObservableList<GamingConsole> gamingConsoleList) {
TableColumn<GamingConsole, String> idColumn = new TableColumn<GamingConsole, String>("ID");
idColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
TableColumn<GamingConsole, String> nameColumn = new TableColumn<GamingConsole, String>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<GamingConsole, String> manufacturerColumn = new TableColumn<GamingConsole, String>("Manufacturer");
manufacturerColumn.setCellValueFactory(new PropertyValueFactory<>("manufacturer"));
TableView<GamingConsole> tableView = new TableView<>(gamingConsoleList);
tableView.getColumns().add(idColumn);
tableView.getColumns().add(nameColumn);
tableView.getColumns().add(manufacturerColumn);
return tableView;
}
}
private static final String CONSOLES = "Konsolen";
private static final String VIDEO_GAMES = "Videospiele";
private BorderPane leftPane;
private ComboBox<String> articleTypeBox;
// general for center
private TextField nameTextField;
// specific for video games
private TextField ageRestrictionTextField;
private ComboBox<Genre> genreBox;
// specific for consoles
private ComboBox<Manufacturer> manufacturerBox;
private HBox buttonBox;
private Button buyButton;
private Button sellButton;
private Storage<VideoGame> videoGameStorage;
private Storage<GamingConsole> gamingConsoleStorage;
private TableView<VideoGame> videoGameTableView;
private TableView<GamingConsole> gamingConsoleTableView;
public ShopPane() {
this.videoGameStorage = new VideoGameStorage();
this.gamingConsoleStorage = new GamingConsoleStorage();
this.videoGameTableView = this.createVideoGameTableView(this.videoGameStorage.getArticles());
this.gamingConsoleTableView = this.createGamingConsoleTableView(this.gamingConsoleStorage.getArticles());
this.nameTextField = new TextField();
this.nameTextField.setPromptText("Name");
this.ageRestrictionTextField = new TextField();
this.ageRestrictionTextField.setPromptText("Age Restriction (int)");
this.genreBox = new ComboBox<>();
this.genreBox.getItems().addAll(Genre.values());
this.genreBox.getSelectionModel().selectFirst();
this.manufacturerBox = new ComboBox<>();
this.manufacturerBox.getItems().addAll(Manufacturer.values());
this.manufacturerBox.getSelectionModel().selectFirst();
this.articleTypeBox = new ComboBox<String>(FXCollections.observableArrayList(CONSOLES, VIDEO_GAMES));
this.articleTypeBox.valueProperty().addListener((observable, oldValue, newValue) -> {
if (newValue.equals(CONSOLES)) {
this.leftPane.setCenter(this.createConsoleCenter());
this.setCenter(this.gamingConsoleTableView);
} else {
this.leftPane.setCenter(this.createVideoGameCenter());
this.setCenter(this.videoGameTableView);
}
});
this.leftPane = new BorderPane();
this.leftPane.setTop(this.articleTypeBox);
this.setLeft(this.leftPane);
this.leftPane.setBottom(this.createButtonBox());
this.articleTypeBox.getSelectionModel().selectFirst();
// this.articleTypeBox.setValue(CONSOLES);
}
private Node createButtonBox() {
this.buttonBox = new HBox();
this.buyButton = new Button("Kaufen");
this.buyButton.setOnAction(event -> {
if (this.articleTypeBox.getValue().equals(CONSOLES)) {
GamingConsole console = new GamingConsole(this.nameTextField.getText(),
this.manufacturerBox.getValue());
this.gamingConsoleStorage.addArticle(console);
} else { // VIDEO_GAMES
VideoGame game = new VideoGame(this.nameTextField.getText(), this.genreBox.getValue());
String ageRestrictionString = this.ageRestrictionTextField.getText();
if (ageRestrictionString == null || ageRestrictionString.isEmpty()) {
this.videoGameStorage.addArticle(game);
} else if (ageRestrictionString.matches("[0-9]+")) {
game.setAgeRestriction(Integer.parseInt(ageRestrictionString));
this.videoGameStorage.addArticle(game);
}
}
});
this.sellButton = new Button("Verkaufen");
this.sellButton.setOnAction(event -> {
if (this.articleTypeBox.getValue().equals(CONSOLES)) {
GamingConsole console = this.gamingConsoleTableView.getSelectionModel().getSelectedItem();
if (console != null) {
this.gamingConsoleStorage.getArticles().remove(console);
}
} else { // VIDEO_GAMES
VideoGame game = this.videoGameTableView.getSelectionModel().getSelectedItem();
if (game != null) {
this.videoGameStorage.getArticles().remove(game);
}
}
});
this.buttonBox.getChildren().addAll(this.buyButton, this.sellButton);
return this.buttonBox;
}
private Node createVideoGameCenter() {
VBox vbox = new VBox();
vbox.getChildren().add(this.nameTextField);
vbox.getChildren().add(this.genreBox);
vbox.getChildren().add(this.ageRestrictionTextField);
return vbox;
}
private Node createConsoleCenter() {
VBox vbox = new VBox();
vbox.getChildren().add(this.nameTextField);
vbox.getChildren().add(this.manufacturerBox);
return vbox;
}
private TableView<VideoGame> createVideoGameTableView(ObservableList<VideoGame> videoGameList) {
TableColumn<VideoGame, String> idColumn = new TableColumn<VideoGame, String>("ID");
idColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
TableColumn<VideoGame, String> nameColumn = new TableColumn<VideoGame, String>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<VideoGame, String> genreColumn = new TableColumn<VideoGame, String>("Genre");
genreColumn.setCellValueFactory(new PropertyValueFactory<>("genre"));
TableColumn<VideoGame, String> ageRestrictionColumn = new TableColumn<VideoGame, String>("Age Restriction");
ageRestrictionColumn.setCellValueFactory(new PropertyValueFactory<>("ageRestriction"));
TableView<VideoGame> tableView = new TableView<VideoGame>(videoGameList);
tableView.getColumns().add(idColumn);
tableView.getColumns().add(nameColumn);
tableView.getColumns().add(genreColumn);
tableView.getColumns().add(ageRestrictionColumn);
return tableView;
}
private TableView<GamingConsole> createGamingConsoleTableView(ObservableList<GamingConsole> gamingConsoleList) {
TableColumn<GamingConsole, String> idColumn = new TableColumn<GamingConsole, String>("ID");
idColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
TableColumn<GamingConsole, String> nameColumn = new TableColumn<GamingConsole, String>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<GamingConsole, String> manufacturerColumn = new TableColumn<GamingConsole, String>("Manufacturer");
manufacturerColumn.setCellValueFactory(new PropertyValueFactory<>("manufacturer"));
TableView<GamingConsole> tableView = new TableView<>(gamingConsoleList);
tableView.getColumns().add(idColumn);
tableView.getColumns().add(nameColumn);
tableView.getColumns().add(manufacturerColumn);
return tableView;
}
}