package ee.tkasekamp.vickywaranalyzer.controller.tab; import ee.tkasekamp.vickywaranalyzer.controller.MainController; import ee.tkasekamp.vickywaranalyzer.controller.box.WarCountryBox; import ee.tkasekamp.vickywaranalyzer.core.Battle; import ee.tkasekamp.vickywaranalyzer.core.Battle.Result; import ee.tkasekamp.vickywaranalyzer.core.Battle.Type; import ee.tkasekamp.vickywaranalyzer.core.War; import ee.tkasekamp.vickywaranalyzer.service.ModelService; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; public class WarDetailsController extends AbstractController { @FXML private TableView<Battle> battleTable; @FXML private TableColumn<Battle, String> colNameBattle; @FXML private TableColumn<Battle, String> colDateBattle; @FXML private TableColumn<Battle, String> colAttackerBattle; @FXML private TableColumn<Battle, String> colDefenderBattle; @FXML private TableColumn<Battle, Type> colTypeBattle; @FXML private TableColumn<Battle, Result> colBattleResult; @FXML private TableColumn<Battle, Integer> colBattleTotalLosses; @FXML private Label warNameLabel; @FXML private Label warStartDateLabel; @FXML private Label warEndDateLabel; @FXML private Label warTotalLossesLabel; @FXML private Label warTotalShipLossesLabel; @FXML private Label warActionLabel; @FXML private Label warHasEndedLabel; @FXML private Label warGoalActorLabel; @FXML private Label warGoalReceiverLabel; @FXML private Label warGoalCBLabel; @FXML private Label warGoalCountryLabel; @FXML private Label warGoalScoreHelper; @FXML private Label warGoalScoreLabel; @FXML private Label warGoalChangeHelper; @FXML private Label warGoalChangeLabel; @FXML private Label warGoalDateHelper; @FXML private Label warGoalDateLabel; @FXML private Label warGoalFulfilledHelper; @FXML private Label warGoalFulfilledLabel; @FXML private Label warGoalStateLabel; @FXML private WarCountryBox attackerBoxController; @FXML private WarCountryBox defenderBoxController; private ObservableList<Battle> battleTableContent; private MainController main; private Tab tab; private ModelService modelService; public void init(MainController mainController, ModelService modelService, Tab tab) { main = mainController; this.tab = tab; this.modelService = modelService; setColumnValues(); attackerBoxController.init(modelService, "Attacker"); defenderBoxController.init(modelService, "Defender"); battleTableContent = FXCollections.observableArrayList(); /* Listening to selections in battleTable */ ObservableList<Battle> battleTableSelection = battleTable .getSelectionModel().getSelectedItems(); battleTableSelection.addListener(battleTableSelectionChanged); } @Override public void reset() { tab.setDisable(true); tab.setText("War"); } public void populate(War war) { /* Set the name of the tab */ tab.setText(war.getName()); tab.setDisable(false); /* Basic information about the war */ warNameLabel.setText(war.getName()); warStartDateLabel.setText(war.getStartDate()); warEndDateLabel.setText(war.getEndDate()); warActionLabel.setText(war.getAction()); if (war.isActive()) { warHasEndedLabel.setText("No"); } else { warHasEndedLabel.setText("Yes"); } attackerBoxController.populate(war); defenderBoxController.populate(war); battleTablePopulate(war); lossesPopulate(war); originalWarGoalPopulate(war); } private void setColumnValues() { colNameBattle .setCellValueFactory(new PropertyValueFactory<>( "name")); colDateBattle .setCellValueFactory(new PropertyValueFactory<>( "date")); colDefenderBattle .setCellValueFactory(new PropertyValueFactory<>( "defender")); colDefenderBattle .setCellFactory(column -> getCell()); colAttackerBattle .setCellValueFactory(new PropertyValueFactory<>( "attacker")); colAttackerBattle .setCellFactory(column -> getCell()); colTypeBattle .setCellValueFactory(new PropertyValueFactory<>( "battleType")); colBattleResult .setCellValueFactory(new PropertyValueFactory<>( "res")); colBattleTotalLosses .setCellValueFactory(new PropertyValueFactory<>( "totalLosses")); } private TableCell<Battle, String> getCell() { return new TableCell<Battle, String>() { @Override protected void updateItem(String item, boolean empty) { super.updateItem(item, empty); setText(modelService.getOfficialName(item)); } }; } /** * Sets all labels at the attackers side except losses */ private void battleTablePopulate(War war) { battleTableContent.clear(); /* Adding battles to list */ battleTableContent.addAll(war.getBattleList()); /* Displaying battles in table */ battleTable.setItems(battleTableContent); } /** * Sets labels for losses */ private void lossesPopulate(War war) { int [] losses = war.getLosses(); /* Attacker losses */ attackerBoxController.setTotalLosses(losses[0], losses[1]); /* Defender losses */ defenderBoxController.setTotalLosses(losses[2], losses[3]); /* Total losses */ warTotalLossesLabel.setText(Integer.toString(losses[0] + losses[2])); warTotalShipLossesLabel.setText(Integer .toString(losses[1] + losses[3])); } /** * Gives values to the labels related to wargoals */ private void originalWarGoalPopulate(War war) { /* True if the version is HoD. Otherwise some labels will be hidden */ if (modelService.isHOD()) { /* * Checking if this particular war has an original wargoal. * Otherwise the first wargoal in the wargoalList will be used */ if (!(war.getOriginalWarGoal().getActor().equals(""))) { warGoalActorLabel.setText(modelService.getOfficialName(war .getOriginalWarGoal().getActor())); warGoalReceiverLabel.setText(modelService.getOfficialName(war .getOriginalWarGoal().getReceiver())); warGoalCBLabel.setText(war.getOriginalWarGoal() .getCasus_belli()); warGoalCountryLabel.setText(modelService.getOfficialName(war .getOriginalWarGoal().getCountry())); warGoalStateLabel.setText(Integer.toString(war .getOriginalWarGoal().getState_province_id())); warGoalDateLabel.setText(war.getOriginalWarGoal().getDate()); warGoalScoreLabel.setText(Double.toString(war .getOriginalWarGoal().getScore())); warGoalChangeLabel.setText(Double.toString(war .getOriginalWarGoal().getChange())); warGoalFulfilledLabel.setText(war.getOriginalWarGoal() .getFulfilled().toString()); } else { warGoalActorLabel.setText(modelService.getOfficialName(war .getWarGoalList()[0].getActor())); warGoalReceiverLabel.setText(modelService.getOfficialName(war .getWarGoalList()[0].getReceiver())); warGoalCBLabel .setText(war.getWarGoalList()[0].getCasus_belli()); warGoalCountryLabel.setText(modelService.getOfficialName(war .getWarGoalList()[0].getCountry())); warGoalStateLabel .setText(Integer.toString(war.getWarGoalList()[0] .getState_province_id())); warGoalDateLabel.setText(war.getWarGoalList()[0].getDate()); warGoalScoreLabel .setText(Double.toString(war.getWarGoalList()[0] .getScore())); warGoalChangeLabel .setText(Double.toString(war.getWarGoalList()[0] .getChange())); warGoalFulfilledLabel.setText(war.getWarGoalList()[0] .getFulfilled().toString()); } /* Showing the disabled labels */ warGoalDateLabel.setVisible(true); warGoalDateHelper.setVisible(true); warGoalScoreLabel.setVisible(true); warGoalScoreHelper.setVisible(true); warGoalChangeLabel.setVisible(true); warGoalChangeHelper.setVisible(true); warGoalFulfilledLabel.setVisible(true); warGoalFulfilledHelper.setVisible(true); } else { try { warGoalActorLabel.setText(modelService.getOfficialName(war .getWarGoalList()[0].getActor())); warGoalReceiverLabel.setText(modelService.getOfficialName(war .getWarGoalList()[0].getReceiver())); warGoalCBLabel .setText(war.getWarGoalList()[0].getCasus_belli()); warGoalCountryLabel.setText(war.getWarGoalList()[0] .getCountry()); warGoalStateLabel .setText(Integer.toString(war.getWarGoalList()[0] .getState_province_id())); } catch (IndexOutOfBoundsException e) { /* Setting values to blank as some wars don't have any wargoals */ warGoalActorLabel.setText(""); warGoalReceiverLabel.setText(""); warGoalCBLabel.setText(""); warGoalCountryLabel.setText(""); warGoalStateLabel.setText(""); } /* Disabling unused labels */ warGoalDateLabel.setVisible(false); warGoalDateHelper.setVisible(false); warGoalScoreLabel.setVisible(false); warGoalScoreHelper.setVisible(false); warGoalChangeLabel.setVisible(false); warGoalChangeHelper.setVisible(false); warGoalFulfilledLabel.setVisible(false); warGoalFulfilledHelper.setVisible(false); } } /** * Battle table selection listener in the war details tab */ private final ListChangeListener<Battle> battleTableSelectionChanged = new ListChangeListener<Battle>() { @Override public void onChanged(Change<? extends Battle> c) { if (!battleTable.getSelectionModel().getSelectedItems().isEmpty()) { main.populateBattleTab((Battle) battleTable.getSelectionModel() .getSelectedItems().toArray()[0]); } } }; }