package ee.tkasekamp.vickywaranalyzer.controller.box; import java.util.Arrays; import ee.tkasekamp.vickywaranalyzer.controller.other.ObservableJoinedCountry; import ee.tkasekamp.vickywaranalyzer.controller.tab.AbstractController; import ee.tkasekamp.vickywaranalyzer.core.JoinedCountry; import ee.tkasekamp.vickywaranalyzer.core.War; import ee.tkasekamp.vickywaranalyzer.service.ModelService; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.image.ImageView; public class WarCountryBox extends AbstractController { @FXML private ImageView flag; @FXML private Label originalLabel; @FXML private Label originalHelper; @FXML private Label totalLossesLabel; @FXML private Label totalShipLossesLabel; @FXML private TableView<ObservableJoinedCountry> table; @FXML private TableColumn<ObservableJoinedCountry, ImageView> colFlag; @FXML private TableColumn<ObservableJoinedCountry, String> colName; @FXML private TableColumn<ObservableJoinedCountry, String> colStartDate; @FXML private TableColumn<ObservableJoinedCountry, String> colEndDate; @FXML private Label warHelper; @FXML private Label warLabel; /** * Attacker or defender */ private String side; private ModelService modelService; private ObservableList<ObservableJoinedCountry> tableContent; public void init(ModelService modelService, String side) { this.side = side; this.modelService = modelService; tableContent = FXCollections.observableArrayList(); colName.setCellValueFactory(new PropertyValueFactory<>("officialName")); colFlag.setCellValueFactory(new PropertyValueFactory<>("flag")); colStartDate.setCellValueFactory(new PropertyValueFactory<>("joinDate")); colEndDate.setCellValueFactory(new PropertyValueFactory<>("endDate")); setHelperLabels(side); } @Override public void reset() { warLabel.setText(""); originalLabel.setText(""); totalLossesLabel.setText(""); totalShipLossesLabel.setText(""); tableContent.clear(); // Clearing list } public void populate(War war) { reset(); if (side == "Attacker") { populateHelper(war.getAttacker(), war.getOriginalAttacker()); populateTable(war.getCountryList(), true); } else { populateHelper(war.getDefender(), war.getOriginalDefender()); populateTable(war.getCountryList(), false); } } private void populateHelper(String warSide, String warSideOriginal) { originalLabel.setText(modelService.getOfficialName(warSideOriginal)); if (warSide.equals("")) { flag.setImage(modelService.getFlag(warSideOriginal)); // Hiding the labels as there is no use for them warLabel.setVisible(false); warHelper.setVisible(false); } else { flag.setImage(modelService.getFlag(warSide)); warLabel.setText(warSide); warLabel.setVisible(true); warHelper.setVisible(true); } } /** * Filters all countries in joinedCountries that have a specific joinType. Then adds them to the * table. * * @param joinedCountries * JoinedCountry Array * @param joinType * true for attacker, false for defender. */ private void populateTable(JoinedCountry[] joinedCountries, boolean joinType) { Arrays.stream(joinedCountries).filter(x -> joinType == x.isJoinType()).forEach( x -> tableContent .add(new ObservableJoinedCountry(modelService.getOfficialName(x.getTag()), modelService.getFlag(x.getTag()), x.getStartDate(), x.getEndDate()))); /* Adding the countries to table */ table.setItems(tableContent); } public void setTotalLosses(int totalLosses, int totalShipLosses) { totalLossesLabel.setText(Integer.toString(totalLosses)); totalShipLossesLabel.setText(Integer.toString(totalShipLosses)); } private void setHelperLabels(String side) { originalHelper.setText("Original " + side.toLowerCase() + ":"); warHelper.setText(side + ":"); } }