From: <wak...@us...> - 2011-07-04 23:35:04
|
Revision: 1603 http://rails.svn.sourceforge.net/rails/?rev=1603&view=rev Author: wakko666 Date: 2011-07-04 23:34:57 +0000 (Mon, 04 Jul 2011) Log Message: ----------- Move more XML Parsing out of rails.game.Game and into rails.common.parser.GameFileParser Modified Paths: -------------- trunk/18xx/rails/common/parser/ComponentManager.java trunk/18xx/rails/common/parser/GameFileParser.java trunk/18xx/rails/game/Game.java Modified: trunk/18xx/rails/common/parser/ComponentManager.java =================================================================== --- trunk/18xx/rails/common/parser/ComponentManager.java 2011-07-04 22:27:18 UTC (rev 1602) +++ trunk/18xx/rails/common/parser/ComponentManager.java 2011-07-04 23:34:57 UTC (rev 1603) @@ -22,7 +22,10 @@ protected Logger log = Logger.getLogger(ComponentManager.class.getPackage().getName()); protected List<String> directories = new ArrayList<String>(); - + + private Map<String, ConfigurableComponentI> mComponentMap = + new HashMap<String, ConfigurableComponentI>(); + public ComponentManager(String gameName, Tag tag, Map<String, String> gameOptions) throws ConfigurationException { this.gameName = gameName; @@ -105,11 +108,14 @@ * @param componentName the of the component sought. * @return the component sought, or null if it has not been configured. */ - public ConfigurableComponentI findComponent(String componentName) { - return mComponentMap.get(componentName); + public ConfigurableComponentI findComponent(String componentName) throws ConfigurationException { + ConfigurableComponentI comp = mComponentMap.get(componentName); + + //FIXME: Revenue Manager is currently optional. + if (comp == null && componentName != "RevenueManager") { + throw new ConfigurationException("No XML element found for component named: " + componentName); + } + + return comp; } - - private Map<String, ConfigurableComponentI> mComponentMap = - new HashMap<String, ConfigurableComponentI>(); - } Modified: trunk/18xx/rails/common/parser/GameFileParser.java =================================================================== --- trunk/18xx/rails/common/parser/GameFileParser.java 2011-07-04 22:27:18 UTC (rev 1602) +++ trunk/18xx/rails/common/parser/GameFileParser.java 2011-07-04 23:34:57 UTC (rev 1603) @@ -1,12 +1,150 @@ package rails.common.parser; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; +import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.Element; +import rails.algorithms.RevenueManager; +import rails.common.DisplayBuffer; +import rails.common.LocalText; +import rails.common.parser.ComponentManager; +import rails.game.Bank; +import rails.game.CompanyManagerI; +import rails.game.GameManager; +import rails.game.MapManager; +import rails.game.PhaseManager; +import rails.game.PlayerManager; +import rails.game.StockMarketI; +import rails.game.TileManager; +import rails.game.TrainManager; + public class GameFileParser extends XMLParser { + private static String GAME_XML_FILE = "Game.xml"; + + private Tag componentManagerTag; + private ComponentManager componentManager; + private GameManager gameManager; + private CompanyManagerI companyManager; + private PlayerManager playerManager; + private PhaseManager phaseManager; + private TrainManager trainManager; + private StockMarketI stockMarket; + private MapManager mapManager; + private TileManager tileManager; + private RevenueManager revenueManager; + private Bank bank; + + public GameFileParser(String name, Map<String, String> gameOptions) { + + directories.add("data/" + name); + + try { + componentManagerTag = Tag.findTopTagInFile(GAME_XML_FILE, directories, XMLTags.COMPONENT_MANAGER_ELEMENT_ID); + componentManagerTag.setGameOptions(gameOptions); + + //XXX: Ultimately calls everyone's configureFromXML() methods. + componentManager = new ComponentManager(name, componentManagerTag, gameOptions); + + playerManager = (PlayerManager) componentManager.findComponent("PlayerManager"); + bank = (Bank) componentManager.findComponent("Bank"); + companyManager = (CompanyManagerI) componentManager.findComponent(CompanyManagerI.COMPONENT_NAME); + stockMarket = (StockMarketI) componentManager.findComponent(StockMarketI.COMPONENT_NAME); + gameManager = (GameManager) componentManager.findComponent("GameManager"); + phaseManager = (PhaseManager) componentManager.findComponent("PhaseManager"); + trainManager = (TrainManager) componentManager.findComponent("TrainManager"); + mapManager = (MapManager) componentManager.findComponent("Map"); + tileManager = (TileManager) componentManager.findComponent("TileManager"); + revenueManager = (RevenueManager) componentManager.findComponent("RevenueManager"); + } catch (Exception e) { + String message = + LocalText.getText("GameSetupFailed", GAME_XML_FILE); + log.fatal(message, e); + System.out.println(e.getMessage()); + e.printStackTrace(); + DisplayBuffer.add(message + ":\n " + e.getMessage()); + } + } + + /** + * @return the componentManager + */ + public ComponentManager getComponentManager() { + return componentManager; + } + + /** + * @return the gameManager + */ + public GameManager getGameManager() { + return gameManager; + } + + /** + * @return the companyManager + */ + public CompanyManagerI getCompanyManager() { + return companyManager; + } + + /** + * @return the playerManager + */ + public PlayerManager getPlayerManager() { + return playerManager; + } + + /** + * @return the phaseManager + */ + public PhaseManager getPhaseManager() { + return phaseManager; + } + + /** + * @return the trainManager + */ + public TrainManager getTrainManager() { + return trainManager; + } + + /** + * @return the stockMarket + */ + public StockMarketI getStockMarket() { + return stockMarket; + } + + /** + * @return the mapManager + */ + public MapManager getMapManager() { + return mapManager; + } + + /** + * @return the tileManager + */ + public TileManager getTileManager() { + return tileManager; + } + + /** + * @return the revenueManager + */ + public RevenueManager getRevenueManager() { + return revenueManager; + } + + /** + * @return the bank + */ + public Bank getBank() { + return bank; + } } + + + + Modified: trunk/18xx/rails/game/Game.java =================================================================== --- trunk/18xx/rails/game/Game.java 2011-07-04 22:27:18 UTC (rev 1602) +++ trunk/18xx/rails/game/Game.java 2011-07-04 23:34:57 UTC (rev 1603) @@ -9,19 +9,15 @@ import rails.algorithms.RevenueManager; import rails.common.DisplayBuffer; import rails.common.LocalText; -import rails.common.parser.ComponentManager; import rails.common.parser.ConfigurationException; +import rails.common.parser.GameFileParser; import rails.common.parser.GameOption; -import rails.common.parser.Tag; -import rails.common.parser.XMLTags; import rails.game.action.PossibleAction; -import rails.game.special.SpecialProperty; public class Game { public static final String version = "1.4.1+"; /** The component Manager */ - protected ComponentManager componentManager; protected GameManager gameManager; protected CompanyManagerI companyManager; protected PlayerManager playerManager; @@ -33,13 +29,12 @@ protected RevenueManager revenueManager; protected Bank bank; protected String name; - protected Tag componentManagerTag; - protected static String GAME_XML_FILE = "Game.xml"; + protected List<String> directories = new ArrayList<String>(); + protected List<String> players; + protected Map<String, String> gameOptions; - protected List<String> players; - protected static Logger log = Logger.getLogger(Game.class.getPackage().getName()); @@ -59,13 +54,16 @@ log.debug("Option: " + optionName + "=" + gameOptions.get(optionName)); } - directories.add("data"); - directories.add("data/" + name); + this.players = players; + + log.info("========== Start of rails.game " + name + " =========="); + log.info("Rails version "+version); + ReportBuffer.add(LocalText.getText("GameIs", name)); } - public String start() { + public String start() { if (players.size() < playerManager.minPlayers || players.size() > playerManager.maxPlayers) { @@ -78,110 +76,28 @@ } public boolean setup() { + GameFileParser gfp = new GameFileParser(name, gameOptions); + playerManager = gfp.getPlayerManager(); + companyManager = gfp.getCompanyManager(); + trainManager = gfp.getTrainManager(); + phaseManager = gfp.getPhaseManager(); + stockMarket = gfp.getStockMarket(); + mapManager = gfp.getMapManager(); + tileManager = gfp.getTileManager(); + revenueManager = gfp.getRevenueManager(); + bank = gfp.getBank(); + gameManager = gfp.getGameManager(); - try { - componentManagerTag = - Tag.findTopTagInFile(GAME_XML_FILE, directories, - XMLTags.COMPONENT_MANAGER_ELEMENT_ID); - if (componentManagerTag == null) { - throw new ConfigurationException( - "No Game XML element found in file " + GAME_XML_FILE); - } + /* + * Initializations that involve relations between components can + * only be done after all XML has been processed. + */ + playerManager.setPlayers(players, bank); + gameManager.init(name, playerManager, companyManager, + phaseManager, trainManager, stockMarket, mapManager, + tileManager, revenueManager, bank); - componentManagerTag.setGameOptions(gameOptions); - - // Have the ComponentManager work through the other rails.game files - //XXX: Ultimately calls everyone's configureFromXML() methods. - componentManager = new ComponentManager(name, componentManagerTag, gameOptions); - - log.info("========== Start of rails.game " + name + " =========="); - log.info("Rails version "+version); - ReportBuffer.add(LocalText.getText("GameIs", name)); - - playerManager = (PlayerManager) componentManager.findComponent("PlayerManager"); - if (playerManager == null) { - throw new ConfigurationException( - "No PlayerManager XML element found in file " + GAME_XML_FILE); - } - - bank = (Bank) componentManager.findComponent("Bank"); - if (bank == null) { - throw new ConfigurationException( - "No Bank XML element found in file " + GAME_XML_FILE); - } - - companyManager = - (CompanyManagerI) componentManager.findComponent(CompanyManagerI.COMPONENT_NAME); - if (companyManager == null) { - throw new ConfigurationException( - "No CompanyManager XML element found in file " - + GAME_XML_FILE); - } - stockMarket = - (StockMarketI) componentManager.findComponent(StockMarketI.COMPONENT_NAME); - if (stockMarket == null) { - throw new ConfigurationException( - "No StockMarket XML element found in file " - + GAME_XML_FILE); - } - gameManager = - (GameManager) componentManager.findComponent("GameManager"); - if (gameManager == null) { - throw new ConfigurationException( - "No GameManager XML element found in file " - + GAME_XML_FILE); - } - - phaseManager = - (PhaseManager) componentManager.findComponent("PhaseManager"); - if (phaseManager == null) { - throw new ConfigurationException( - "No PhaseManager XML element found in file " - + GAME_XML_FILE); - } - - trainManager = - (TrainManager) componentManager.findComponent("TrainManager"); - if (trainManager == null) { - throw new ConfigurationException( - "No TrainManager XML element found in file " - + GAME_XML_FILE); - } - - mapManager = - (MapManager) componentManager.findComponent("Map"); - if (mapManager == null) { - throw new ConfigurationException( - "No Map XML element found in file " - + GAME_XML_FILE); - } - - tileManager = - (TileManager) componentManager.findComponent("TileManager"); - if (tileManager == null) { - throw new ConfigurationException( - "No TileManager XML element found in file " - + GAME_XML_FILE); - } - - revenueManager = - (RevenueManager) componentManager.findComponent("RevenueManager"); - // revenueManager is optional so far -// if (revenueManager == null) { -// throw new ConfigurationException( -// "No RevenueManager XML element found in file " -// + GAME_XML_FILE); -// } - - /* - * Initialisations that involve relations between components can - * only be done after all XML has been processed. - */ - playerManager.setPlayers(players, bank); - gameManager.init(name, playerManager, companyManager, - phaseManager, trainManager, stockMarket, mapManager, - tileManager, revenueManager, bank); - + try { companyManager.finishConfiguration(gameManager); trainManager.finishConfiguration(gameManager); phaseManager.finishConfiguration(gameManager); @@ -189,18 +105,17 @@ bank.finishConfiguration(gameManager); stockMarket.finishConfiguration(gameManager); tileManager.finishConfiguration(gameManager); + if (revenueManager != null) revenueManager.finishConfiguration(gameManager); - } catch (Exception e) { - String message = - LocalText.getText("GameSetupFailed", GAME_XML_FILE); - log.fatal(message, e); + } catch (ConfigurationException e) { + log.fatal(e); System.out.println(e.getMessage()); e.printStackTrace(); - DisplayBuffer.add(message + ":\n " + e.getMessage()); + DisplayBuffer.add(e.getMessage()); return false; } - + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |