package games.strategy.triplea.printgenerator; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import games.strategy.debug.ClientLogger; import games.strategy.engine.data.GameData; import games.strategy.engine.data.PlayerID; import games.strategy.engine.data.Territory; import games.strategy.engine.data.UnitCollection; import games.strategy.engine.data.UnitType; import games.strategy.triplea.delegate.Matches; import games.strategy.util.Match; class CountryChart { private final Map<Territory, List<Map<UnitType, Integer>>> m_infoMap = new HashMap<>(); protected void saveToFile(final PlayerID player, final PrintGenerationData printData) { final GameData m_data = printData.getData(); final PrintGenerationData m_printData = printData; final Collection<Territory> m_terrCollection = Match.getMatches(m_data.getMap().getTerritories(), Matches.territoryHasUnitsOwnedBy(player)); Iterator<Territory> m_terrIterator = m_terrCollection.iterator(); Iterator<UnitType> availableUnits = m_data.getUnitTypeList().iterator(); while (m_terrIterator.hasNext()) { final Territory currentTerritory = m_terrIterator.next(); final UnitCollection unitsHere = currentTerritory.getUnits(); final List<Map<UnitType, Integer>> unitPairs = new ArrayList<>(); while (availableUnits.hasNext()) { final UnitType currentUnit = availableUnits.next(); final int amountHere = unitsHere.getUnitCount(currentUnit, player); final Map<UnitType, Integer> innerMap = new HashMap<>(); innerMap.put(currentUnit, amountHere); unitPairs.add(innerMap); } m_infoMap.put(currentTerritory, unitPairs); availableUnits = m_data.getUnitTypeList().iterator(); } FileWriter countryFileWriter = null; final File outFile = new File(m_printData.getOutDir(), player.getName() + ".csv"); try { countryFileWriter = new FileWriter(outFile, true); // Print Title final int numUnits = m_data.getUnitTypeList().size(); for (int i = 0; i < numUnits / 2 - 1 + numUnits % 2; i++) { countryFileWriter.write(","); } countryFileWriter.write("Setup Chart for the " + player.getName()); for (int i = 0; i < numUnits / 2 - numUnits % 2; i++) { countryFileWriter.write(","); } countryFileWriter.write("\r\n"); // Print Unit Types final Iterator<UnitType> unitIterator = m_data.getUnitTypeList().iterator(); countryFileWriter.write(","); while (unitIterator.hasNext()) { final UnitType currentType = unitIterator.next(); countryFileWriter.write(currentType.getName() + ","); } countryFileWriter.write("\r\n"); // Print Territories and Info m_terrIterator = Match.getMatches(m_data.getMap().getTerritories(), Matches.territoryHasUnitsOwnedBy(player)).iterator(); while (m_terrIterator.hasNext()) { final Territory currentTerritory = m_terrIterator.next(); countryFileWriter.write(currentTerritory.getName()); final List<Map<UnitType, Integer>> currentList = m_infoMap.get(currentTerritory); final Iterator<Map<UnitType, Integer>> mapIterator = currentList.iterator(); while (mapIterator.hasNext()) { final Map<UnitType, Integer> currentMap = mapIterator.next(); final Iterator<UnitType> uIter = currentMap.keySet().iterator(); while (uIter.hasNext()) { final UnitType uHere = uIter.next(); final int here = currentMap.get(uHere); countryFileWriter.write("," + here); } } countryFileWriter.write("\r\n"); } countryFileWriter.close(); } catch (final IOException e) { ClientLogger.logError("Failed Saving to File " + outFile.toString(), e); } } }