package ee.tkasekamp.vickywaranalyzer.controller.box;
import ee.tkasekamp.vickywaranalyzer.core.Battle;
import ee.tkasekamp.vickywaranalyzer.core.Unit;
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 BattleCountryBox {
@FXML
private TableView<Unit> unitsTable;
@FXML
private TableColumn<Unit, String> colUnitType;
@FXML
private TableColumn<Unit, Integer> colUnitNumber;
@FXML
private Label losses;
@FXML
private Label armySize;
@FXML
private Label country;
@FXML
private ImageView flag;
@FXML
private Label leader;
// Helper labels that describe side of the country
@FXML
private Label sideHelper;
@FXML
private Label leaderHelper;
@FXML
private Label sideUnitsHelper;
private ObservableList<Unit> unitsTableContent;
private String side;
private ModelService modelService;
public void init(ModelService modelService, String side) {
unitsTableContent = FXCollections.observableArrayList();
this.side = side;
this.modelService = modelService;
setHelperLabels();
setColumnValues();
}
public void populate(Battle battle) {
unitsTableContent.clear();
if (side == "Attacker")
populateBox(battle.getAttacker(), battle.getAttackerUnits(),
battle.getAttackerLosses(), battle.getLeaderAttacker());
else
populateBox(battle.getDefender(), battle.getDefenderUnits(),
battle.getDefenderLosses(), battle.getLeaderDefender());
}
private void populateBox(String sideTag, Unit[] units, int sideLosses, String sideLeader) {
flag.setImage(modelService.getFlag(sideTag));
country.setText(modelService.getOfficialName(sideTag));
/* Army size and adding to table list */
int size = Battle.getUnitSize(units);
unitsTableContent.addAll(units);
unitsTable.setItems(unitsTableContent);
armySize.setText(Integer.toString(size));
losses.setText(Integer.toString(sideLosses));
leader.setText(sideLeader);
}
private void setHelperLabels() {
sideHelper.setText(side + ":");
leaderHelper.setText(side + " leader:");
sideUnitsHelper.setText(side + " units");
}
private void setColumnValues() {
/* Attacker side */
colUnitType.setCellValueFactory(new PropertyValueFactory<>("type"));
colUnitNumber.setCellValueFactory(new PropertyValueFactory<>("number"));
}
}