package ee.tkasekamp.vickywaranalyzer.service; import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import java.util.TreeMap; import ee.tkasekamp.vickywaranalyzer.core.Country; import ee.tkasekamp.vickywaranalyzer.core.JoinedCountry; import ee.tkasekamp.vickywaranalyzer.core.War; import ee.tkasekamp.vickywaranalyzer.parser.Parser; import ee.tkasekamp.vickywaranalyzer.util.Localisation; import javafx.scene.image.Image; public class ModelServiceImpl implements ModelService { private String date = ""; private String player = ""; private String startDate = ""; private TreeMap<String, Country> countryTreeMap; private ArrayList<War> warList; private UtilService utilServ; private Parser parser; public ModelServiceImpl(UtilService utilServ) { this.utilServ = utilServ; parser = new Parser(this); countryTreeMap = new TreeMap(); } @Override public String createModel(String saveGamePath, boolean useLocalisation) { try { warList = parser.read(saveGamePath); } catch (IOException e1) { return "Couldn't read save game"; } /* Generating a list of countries from warList */ createUniqueCountryList(); /* Localisation */ // TODO multithreading if (useLocalisation) { Localisation.readLocalisation(utilServ.getInstallFolder(), countryTreeMap); } // TODO multithreading try { utilServ.writePathsToFile(); } catch (IOException e) { return "Couldn't write to file"; } // TODO multithreading countryTreeMap.forEach((tag, country) -> country.setFlag(utilServ.loadFlag(tag))); return "Everything is OK"; } @Override public void reset() { date = ""; player = ""; startDate = ""; countryTreeMap.clear(); } @Override public String getOfficialName(String tag) { try { return countryTreeMap.get(tag).getOfficialName(); } catch (NullPointerException e) { return tag; } } /** * Creating a list that will contain every unique country. */ private void createUniqueCountryList() { Set<String> set = new HashSet<>(); for (War item : warList) { for (JoinedCountry country : item.getCountryList()) { set.add(country.getTag()); } } set.forEach(x -> countryTreeMap.put(x, new Country(x))); } @Override public void setDate(String line) { this.date = line; } @Override public void setPlayer(String line) { this.player = line; } @Override public void setStartDate(String line) { this.startDate = line; } @Override public String getDate() { return date; } @Override public String getPlayer() { return player; } @Override public String getStartDate() { return startDate; } @Override public String getPlayerOfficial() { return getOfficialName(player); } @Override public TreeMap<String, Country> getCountries() { return countryTreeMap; } @Override public ArrayList<War> getWars() { return warList; } @Override public boolean isHOD() { for (War war : warList) { if (!(war.getOriginalWarGoal().getCasus_belli().equals(""))) { return true; } } return false; } @Override public Image getFlag(String tag) { return countryTreeMap.get(tag).getFlag(); } }