From: <wak...@us...> - 2011-07-04 22:27:26
|
Revision: 1602 http://rails.svn.sourceforge.net/rails/?rev=1602&view=rev Author: wakko666 Date: 2011-07-04 22:27:18 +0000 (Mon, 04 Jul 2011) Log Message: ----------- - Move ComponentManager to rails.common.parser. - Refactor ComponentManager to be less of a static singleton. - Move DisplayBuffer from rails.game to rails.common. Modified Paths: -------------- trunk/18xx/rails/algorithms/RevenueBonusTemplate.java trunk/18xx/rails/algorithms/RevenueManager.java trunk/18xx/rails/common/parser/GameInfoParser.java trunk/18xx/rails/common/parser/XMLTags.java trunk/18xx/rails/game/Bank.java trunk/18xx/rails/game/BonusToken.java trunk/18xx/rails/game/Company.java trunk/18xx/rails/game/CompanyI.java trunk/18xx/rails/game/CompanyManager.java trunk/18xx/rails/game/CompanyManagerI.java trunk/18xx/rails/game/CompanyType.java trunk/18xx/rails/game/CompanyTypeI.java trunk/18xx/rails/game/Game.java trunk/18xx/rails/game/GameManager.java trunk/18xx/rails/game/GameManagerI.java trunk/18xx/rails/game/MapHex.java trunk/18xx/rails/game/MapManager.java trunk/18xx/rails/game/OperatingRound.java trunk/18xx/rails/game/PhaseI.java trunk/18xx/rails/game/PhaseManager.java trunk/18xx/rails/game/PlayerManager.java trunk/18xx/rails/game/PrivateCompany.java trunk/18xx/rails/game/Round.java trunk/18xx/rails/game/ShareSellingRound.java trunk/18xx/rails/game/StartRound.java trunk/18xx/rails/game/StartRound_1830.java trunk/18xx/rails/game/StartRound_1835.java trunk/18xx/rails/game/StockMarket.java trunk/18xx/rails/game/StockMarketI.java trunk/18xx/rails/game/StockRound.java trunk/18xx/rails/game/TileManager.java trunk/18xx/rails/game/Token.java trunk/18xx/rails/game/TrainManager.java trunk/18xx/rails/game/TrainType.java trunk/18xx/rails/game/TreasuryShareRound.java trunk/18xx/rails/game/correct/CashCorrectionManager.java trunk/18xx/rails/game/correct/CorrectionManager.java trunk/18xx/rails/game/correct/MapCorrectionManager.java trunk/18xx/rails/game/special/SpecialProperty.java trunk/18xx/rails/game/special/SpecialPropertyI.java trunk/18xx/rails/game/specific/_1825/StartRound_1825.java trunk/18xx/rails/game/specific/_1835/OperatingRound_1835.java trunk/18xx/rails/game/specific/_1835/PrussianFormationRound.java trunk/18xx/rails/game/specific/_1851/StartRound_1851.java trunk/18xx/rails/game/specific/_1856/CGRFormationRound.java trunk/18xx/rails/game/specific/_1856/OperatingRound_1856.java trunk/18xx/rails/game/specific/_1856/StockRound_1856.java trunk/18xx/rails/game/specific/_1880/StartRound_1880.java trunk/18xx/rails/game/specific/_1889/OperatingRound_1889.java trunk/18xx/rails/game/specific/_18AL/NamedTrainRevenueModifier.java trunk/18xx/rails/game/specific/_18AL/NamedTrainToken.java trunk/18xx/rails/game/specific/_18EU/StartRound_18EU.java trunk/18xx/rails/game/specific/_18EU/StockRound_18EU.java trunk/18xx/rails/game/specific/_18Kaas/RuhrRevenueModifier.java trunk/18xx/rails/ui/swing/GameSetupWindow.java trunk/18xx/rails/ui/swing/GameUIManager.java trunk/18xx/rails/ui/swing/gamespecific/_1856/StatusWindow_1856.java trunk/18xx/rails/util/ListAndFixSavedFiles.java Added Paths: ----------- trunk/18xx/rails/common/DisplayBuffer.java trunk/18xx/rails/common/parser/ComponentManager.java trunk/18xx/rails/common/parser/ConfigurableComponentI.java trunk/18xx/rails/common/parser/GameFileParser.java Removed Paths: ------------- trunk/18xx/rails/game/ComponentManager.java trunk/18xx/rails/game/ConfigurableComponentI.java trunk/18xx/rails/game/DisplayBuffer.java Modified: trunk/18xx/rails/algorithms/RevenueBonusTemplate.java =================================================================== --- trunk/18xx/rails/algorithms/RevenueBonusTemplate.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/algorithms/RevenueBonusTemplate.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -5,9 +5,9 @@ import org.apache.log4j.Logger; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; -import rails.game.ConfigurableComponentI; import rails.game.GameManagerI; import rails.game.MapHex; import rails.game.PhaseI; Modified: trunk/18xx/rails/algorithms/RevenueManager.java =================================================================== --- trunk/18xx/rails/algorithms/RevenueManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/algorithms/RevenueManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -8,9 +8,9 @@ import rails.common.LocalText; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; -import rails.game.ConfigurableComponentI; import rails.game.GameManagerI; import rails.game.state.ArrayListState; Copied: trunk/18xx/rails/common/DisplayBuffer.java (from rev 1601, trunk/18xx/rails/game/DisplayBuffer.java) =================================================================== --- trunk/18xx/rails/common/DisplayBuffer.java (rev 0) +++ trunk/18xx/rails/common/DisplayBuffer.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -0,0 +1,118 @@ +/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/DisplayBuffer.java,v 1.9 2010/01/31 22:22:28 macfreek Exp $ */ +package rails.common; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import rails.game.GameManager; +import rails.game.GameManagerI; +import rails.util.Util; + +/** + * Class to write a log, and also to maintain a log message stack for writing to + * the UI. + */ +public final class DisplayBuffer { + + /** List to catch messages before the buffer is instantiated, + * based on the supposition that never 2 games will be initialised simultaneously... + */ + protected static List<String> initialQueue = new ArrayList<String>(); + + protected static Logger log = + Logger.getLogger(DisplayBuffer.class.getPackage().getName()); + + public DisplayBuffer() { + if (!initialQueue.isEmpty()) { + for (String s : initialQueue) { + addMessage (s, true); + } + initialQueue.clear(); + } + } + + /** + * A buffer for displaying messages in a popup window after any user action. + * These include error messages and other notifications of immediate + * interest to players. + */ + private List<String> displayBuffer = new ArrayList<String>(); + + private boolean autoDisplay = true; + + /** + * Add a message to the message (display) buffer (and display it on the + * console) + */ + public static void add(String message) { + add (message, true); + } + + public static void add(String message, boolean autoDisplay) { + GameManagerI gm = GameManager.getInstance(); + DisplayBuffer instance = null; + if (gm != null) instance = gm.getDisplayBuffer(); + if (gm == null || instance == null) { + // Queue in a static buffer until the instance is created + initialQueue.add(message); + } else { + instance.addMessage(message, autoDisplay); + } + } + + private void addMessage (String message, boolean autoDisplay) { + DisplayBuffer instance = getInstance(); + instance.autoDisplay = autoDisplay; + if (Util.hasValue(message)) { + instance.displayBuffer.add(message); + /* Also log the message (don't remove this, + * otherwise the message will not be logged during a reload, + * which may hinder troubleshooting) */ + log.debug("To display: " + message); + } + } + + private static DisplayBuffer getInstance() { + GameManagerI gm = GameManager.getInstance(); + if (gm == null) { + return null; + } else { + return gm.getDisplayBuffer(); + } + } + + /** Get the current message buffer, and clear it */ + public static String[] get() { + DisplayBuffer instance = getInstance(); + if (instance == null) { + if (initialQueue.isEmpty()) { + return null; + } else { + String[] message = initialQueue.toArray(new String[0]); + initialQueue.clear(); + return message; + } + } else if (instance.displayBuffer.size() > 0) { + String[] message = instance.displayBuffer.toArray(new String[0]); + instance.displayBuffer.clear(); + return message; + } else { + return null; + } + } + + public static int getSize() { + return getInstance().displayBuffer.size(); + } + + public static boolean getAutoDisplay () { + return getInstance().autoDisplay; + } + + public static void clear() { + getInstance().displayBuffer.clear(); + } + +} Copied: trunk/18xx/rails/common/parser/ComponentManager.java (from rev 1601, trunk/18xx/rails/game/ComponentManager.java) =================================================================== --- trunk/18xx/rails/common/parser/ComponentManager.java (rev 0) +++ trunk/18xx/rails/common/parser/ComponentManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -0,0 +1,115 @@ +/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/ComponentManager.java,v 1.19 2010/05/18 04:12:23 stefanfrey Exp $ */ +package rails.common.parser; + +import java.lang.reflect.Constructor; +import java.util.*; + +import org.apache.log4j.Logger; + +import rails.common.LocalText; +import rails.common.parser.XMLTags; + +/** + * ComponentManage - an implementation of ComponentManagerI, which handles the + * creation and configuration of rails.game components, and acts as a discovery + * point for other components to find them. + */ +public class ComponentManager { + + private String gameName; + + private List<Tag> componentTags; + + protected Logger log = Logger.getLogger(ComponentManager.class.getPackage().getName()); + protected List<String> directories = new ArrayList<String>(); + + public ComponentManager(String gameName, Tag tag, Map<String, String> gameOptions) + throws ConfigurationException { + this.gameName = gameName; + + componentTags = tag.getChildren(XMLTags.COMPONENT_ELEMENT_ID); + for (Tag component : componentTags) { + String compName = component.getAttributeAsString("name"); + log.debug("Found component " + compName); + configureComponent(component); + component.setGameOptions(gameOptions); + } + } + + private void configureComponent(Tag componentTag) + throws ConfigurationException { + + // Extract the attributes of the Component + String name = componentTag.getAttributeAsString(XMLTags.NAME_ATTR); + if (name == null) { + throw new ConfigurationException( + LocalText.getText("UnnamedComponent")); + } + String clazz = componentTag.getAttributeAsString(XMLTags.CLASS_ATTR); + if (clazz == null) { + throw new ConfigurationException(LocalText.getText( + "ComponentHasNoClass", name)); + } + String file = componentTag.getAttributeAsString(XMLTags.FILE_ATTR); + + // Only one component per name. + if (mComponentMap.get(name) != null) { + throw new ConfigurationException(LocalText.getText( + "ComponentConfiguredTwice", name)); + } + + // Now construct the component + ConfigurableComponentI component; + try { + Class<? extends ConfigurableComponentI> compClass; + compClass = + Class.forName(clazz).asSubclass( + ConfigurableComponentI.class); + Constructor<? extends ConfigurableComponentI> compCons = + compClass.getConstructor(new Class[0]); + component = compCons.newInstance(new Object[0]); + } catch (Exception ex) { + // There are MANY things that could go wrong here. + // They all just mean that the configuration and code + // do not combine to make a well-formed system. + // Debugging aided by chaining the caught exception. + throw new ConfigurationException(LocalText.getText( + "ComponentHasNoClass", clazz), ex); + + } + + // Configure the component, from a file, or the embedded XML. + Tag configElement = componentTag; + if (file != null) { + directories.add("data/" + gameName); + configElement = Tag.findTopTagInFile(file, directories, name); + configElement.setGameOptions(componentTag.getGameOptions()); + } + + try { + component.configureFromXML(configElement); + } catch (ConfigurationException e) { + // Temporarily allow components to be incompletely configured. + log.warn(LocalText.getText("AcceptingConfigFailure"), e); + } + + // Add it to the map of known components. + mComponentMap.put(name, component); + log.debug(LocalText.getText("ComponentInitAs", name, clazz )); + + } + + /** + * Returns the configured parameter with the given name. + * + * @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); + } + + private Map<String, ConfigurableComponentI> mComponentMap = + new HashMap<String, ConfigurableComponentI>(); + +} Copied: trunk/18xx/rails/common/parser/ConfigurableComponentI.java (from rev 1601, trunk/18xx/rails/game/ConfigurableComponentI.java) =================================================================== --- trunk/18xx/rails/common/parser/ConfigurableComponentI.java (rev 0) +++ trunk/18xx/rails/common/parser/ConfigurableComponentI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -0,0 +1,37 @@ +/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/ConfigurableComponentI.java,v 1.7 2009/10/31 17:08:26 evos Exp $ */ +package rails.common.parser; + +import rails.game.GameManagerI; + +/** + * Interface for rails.game components which can be configured from an XML + * element. + */ +public interface ConfigurableComponentI { + + /** + * Instructs the component to configure itself from the provided XML + * element. + * + * @param element the XML element containing the configuration + * @throws ConfigurationException + */ + void configureFromXML(Tag tag) throws ConfigurationException; + + /** + * This method is intended to be called for each configurable + * component, to perforn any initialisation activities that + * require any other components to be initialised first. + * This includes creating any required relationships to other + * configured components and objects. + * <p>This method should be called where necessary after all + * XML file parsing has completed, so that all objects that + * need to be related to do exist. + * @param parent The 'parent' configurable component is passed to allow + * the 'child' to access any other object without the need to resort to + * static calls where possible. + */ + void finishConfiguration (GameManagerI parent) + throws ConfigurationException; + +} Added: trunk/18xx/rails/common/parser/GameFileParser.java =================================================================== --- trunk/18xx/rails/common/parser/GameFileParser.java (rev 0) +++ trunk/18xx/rails/common/parser/GameFileParser.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -0,0 +1,12 @@ +package rails.common.parser; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class GameFileParser extends XMLParser { + +} Modified: trunk/18xx/rails/common/parser/GameInfoParser.java =================================================================== --- trunk/18xx/rails/common/parser/GameInfoParser.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/common/parser/GameInfoParser.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,6 +1,8 @@ package rails.common.parser; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import org.w3c.dom.Document; import org.w3c.dom.Element; Modified: trunk/18xx/rails/common/parser/XMLTags.java =================================================================== --- trunk/18xx/rails/common/parser/XMLTags.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/common/parser/XMLTags.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -9,7 +9,7 @@ public static final String OPTION_TAG = "Option"; public static final String GAMES_LIST_TAG = "GamesList"; public static final String NOTE_TAG = "Note"; - + /* ATTRIBUTES */ public static final String NAME_ATTR = "name"; public static final String COMPLETE_ATTR = "complete"; @@ -20,6 +20,12 @@ public static final String TYPE_ATTR = "type"; public static final String DEFAULT_ATTR = "default"; public static final String VALUES_ATTR = "values"; + public static final String CLASS_ATTR = "class"; + public static final String FILE_ATTR = "file"; + + public static final String VALUES_DELIM = ","; - public static final String VALUES_DELIM = ","; + /* Used by ComponentManager. */ + public static final String COMPONENT_MANAGER_ELEMENT_ID = "ComponentManager"; + public static final String COMPONENT_ELEMENT_ID = "Component"; } Modified: trunk/18xx/rails/game/Bank.java =================================================================== --- trunk/18xx/rails/game/Bank.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/Bank.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -6,6 +6,7 @@ import rails.common.LocalText; import rails.common.parser.Config; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import rails.game.model.CashModel; @@ -63,7 +64,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { Modified: trunk/18xx/rails/game/BonusToken.java =================================================================== --- trunk/18xx/rails/game/BonusToken.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/BonusToken.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -5,6 +5,7 @@ */ package rails.game; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import rails.game.move.ObjectMove; Modified: trunk/18xx/rails/game/Company.java =================================================================== --- trunk/18xx/rails/game/Company.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/Company.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -6,6 +6,7 @@ import org.apache.log4j.Logger; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import rails.game.move.MoveableHolder; Modified: trunk/18xx/rails/game/CompanyI.java =================================================================== --- trunk/18xx/rails/game/CompanyI.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/CompanyI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,7 @@ import java.util.List; +import rails.common.parser.ConfigurableComponentI; import rails.game.move.MoveableHolder; import rails.game.special.SpecialPropertyI; Modified: trunk/18xx/rails/game/CompanyManager.java =================================================================== --- trunk/18xx/rails/game/CompanyManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/CompanyManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -6,6 +6,7 @@ import org.apache.log4j.Logger; import rails.common.LocalText; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; @@ -65,7 +66,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { Modified: trunk/18xx/rails/game/CompanyManagerI.java =================================================================== --- trunk/18xx/rails/game/CompanyManagerI.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/CompanyManagerI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,8 @@ import java.util.List; +import rails.common.parser.ConfigurableComponentI; + /** * Interface for CompanyManager objects. A company manager is a factory which * vends Company objects. Modified: trunk/18xx/rails/game/CompanyType.java =================================================================== --- trunk/18xx/rails/game/CompanyType.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/CompanyType.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -42,7 +42,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { //No longer needed. Modified: trunk/18xx/rails/game/CompanyTypeI.java =================================================================== --- trunk/18xx/rails/game/CompanyTypeI.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/CompanyTypeI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,7 @@ import java.util.List; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; Deleted: trunk/18xx/rails/game/ComponentManager.java =================================================================== --- trunk/18xx/rails/game/ComponentManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/ComponentManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,157 +0,0 @@ -/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/ComponentManager.java,v 1.19 2010/05/18 04:12:23 stefanfrey Exp $ */ -package rails.game; - -import java.lang.reflect.Constructor; -import java.util.*; - -import org.apache.log4j.Logger; - -import rails.common.LocalText; -import rails.common.parser.ConfigurationException; -import rails.common.parser.Tag; - -/** - * ComponentManage - an implementation of ComponentManagerI, which handles the - * creation and configuration of rails.game components, and acts as a discovery - * point for other components to find them. - */ -public class ComponentManager { - - private String gameName; - - /** The name of the XML tag used to configure the ComponentManager. */ - public static final String ELEMENT_ID = "ComponentManager"; - - /** The name of the XML tag used to configure a component. */ - public static final String COMPONENT_ELEMENT_ID = "Component"; - - /** The name of the XML attribute for the component's name. */ - public static final String COMPONENT_NAME_TAG = "name"; - - /** The name of the XML attribute for the component's class. */ - public static final String COMPONENT_CLASS_TAG = "class"; - - /** The name of the XML attribute for the component's configuration file. */ - public static final String COMPONENT_FILE_TAG = "file"; - - private List<Tag> componentTags; - private Map<String, String> gameOptions; - - protected static Logger log = - Logger.getLogger(ComponentManager.class.getPackage().getName()); -// protected static List<String> directories = new ArrayList<String>(); - protected List<String> directories = new ArrayList<String>(); - - public static synchronized ComponentManager configureInstance(String gameName, Tag tag, - Map<String, String> gameOptions) - throws ConfigurationException { - return new ComponentManager(gameName, tag, gameOptions); - } - - private ComponentManager(String gameName, Tag tag, Map<String, String> gameOptions) - throws ConfigurationException { - - this.gameOptions = gameOptions; - this.gameName = gameName; - - componentTags = tag.getChildren(COMPONENT_ELEMENT_ID); - for (Tag component : componentTags) { - String compName = component.getAttributeAsString("name"); - log.debug("Found component " + compName); - if (compName.equalsIgnoreCase(GameManager.GM_NAME)) { - configureComponent(component); - break; - } - } - } - - public synchronized void finishPreparation() throws ConfigurationException { - - for (Tag componentTag : componentTags) { - componentTag.setGameOptions(gameOptions); - String compName = componentTag.getAttributeAsString("name"); - if (compName.equalsIgnoreCase(GameManager.GM_NAME)) continue; - log.debug("Found component " + compName); - configureComponent(componentTag); - } - } - - private void configureComponent(Tag componentTag) - throws ConfigurationException { - - // Extract the attributes of the Component - String name = componentTag.getAttributeAsString(COMPONENT_NAME_TAG); - if (name == null) { - throw new ConfigurationException( - LocalText.getText("UnnamedComponent")); - } - String clazz = componentTag.getAttributeAsString(COMPONENT_CLASS_TAG); - if (clazz == null) { - throw new ConfigurationException(LocalText.getText( - "ComponentHasNoClass", name)); - } - String file = componentTag.getAttributeAsString(COMPONENT_FILE_TAG); - - // Only one component per name. - if (mComponentMap.get(name) != null) { - throw new ConfigurationException(LocalText.getText( - "ComponentConfiguredTwice", name)); - } - - // Now construct the component - ConfigurableComponentI component; - try { - Class<? extends ConfigurableComponentI> compClass; - compClass = - Class.forName(clazz).asSubclass( - ConfigurableComponentI.class); - Constructor<? extends ConfigurableComponentI> compCons = - compClass.getConstructor(new Class[0]); - component = compCons.newInstance(new Object[0]); - } catch (Exception ex) { - // Not great to catch Exception, but there are MANY things that - // could go wrong - // here, and they all just mean that the configuration and code - // do not between - // them make a well-formed system. Debugging aided by chaining - // the caught exception. - throw new ConfigurationException(LocalText.getText( - "ComponentHasNoClass", clazz), ex); - - } - - // Configure the component, from a file, or the embedded XML. - Tag configElement = componentTag; - if (file != null) { - directories.add("data/" + gameName); - configElement = Tag.findTopTagInFile(file, directories, name); - configElement.setGameOptions(componentTag.getGameOptions()); - } - - try { - component.configureFromXML(configElement); - } catch (ConfigurationException e) { - // Temporarily allow components to be incompletely configured. - log.warn(LocalText.getText("AcceptingConfigFailure"), e); - } - - // Add it to the map of known components. - mComponentMap.put(name, component); - log.debug(LocalText.getText("ComponentInitAs", name, clazz )); - - } - - /** - * Returns the configured parameter with the given name. - * - * @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); - } - - private Map<String, ConfigurableComponentI> mComponentMap = - new HashMap<String, ConfigurableComponentI>(); - -} Deleted: trunk/18xx/rails/game/ConfigurableComponentI.java =================================================================== --- trunk/18xx/rails/game/ConfigurableComponentI.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/ConfigurableComponentI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,38 +0,0 @@ -/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/ConfigurableComponentI.java,v 1.7 2009/10/31 17:08:26 evos Exp $ */ -package rails.game; - -import rails.common.parser.ConfigurationException; -import rails.common.parser.Tag; - -/** - * Interface for rails.game components which can be configured from an XML - * element. - */ -public interface ConfigurableComponentI { - - /** - * Instructs the component to configure itself from the provided XML - * element. - * - * @param element the XML element containing the configuration - * @throws ConfigurationException - */ - void configureFromXML(Tag tag) throws ConfigurationException; - - /** - * This method is intended to be called for each configurable - * component, to perforn any initialisation activities that - * require any other components to be initialised first. - * This includes creating any required relationships to other - * configured components and objects. - * <p>This method should be called where necessary after all - * XML file parsing has completed, so that all objects that - * need to be related to do exist. - * @param parent The 'parent' configurable component is passed to allow - * the 'child' to access any other object without the need to resort to - * static calls where possible. - */ - void finishConfiguration (GameManagerI parent) - throws ConfigurationException; - -} Deleted: trunk/18xx/rails/game/DisplayBuffer.java =================================================================== --- trunk/18xx/rails/game/DisplayBuffer.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/DisplayBuffer.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,116 +0,0 @@ -/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/DisplayBuffer.java,v 1.9 2010/01/31 22:22:28 macfreek Exp $ */ -package rails.game; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import rails.util.Util; - -/** - * Class to write a log, and also to maintain a log message stack for writing to - * the UI. - */ -public final class DisplayBuffer { - - /** List to catch messages before the buffer is instantiated, - * based on the supposition that never 2 games will be initialised simultaneously... - */ - protected static List<String> initialQueue = new ArrayList<String>(); - - protected static Logger log = - Logger.getLogger(DisplayBuffer.class.getPackage().getName()); - - public DisplayBuffer() { - if (!initialQueue.isEmpty()) { - for (String s : initialQueue) { - addMessage (s, true); - } - initialQueue.clear(); - } - } - - /** - * A buffer for displaying messages in a popup window after any user action. - * These include error messages and other notifications of immediate - * interest to players. - */ - private List<String> displayBuffer = new ArrayList<String>(); - - private boolean autoDisplay = true; - - /** - * Add a message to the message (display) buffer (and display it on the - * console) - */ - public static void add(String message) { - add (message, true); - } - - public static void add(String message, boolean autoDisplay) { - GameManagerI gm = GameManager.getInstance(); - DisplayBuffer instance = null; - if (gm != null) instance = gm.getDisplayBuffer(); - if (gm == null || instance == null) { - // Queue in a static buffer until the instance is created - initialQueue.add(message); - } else { - instance.addMessage(message, autoDisplay); - } - } - - private void addMessage (String message, boolean autoDisplay) { - DisplayBuffer instance = getInstance(); - instance.autoDisplay = autoDisplay; - if (Util.hasValue(message)) { - instance.displayBuffer.add(message); - /* Also log the message (don't remove this, - * otherwise the message will not be logged during a reload, - * which may hinder troubleshooting) */ - log.debug("To display: " + message); - } - } - - private static DisplayBuffer getInstance() { - GameManagerI gm = GameManager.getInstance(); - if (gm == null) { - return null; - } else { - return gm.getDisplayBuffer(); - } - } - - /** Get the current message buffer, and clear it */ - public static String[] get() { - DisplayBuffer instance = getInstance(); - if (instance == null) { - if (initialQueue.isEmpty()) { - return null; - } else { - String[] message = initialQueue.toArray(new String[0]); - initialQueue.clear(); - return message; - } - } else if (instance.displayBuffer.size() > 0) { - String[] message = instance.displayBuffer.toArray(new String[0]); - instance.displayBuffer.clear(); - return message; - } else { - return null; - } - } - - public static int getSize() { - return getInstance().displayBuffer.size(); - } - - public static boolean getAutoDisplay () { - return getInstance().autoDisplay; - } - - public static void clear() { - getInstance().displayBuffer.clear(); - } - -} Modified: trunk/18xx/rails/game/Game.java =================================================================== --- trunk/18xx/rails/game/Game.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/Game.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -7,10 +7,13 @@ import org.apache.log4j.Logger; 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.GameOption; import rails.common.parser.Tag; +import rails.common.parser.XMLTags; import rails.game.action.PossibleAction; import rails.game.special.SpecialProperty; @@ -79,27 +82,22 @@ try { componentManagerTag = Tag.findTopTagInFile(GAME_XML_FILE, directories, - ComponentManager.ELEMENT_ID); + XMLTags.COMPONENT_MANAGER_ELEMENT_ID); if (componentManagerTag == null) { throw new ConfigurationException( "No Game XML element found in file " + GAME_XML_FILE); } componentManagerTag.setGameOptions(gameOptions); - componentManager = - ComponentManager.configureInstance(name, componentManagerTag, 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)); - // set special properties and token static variables - SpecialProperty.init(); - Token.init(); - - // Have the ComponentManager work through the other rails.game files - componentManager.finishPreparation(); - playerManager = (PlayerManager) componentManager.findComponent("PlayerManager"); if (playerManager == null) { throw new ConfigurationException( Modified: trunk/18xx/rails/game/GameManager.java =================================================================== --- trunk/18xx/rails/game/GameManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/GameManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -10,10 +10,12 @@ import org.apache.log4j.NDC; import rails.algorithms.RevenueManager; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.GuiHints; import rails.common.LocalText; import rails.common.parser.Config; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.GameOption; import rails.common.parser.Tag; @@ -102,9 +104,6 @@ protected EnumMap<GameDef.Parm, Object> gameParameters = new EnumMap<GameDef.Parm, Object>(GameDef.Parm.class); - // protected EnumSet<CorrectionType> activeCorrections - // = EnumSet.noneOf(CorrectionType.class); - /** * Current round should not be set here but from within the Round classes. * This is because in some cases the round has already changed to another Modified: trunk/18xx/rails/game/GameManagerI.java =================================================================== --- trunk/18xx/rails/game/GameManagerI.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/GameManagerI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -4,8 +4,10 @@ import java.util.Map; import rails.algorithms.RevenueManager; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.GuiHints; +import rails.common.parser.ConfigurableComponentI; import rails.game.action.PossibleAction; import rails.game.correct.CorrectionManagerI; import rails.game.correct.CorrectionType; @@ -17,7 +19,7 @@ public interface GameManagerI extends MoveableHolder, ConfigurableComponentI { /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public abstract void init(String gameName, PlayerManager playerManager, CompanyManagerI companyManager, PhaseManager phaseManager, Modified: trunk/18xx/rails/game/MapHex.java =================================================================== --- trunk/18xx/rails/game/MapHex.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/MapHex.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -9,6 +9,7 @@ import rails.algorithms.RevenueBonusTemplate; import rails.common.LocalText; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import rails.game.action.LayTile; @@ -156,7 +157,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { Pattern namePattern = Pattern.compile("(\\D+?)(-?\\d+)"); Modified: trunk/18xx/rails/game/MapManager.java =================================================================== --- trunk/18xx/rails/game/MapManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/MapManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -6,6 +6,7 @@ import org.apache.log4j.Logger; import rails.common.parser.Config; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import tools.Util; @@ -58,7 +59,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { String attr = tag.getAttributeAsString("tileOrientation"); Modified: trunk/18xx/rails/game/OperatingRound.java =================================================================== --- trunk/18xx/rails/game/OperatingRound.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/OperatingRound.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,7 @@ import java.util.*; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.LocalText; import rails.common.parser.GameOption; Modified: trunk/18xx/rails/game/PhaseI.java =================================================================== --- trunk/18xx/rails/game/PhaseI.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/PhaseI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,8 @@ import java.util.Map; +import rails.common.parser.ConfigurableComponentI; + public interface PhaseI extends ConfigurableComponentI { public boolean isTileColourAllowed(String tileColour); Modified: trunk/18xx/rails/game/PhaseManager.java =================================================================== --- trunk/18xx/rails/game/PhaseManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/PhaseManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import rails.game.model.ModelObject; Modified: trunk/18xx/rails/game/PlayerManager.java =================================================================== --- trunk/18xx/rails/game/PlayerManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/PlayerManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -4,6 +4,7 @@ import java.util.*; import rails.common.LocalText; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; Modified: trunk/18xx/rails/game/PrivateCompany.java =================================================================== --- trunk/18xx/rails/game/PrivateCompany.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/PrivateCompany.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -64,7 +64,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ @Override public void configureFromXML(Tag tag) throws ConfigurationException { Modified: trunk/18xx/rails/game/Round.java =================================================================== --- trunk/18xx/rails/game/Round.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/Round.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -9,6 +9,7 @@ import org.apache.log4j.Logger; +import rails.common.DisplayBuffer; import rails.common.GuiHints; import rails.common.LocalText; import rails.game.action.*; Modified: trunk/18xx/rails/game/ShareSellingRound.java =================================================================== --- trunk/18xx/rails/game/ShareSellingRound.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/ShareSellingRound.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -7,6 +7,7 @@ import java.util.*; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.LocalText; import rails.common.parser.GameOption; Modified: trunk/18xx/rails/game/StartRound.java =================================================================== --- trunk/18xx/rails/game/StartRound.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/StartRound.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.LocalText; import rails.common.parser.GameOption; Modified: trunk/18xx/rails/game/StartRound_1830.java =================================================================== --- trunk/18xx/rails/game/StartRound_1830.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/StartRound_1830.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,6 +1,7 @@ /* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/StartRound_1830.java,v 1.33 2010/06/21 22:57:53 stefanfrey Exp $ */ package rails.game; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.common.parser.GameOption; import rails.game.action.*; Modified: trunk/18xx/rails/game/StartRound_1835.java =================================================================== --- trunk/18xx/rails/game/StartRound_1835.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/StartRound_1835.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.game.action.*; import rails.game.state.IntegerState; Modified: trunk/18xx/rails/game/StockMarket.java =================================================================== --- trunk/18xx/rails/game/StockMarket.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/StockMarket.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -4,6 +4,7 @@ import java.util.*; import rails.common.LocalText; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import rails.game.move.PriceTokenMove; @@ -44,7 +45,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { Modified: trunk/18xx/rails/game/StockMarketI.java =================================================================== --- trunk/18xx/rails/game/StockMarketI.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/StockMarketI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,8 @@ import java.util.List; +import rails.common.parser.ConfigurableComponentI; + public interface StockMarketI extends ConfigurableComponentI { /** Modified: trunk/18xx/rails/game/StockRound.java =================================================================== --- trunk/18xx/rails/game/StockRound.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/StockRound.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -2,6 +2,7 @@ import java.util.*; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.LocalText; import rails.common.parser.GameOption; Modified: trunk/18xx/rails/game/TileManager.java =================================================================== --- trunk/18xx/rails/game/TileManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/TileManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -6,6 +6,7 @@ import org.apache.log4j.Logger; import rails.common.LocalText; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; @@ -27,7 +28,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tileSetTop) throws ConfigurationException { /* Modified: trunk/18xx/rails/game/Token.java =================================================================== --- trunk/18xx/rails/game/Token.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/Token.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -29,18 +29,10 @@ Logger.getLogger(Token.class.getPackage().getName()); public Token() { - uniqueId = "Token_" + (index++); tokenMap.put(uniqueId, this); } - // initialize the special properties static variables - public static void init() { - tokenMap = new HashMap<String, TokenI>(); - index = 0; - log.debug("Init token static variables"); - } - public static TokenI getByUniqueId(String id) { return tokenMap.get(id); } Modified: trunk/18xx/rails/game/TrainManager.java =================================================================== --- trunk/18xx/rails/game/TrainManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/TrainManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -6,6 +6,7 @@ import org.apache.log4j.Logger; import rails.common.LocalText; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; import rails.game.move.ObjectMove; @@ -72,7 +73,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { Modified: trunk/18xx/rails/game/TrainType.java =================================================================== --- trunk/18xx/rails/game/TrainType.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/TrainType.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -54,7 +54,7 @@ } /** - * @see rails.game.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) + * @see rails.common.parser.ConfigurableComponentI#configureFromXML(org.w3c.dom.Element) */ public void configureFromXML(Tag tag) throws ConfigurationException { Modified: trunk/18xx/rails/game/TreasuryShareRound.java =================================================================== --- trunk/18xx/rails/game/TreasuryShareRound.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/TreasuryShareRound.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -7,6 +7,7 @@ import java.util.*; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.LocalText; import rails.game.action.*; Modified: trunk/18xx/rails/game/correct/CashCorrectionManager.java =================================================================== --- trunk/18xx/rails/game/correct/CashCorrectionManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/correct/CashCorrectionManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,5 +1,6 @@ package rails.game.correct; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.game.*; import rails.game.move.CashMove; Modified: trunk/18xx/rails/game/correct/CorrectionManager.java =================================================================== --- trunk/18xx/rails/game/correct/CorrectionManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/correct/CorrectionManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -5,8 +5,8 @@ import org.apache.log4j.Logger; +import rails.common.DisplayBuffer; import rails.common.LocalText; -import rails.game.DisplayBuffer; import rails.game.GameManager; import rails.game.ReportBuffer; import rails.game.move.StateChange; Modified: trunk/18xx/rails/game/correct/MapCorrectionManager.java =================================================================== --- trunk/18xx/rails/game/correct/MapCorrectionManager.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/correct/MapCorrectionManager.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -4,10 +4,10 @@ import java.util.HashMap; import java.util.List; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.game.BaseToken; import rails.game.City; -import rails.game.DisplayBuffer; import rails.game.GameManager; import rails.game.MapHex; import rails.game.ReportBuffer; Modified: trunk/18xx/rails/game/special/SpecialProperty.java =================================================================== --- trunk/18xx/rails/game/special/SpecialProperty.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/special/SpecialProperty.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -54,20 +54,13 @@ /** To give subclasses access to the various 'managers' */ protected GameManagerI gameManager; - protected static Map<Integer, SpecialPropertyI> spMap = - new HashMap<Integer, SpecialPropertyI>(); + protected static Map<Integer, SpecialPropertyI> spMap = new HashMap<Integer, SpecialPropertyI>(); + protected static int lastIndex = 0; protected static Logger log = Logger.getLogger(SpecialProperty.class.getPackage().getName()); - // initialize the special properties static variables - public static void init() { - spMap = new HashMap<Integer, SpecialPropertyI>(); - lastIndex = 0; - log.debug("Init special property static variables"); - } - public SpecialProperty() { uniqueId = ++lastIndex; spMap.put(uniqueId, this); Modified: trunk/18xx/rails/game/special/SpecialPropertyI.java =================================================================== --- trunk/18xx/rails/game/special/SpecialPropertyI.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/special/SpecialPropertyI.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,6 +1,7 @@ /* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/special/SpecialPropertyI.java,v 1.12 2010/03/16 21:21:59 evos Exp $ */ package rails.game.special; +import rails.common.parser.ConfigurableComponentI; import rails.game.*; import rails.game.move.Moveable; import rails.game.move.MoveableHolder; Modified: trunk/18xx/rails/game/specific/_1825/StartRound_1825.java =================================================================== --- trunk/18xx/rails/game/specific/_1825/StartRound_1825.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1825/StartRound_1825.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -2,6 +2,7 @@ import java.util.List; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.game.*; import rails.game.action.*; Modified: trunk/18xx/rails/game/specific/_1835/OperatingRound_1835.java =================================================================== --- trunk/18xx/rails/game/specific/_1835/OperatingRound_1835.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1835/OperatingRound_1835.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -2,6 +2,7 @@ import java.util.*; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.common.parser.GameOption; import rails.game.*; Modified: trunk/18xx/rails/game/specific/_1835/PrussianFormationRound.java =================================================================== --- trunk/18xx/rails/game/specific/_1835/PrussianFormationRound.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1835/PrussianFormationRound.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -2,6 +2,7 @@ import java.util.*; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.LocalText; import rails.game.*; Modified: trunk/18xx/rails/game/specific/_1851/StartRound_1851.java =================================================================== --- trunk/18xx/rails/game/specific/_1851/StartRound_1851.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1851/StartRound_1851.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,7 @@ import java.util.List; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.game.*; import rails.game.action.*; Modified: trunk/18xx/rails/game/specific/_1856/CGRFormationRound.java =================================================================== --- trunk/18xx/rails/game/specific/_1856/CGRFormationRound.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1856/CGRFormationRound.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -2,6 +2,7 @@ import java.util.*; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.LocalText; import rails.game.*; Modified: trunk/18xx/rails/game/specific/_1856/OperatingRound_1856.java =================================================================== --- trunk/18xx/rails/game/specific/_1856/OperatingRound_1856.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1856/OperatingRound_1856.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import rails.common.DisplayBuffer; import rails.common.GuiDef; import rails.common.LocalText; import rails.game.*; Modified: trunk/18xx/rails/game/specific/_1856/StockRound_1856.java =================================================================== --- trunk/18xx/rails/game/specific/_1856/StockRound_1856.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1856/StockRound_1856.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,5 +1,6 @@ package rails.game.specific._1856; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.game.*; import rails.game.action.BuyCertificate; Modified: trunk/18xx/rails/game/specific/_1880/StartRound_1880.java =================================================================== --- trunk/18xx/rails/game/specific/_1880/StartRound_1880.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1880/StartRound_1880.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -3,6 +3,7 @@ */ package rails.game.specific._1880; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.game.*; import rails.game.action.*; Modified: trunk/18xx/rails/game/specific/_1889/OperatingRound_1889.java =================================================================== --- trunk/18xx/rails/game/specific/_1889/OperatingRound_1889.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_1889/OperatingRound_1889.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -1,6 +1,7 @@ /* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/specific/_1889/OperatingRound_1889.java,v 1.1 2010/02/23 22:21:40 stefanfrey Exp $ */ package rails.game.specific._1889; +import rails.common.DisplayBuffer; import rails.common.LocalText; import rails.common.parser.GameOption; import rails.game.*; Modified: trunk/18xx/rails/game/specific/_18AL/NamedTrainRevenueModifier.java =================================================================== --- trunk/18xx/rails/game/specific/_18AL/NamedTrainRevenueModifier.java 2011-07-04 16:31:43 UTC (rev 1601) +++ trunk/18xx/rails/game/specific/_18AL/NamedTrainRevenueModifier.java 2011-07-04 22:27:18 UTC (rev 1602) @@ -10,9 +10,9 @@ import rails.algorithms.RevenueDynamicModifier; import rails.algorithms.RevenueStaticModifier; import rails.algorithms.RevenueTrainRun; +import rails.common.parser.ConfigurableComponentI; import rails.common.parser.ConfigurationException; import rails.common.parser.Tag; -import rails.game.ConfigurableComponentI; import rails.game.GameManagerI; import rails.game.MapHex; import rails.game.TrainI; Modified: trunk/18xx/rails/game/specific/_18AL/NamedTrainToken.java =================================================================== --- trunk/18xx/rails/game/specific/_18AL/Name... [truncated message content] |