From: Stefan F. <ste...@us...> - 2010-05-23 18:10:52
|
Update of /cvsroot/rails/18xx/rails/algorithms In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv23967/rails/algorithms Modified Files: RevenueManager.java NetworkVertex.java Added Files: NetworkGraphModifier.java Log Message: Minor refactoring of RevenueManager and added NetworkGraphModifier and BirminghamTileModifier for 1851 Index: NetworkVertex.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/algorithms/NetworkVertex.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** NetworkVertex.java 21 May 2010 16:15:24 -0000 1.15 --- NetworkVertex.java 23 May 2010 18:10:44 -0000 1.16 *************** *** 394,397 **** --- 394,410 ---- } + /** + * Returns all vertices for a specified hex + */ + public static Set<NetworkVertex> getVerticesByHex(Collection<NetworkVertex> vertices, MapHex hex) { + Set<NetworkVertex> hexVertices = new HashSet<NetworkVertex>(); + for (NetworkVertex vertex:vertices) { + if (vertex.getHex() != null && hex == vertex.getHex()) { + hexVertices.add(vertex); + } + } + return hexVertices; + } + public static NetworkVertex getVertexByIdentifier(Collection<NetworkVertex> vertices, String identifier) { for (NetworkVertex vertex:vertices) { Index: RevenueManager.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/algorithms/RevenueManager.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** RevenueManager.java 20 May 2010 23:13:21 -0000 1.3 --- RevenueManager.java 23 May 2010 18:10:44 -0000 1.4 *************** *** 29,44 **** Logger.getLogger(RevenueManager.class.getPackage().getName()); ! private Set<RevenueStaticModifier> staticModifiers; ! private Set<RevenueDynamicModifier> dynamicModifiers; public RevenueManager() { staticModifiers = new HashSet<RevenueStaticModifier>(); ! dynamicModifiers = new HashSet<RevenueDynamicModifier>(); } public void configureFromXML(Tag tag) throws ConfigurationException { ! // define static modifiers ! List<Tag> modifierTags = tag.getChildren("StaticModifier"); if (modifierTags != null) { --- 29,49 ---- Logger.getLogger(RevenueManager.class.getPackage().getName()); ! ! private final Set<NetworkGraphModifier> graphModifiers; ! private final Set<RevenueStaticModifier> staticModifiers; ! private final Set<RevenueDynamicModifier> dynamicModifiers; ! private final Set<ConfigurableComponentI> configurableModifiers; public RevenueManager() { + graphModifiers = new HashSet<NetworkGraphModifier>(); staticModifiers = new HashSet<RevenueStaticModifier>(); ! dynamicModifiers = new HashSet<RevenueDynamicModifier>(); ! configurableModifiers = new HashSet<ConfigurableComponentI>(); } public void configureFromXML(Tag tag) throws ConfigurationException { ! // define modifiers ! List<Tag> modifierTags = tag.getChildren("Modifier"); if (modifierTags != null) { *************** *** 48,55 **** if (className == null) { throw new ConfigurationException(LocalText.getText( ! "ComponentHasNoClass", "StaticModifier")); } // create modifier ! RevenueStaticModifier modifier; try { modifier = (RevenueStaticModifier) Class.forName(className).newInstance(); --- 53,60 ---- if (className == null) { throw new ConfigurationException(LocalText.getText( ! "ComponentHasNoClass", "Modifier")); } // create modifier ! Object modifier; try { modifier = (RevenueStaticModifier) Class.forName(className).newInstance(); *************** *** 58,99 **** "ClassCannotBeInstantiated", className), e); } // add them to the revenueManager ! staticModifiers.add(modifier); ! log.info("Added modifier " + className); ! } ! } ! ! // define dynamic modifiers ! modifierTags = tag.getChildren("DynamicModifier"); ! ! if (modifierTags != null) { ! for (Tag modifierTag:modifierTags) { ! // get classname ! String className = modifierTag.getAttributeAsString("class"); ! if (className == null) { ! throw new ConfigurationException(LocalText.getText( ! "ComponentHasNoClass", "DynamicModifier")); } ! // create modifier ! RevenueDynamicModifier modifier; ! try { ! modifier = (RevenueDynamicModifier) Class.forName(className).newInstance(); ! } catch (Exception e) { throw new ConfigurationException(LocalText.getText( ! "ClassCannotBeInstantiated", className), e); } - // add them to the revenueManager - dynamicModifiers.add(modifier); - log.info("Added modifier " + className); } } } public void finishConfiguration(GameManagerI parent) throws ConfigurationException { ! for (RevenueStaticModifier modifier:staticModifiers) { ! if (modifier instanceof ConfigurableComponentI) { ! ((ConfigurableComponentI)modifier).finishConfiguration(parent); ! } } } --- 63,99 ---- "ClassCannotBeInstantiated", className), e); } + boolean isModifier = false; // add them to the revenueManager ! if (modifier instanceof NetworkGraphModifier) { ! graphModifiers.add((NetworkGraphModifier)modifier); ! isModifier = true; ! log.info("Added as graph modifier = " + className); } ! if (modifier instanceof RevenueStaticModifier) { ! staticModifiers.add((RevenueStaticModifier)modifier); ! isModifier = true; ! log.info("Added as static modifier = " + className); ! } ! if (modifier instanceof RevenueDynamicModifier) { ! dynamicModifiers.add((RevenueDynamicModifier)modifier); ! isModifier = true; ! log.info("Added as dynamic modifier = " + className); ! } ! if (!isModifier) { throw new ConfigurationException(LocalText.getText( ! "ClassIsNotAModifier", className)); ! } ! if (isModifier && modifier instanceof ConfigurableComponentI) { ! configurableModifiers.add((ConfigurableComponentI)modifier); } } } + } public void finishConfiguration(GameManagerI parent) throws ConfigurationException { ! for (ConfigurableComponentI modifier:configurableModifiers) { ! modifier.finishConfiguration(parent); } } *************** *** 101,105 **** public void addStaticModifier(RevenueStaticModifier modifier) { staticModifiers.add(modifier); ! log.info("Revenue Manager: Added modifier " + modifier); } --- 101,105 ---- public void addStaticModifier(RevenueStaticModifier modifier) { staticModifiers.add(modifier); ! log.info("Revenue Manager: Added static modifier " + modifier); } *************** *** 107,111 **** boolean result = staticModifiers.remove(modifier); if (result) { ! log.info("RevenueManager: Removed modifier " + modifier); } else { log.info("RevenueManager: Cannot remove" + modifier); --- 107,111 ---- boolean result = staticModifiers.remove(modifier); if (result) { ! log.info("RevenueManager: Removed static modifier " + modifier); } else { log.info("RevenueManager: Cannot remove" + modifier); *************** *** 114,123 **** } ! Set<RevenueStaticModifier> getStaticModifiers() { ! return staticModifiers; } ! Set<RevenueDynamicModifier> getDynamicModifiers() { ! return dynamicModifiers; } --- 114,151 ---- } ! public void addGraphModifier(NetworkGraphModifier modifier) { ! graphModifiers.add(modifier); ! log.info("Revenue Manager: Added graph modifier " + modifier); ! } ! ! public boolean removeGraphModifier(NetworkGraphModifier modifier) { ! boolean result = graphModifiers.remove(modifier); ! if (result) { ! log.info("RevenueManager: Removed graph modifier " + modifier); ! } else { ! log.info("RevenueManager: Cannot remove" + modifier); ! } ! return result; } ! public void addDynamicModifier(RevenueDynamicModifier modifier) { ! dynamicModifiers.add(modifier); ! log.info("Revenue Manager: Added dynamic modifier " + modifier); ! } ! ! public boolean removeDynamicModifier(RevenueDynamicModifier modifier) { ! boolean result = dynamicModifiers.remove(modifier); ! if (result) { ! log.info("RevenueManager: Removed dynamic modifier " + modifier); ! } else { ! log.info("RevenueManager: Cannot remove" + modifier); ! } ! return result; ! } ! ! void callGraphModifiers(NetworkGraphBuilder graphBuilder) { ! for (NetworkGraphModifier modifier:graphModifiers) { ! modifier.modifyGraph(graphBuilder); ! } } --- NEW FILE: NetworkGraphModifier.java --- package rails.algorithms; /** * Classes that change properties of the network graph * before both route evaluation and revenenue calculation starts * implement this interface. * * They have to register themselves to the RevenueManager via the GameManager instance. * @author freystef * */ public interface NetworkGraphModifier { public void modifyGraph(NetworkGraphBuilder graphBuilder); } |