|
From: Stefan F. <ste...@us...> - 2012-07-27 05:08:23
|
junit/rails/game/state/OwnableItemImpl.java | 2
junit/rails/game/state/PortfolioHolderImpl.java | 17 +
junit/rails/game/state/PortfolioHolderTest.java | 51 +++
junit/rails/game/state/PortfolioListTest.java | 114 --------
junit/rails/game/state/PortfolioManagerTest.java | 6
junit/rails/game/state/PortfolioMapTest.java | 148 +++++++++++
junit/rails/game/state/PortfolioSetTest.java | 122 +++++++++
junit/rails/game/state/TypeOwnableItemImpl.java | 19 +
src/rails/game/Company.java | 12
src/rails/game/GameManager.java | 2
src/rails/game/MapHex.java | 12
src/rails/game/OperatingRound.java | 8
src/rails/game/PublicCertificate.java | 8
src/rails/game/PublicCompany.java | 10
src/rails/game/Stop.java | 8
src/rails/game/Train.java | 5
src/rails/game/TrainManager.java | 6
src/rails/game/action/BuyTrain.java | 23 -
src/rails/game/action/DiscardTrain.java | 26 -
src/rails/game/model/BaseTokensModel.java | 14 -
src/rails/game/model/CertificatesModel.java | 10
src/rails/game/model/PortfolioModel.java | 27 +-
src/rails/game/model/PrivatesModel.java | 4
src/rails/game/model/TrainsModel.java | 9
src/rails/game/specific/_1835/OperatingRound_1835.java | 8
src/rails/game/specific/_1835/PrussianFormationRound.java | 16 -
src/rails/game/specific/_1856/CGRFormationRound.java | 8
src/rails/game/specific/_1856/OperatingRound_1856.java | 4
src/rails/game/specific/_1856/PublicCompany_1856.java | 4
src/rails/game/specific/_1889/OperatingRound_1889.java | 8
src/rails/game/specific/_18AL/AssignNamedTrains.java | 2
src/rails/game/specific/_18AL/OperatingRound_18AL.java | 3
src/rails/game/specific/_18EU/OperatingRound_18EU.java | 3
src/rails/game/specific/_18TN/OperatingRound_18TN.java | 4
src/rails/game/state/HashMapState.java | 34 +-
src/rails/game/state/Portfolio.java | 5
src/rails/game/state/PortfolioList.java | 72 -----
src/rails/game/state/PortfolioManager.java | 6
src/rails/game/state/PortfolioMap.java | 57 ++--
src/rails/game/state/PortfolioSet.java | 77 +++++
src/rails/game/state/Typable.java | 12
src/rails/ui/swing/GameUIManager.java | 9
src/rails/ui/swing/ORUIManager.java | 13
src/rails/ui/swing/gamespecific/_1835/StatusWindow_1835.java | 4
src/rails/ui/swing/gamespecific/_18EU/StatusWindow_18EU.java | 10
src/rails/ui/swing/hexmap/GUIHex.java | 14 -
46 files changed, 670 insertions(+), 366 deletions(-)
New commits:
commit 778be678fa5313cc552b4b801f4ead17b1991a21
Author: Stefan Frey <ste...@we...>
Date: Fri Jul 27 07:07:39 2012 +0200
added PortfolioHolderTest
diff --git a/junit/rails/game/state/PortfolioHolderImpl.java b/junit/rails/game/state/PortfolioHolderImpl.java
new file mode 100644
index 0000000..4a7cb1a
--- /dev/null
+++ b/junit/rails/game/state/PortfolioHolderImpl.java
@@ -0,0 +1,17 @@
+package rails.game.state;
+
+class PortfolioHolderImpl extends AbstractItem implements PortfolioHolder {
+
+ private PortfolioHolderImpl(Owner parent, String id) {
+ super (parent, id);
+ }
+
+ static PortfolioHolderImpl create(Owner parent, String id) {
+ return new PortfolioHolderImpl(parent, id);
+ }
+
+ public Owner getParent() {
+ return (Owner)super.getParent();
+ }
+}
+
diff --git a/junit/rails/game/state/PortfolioHolderTest.java b/junit/rails/game/state/PortfolioHolderTest.java
new file mode 100644
index 0000000..8f1fec5
--- /dev/null
+++ b/junit/rails/game/state/PortfolioHolderTest.java
@@ -0,0 +1,51 @@
+package rails.game.state;
+
+import static org.junit.Assert.*;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class PortfolioHolderTest {
+
+ private final static String PORTFOLIO_MAP_ID = "PortfolioMap";
+ private final static String PORTFOLIO_SET_ID = "PortfolioSet";
+ private final static String OWNER_ID = "Owner";
+ private final static String HOLDER_ID = "Holder";
+
+ private final static String ITEM_ID = "Item";
+ private final static String TYPE_ID = "Type";
+
+ private Root root;
+ private Owner owner;
+ private PortfolioHolder holder;
+ private TypeOwnableItemImpl item;
+
+
+ @Before
+ public void setUp() {
+ root = StateTestUtils.setUpRoot();
+ owner = OwnerImpl.create(root, OWNER_ID);
+ holder = PortfolioHolderImpl.create(owner, HOLDER_ID);
+
+ item = TypeOwnableItemImpl.create(root, ITEM_ID, TYPE_ID);
+ StateTestUtils.startActionChangeSet(root);
+ }
+
+ @Test
+ public void testPortfolioMap() {
+ PortfolioMap<String, TypeOwnableItemImpl> portfolio =
+ PortfolioMap.create(holder, PORTFOLIO_MAP_ID , TypeOwnableItemImpl.class);
+ item.moveTo(owner);
+ assertTrue(portfolio.containsItem(item));
+ assertSame(owner, item.getOwner());
+ }
+
+ @Test
+ public void testPortfolioSet() {
+ PortfolioSet<TypeOwnableItemImpl> portfolio =
+ PortfolioSet.create(holder, PORTFOLIO_SET_ID , TypeOwnableItemImpl.class);
+ item.moveTo(owner);
+ assertTrue(portfolio.containsItem(item));
+ assertSame(owner, item.getOwner());
+ }
+}
diff --git a/src/rails/game/state/HashMapState.java b/src/rails/game/state/HashMapState.java
index b14a845..4fe22db 100644
--- a/src/rails/game/state/HashMapState.java
+++ b/src/rails/game/state/HashMapState.java
@@ -160,23 +160,23 @@ public final class HashMapState<K,V> extends State {
return ImmutableList.copyOf(map.values());
}
- public String getData() {
-
- if (map == null) return "";
-
- StringBuilder buf = new StringBuilder("<html>");
- for (K name : map.keySet()) {
- if (buf.length() > 6) buf.append("<br>");
- buf.append(name.toString());
- Object value = map.get(name);
- if (value != null && rails.util.Util.hasValue(value.toString())) buf.append("=").append(value.toString());
- }
- if (buf.length() > 6) {
- buf.append("</html>");
- }
- return buf.toString();
-
- }
+// public String getData() {
+//
+// if (map == null) return "";
+//
+// StringBuilder buf = new StringBuilder("<html>");
+// for (K name : map.keySet()) {
+// if (buf.length() > 6) buf.append("<br>");
+// buf.append(name.toString());
+// Object value = map.get(name);
+// if (value != null && rails.util.Util.hasValue(value.toString())) buf.append("=").append(value.toString());
+// }
+// if (buf.length() > 6) {
+// buf.append("</html>");
+// }
+// return buf.toString();
+//
+// }
@Override
public String observerText() {
commit 90a08542c1f46895322f86f440dc2b16209841d3
Author: Stefan Frey <ste...@we...>
Date: Thu Jul 26 15:13:31 2012 +0200
refactored PortfolioMap and added Tests, introduced Typable interface
diff --git a/junit/rails/game/state/OwnableItemImpl.java b/junit/rails/game/state/OwnableItemImpl.java
index ca1d844..c095d66 100644
--- a/junit/rails/game/state/OwnableItemImpl.java
+++ b/junit/rails/game/state/OwnableItemImpl.java
@@ -5,7 +5,7 @@ package rails.game.state;
*/
class OwnableItemImpl extends OwnableItem<Ownable> {
- private OwnableItemImpl(Item parent, String id) {
+ protected OwnableItemImpl(Item parent, String id) {
super(parent, id, Ownable.class);
}
diff --git a/junit/rails/game/state/PortfolioListTest.java b/junit/rails/game/state/PortfolioListTest.java
deleted file mode 100644
index b7c676f..0000000
--- a/junit/rails/game/state/PortfolioListTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package rails.game.state;
-
-import static org.fest.assertions.api.Assertions.assertThat;
-import static org.junit.Assert.*;
-
-import java.util.Iterator;
-import java.util.Set;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.collect.Sets;
-
-public class PortfolioListTest {
-
- private final static String PORTFOLIO_A_ID = "PortfolioA";
- private final static String PORTFOLIO_B_ID = "PortfolioB";
- private final static String OWNER_A_ID = "OwnerA";
- private final static String OWNER_B_ID = "OwnerB";
- private final static String ITEM_ID = "Item";
- private final static String ANOTHER_ITEM_ID = "AnotherItem";
-
- private Root root;
- private PortfolioList<Ownable> portfolioA;
- private PortfolioList<Ownable> portfolioB;
- private Owner ownerA;
- private Owner ownerB;
- private Ownable item;
- private Ownable anotherItem;
-
- @Before
- public void setUp() {
- root = StateTestUtils.setUpRoot();
- ownerA = OwnerImpl.create(root, OWNER_A_ID);
- ownerB = OwnerImpl.create(root, OWNER_B_ID);
- portfolioA = PortfolioList.create(ownerA, PORTFOLIO_A_ID , Ownable.class);
- portfolioB = PortfolioList.create(ownerB, PORTFOLIO_B_ID , Ownable.class);
- item = OwnableItemImpl.create(root, ITEM_ID);
- anotherItem = OwnableItemImpl.create(root, ANOTHER_ITEM_ID);
- portfolioA.moveInto(item);
- StateTestUtils.startActionChangeSet(root);
- }
-
- // helper function to check the initial state after undo
- // includes redo, so after returning the state should be unchanged
- private void assertInitialStateAfterUndo() {
- StateTestUtils.closeAndUndo(root);
- assertTrue(portfolioA.containsItem(item));
- assertSame(ownerA, item.getOwner());
- StateTestUtils.redo(root);
- }
-
- @Test
- public void testMoveInto() {
- // move item to B
- item.moveTo(ownerB);
- assertTrue(portfolioB.containsItem(item));
- assertSame(ownerB, item.getOwner());
-
- // undo check
- assertInitialStateAfterUndo();
-
- // redo check
- assertTrue(portfolioB.containsItem(item));
- assertSame(ownerB, item.getOwner());
- }
-
- @Test
- public void testContainsItem() {
- assertTrue(portfolioA.containsItem(item));
- assertFalse(portfolioB.containsItem(item));
- }
-
- @Test
- public void testItems() {
- assertThat(portfolioA.items()).containsOnly(item);
- anotherItem.moveTo(ownerA);
- assertThat(portfolioA.items()).containsOnly(item, anotherItem);
- }
-
- @Test
- public void testSize() {
- assertEquals(1, portfolioA.size());
- assertEquals(0, portfolioB.size());
- anotherItem.moveTo(ownerA);
- assertEquals(2, portfolioA.size());
- item.moveTo(ownerB);
- assertEquals(1, portfolioA.size());
- assertEquals(1, portfolioB.size());
- }
-
- @Test
- public void testIsEmpty() {
- assertFalse(portfolioA.isEmpty());
- assertTrue(portfolioB.isEmpty());
- }
-
- @Test
- public void testIterator() {
- anotherItem.moveTo(ownerA);
-
- // no order is defined, so store them
- Set<Ownable> iterated = Sets.newHashSet();
-
- Iterator<Ownable> it = portfolioA.iterator();
- iterated.add(it.next());
- iterated.add(it.next());
-
- assertThat(iterated).containsOnly(item, anotherItem);
- // iterator is finished
- assertFalse(it.hasNext());
- }
-
-}
diff --git a/junit/rails/game/state/PortfolioManagerTest.java b/junit/rails/game/state/PortfolioManagerTest.java
index 2a9e52d..7a4a889 100644
--- a/junit/rails/game/state/PortfolioManagerTest.java
+++ b/junit/rails/game/state/PortfolioManagerTest.java
@@ -15,7 +15,7 @@ public class PortfolioManagerTest {
private Root root;
private PortfolioManager pm;
- private PortfolioList<Ownable> portfolioA, portfolioB;
+ private PortfolioSet<Ownable> portfolioA, portfolioB;
private Owner ownerA, ownerB, ownerC;
@Before
@@ -25,8 +25,8 @@ public class PortfolioManagerTest {
ownerA = OwnerImpl.create(root, OWNER_A_ID);
ownerB = OwnerImpl.create(root, OWNER_B_ID);
ownerC = OwnerImpl.create(root, OWNER_C_ID);
- portfolioA = PortfolioList.create(ownerA, PORTFOLIO_A_ID , Ownable.class);
- portfolioB = PortfolioList.create(ownerB, PORTFOLIO_B_ID , Ownable.class);
+ portfolioA = PortfolioSet.create(ownerA, PORTFOLIO_A_ID , Ownable.class);
+ portfolioB = PortfolioSet.create(ownerB, PORTFOLIO_B_ID , Ownable.class);
StateTestUtils.startActionChangeSet(root);
}
diff --git a/junit/rails/game/state/PortfolioMapTest.java b/junit/rails/game/state/PortfolioMapTest.java
new file mode 100644
index 0000000..40bcf8f
--- /dev/null
+++ b/junit/rails/game/state/PortfolioMapTest.java
@@ -0,0 +1,148 @@
+package rails.game.state;
+
+import static org.fest.assertions.api.Assertions.assertThat;
+import static org.junit.Assert.*;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.SetMultimap;
+import com.google.common.collect.Sets;
+
+public class PortfolioMapTest {
+
+ private final static String PORTFOLIO_MAP_ID = "PortfolioMap";
+ private final static String PORTFOLIO_SET_ID = "PortfolioSet";
+ private final static String OWNER_MAP_ID = "OwnerMap";
+ private final static String OWNER_SET_ID = "OwnerSet";
+ private final static String ITEM_ID = "Item";
+ private final static String ANOTHER_ITEM_ID = "AnotherItem";
+ private final static String TYPE_ID = "Type";
+ private final static String ANOTHER_TYPE_ID = "AnotherType";
+
+ private Root root;
+ private PortfolioMap<String, TypeOwnableItemImpl> portfolioMap;
+ private PortfolioSet<TypeOwnableItemImpl> portfolioSet;
+ private Owner ownerMap;
+ private Owner ownerSet;
+ private TypeOwnableItemImpl item;
+ private TypeOwnableItemImpl anotherItem;
+
+ @Before
+ public void setUp() {
+ root = StateTestUtils.setUpRoot();
+ ownerMap = OwnerImpl.create(root, OWNER_MAP_ID);
+ ownerSet = OwnerImpl.create(root, OWNER_SET_ID);
+ portfolioMap = PortfolioMap.create(ownerMap, PORTFOLIO_MAP_ID , TypeOwnableItemImpl.class);
+ portfolioSet = PortfolioSet.create(ownerSet, PORTFOLIO_SET_ID , TypeOwnableItemImpl.class);
+ item = TypeOwnableItemImpl.create(root, ITEM_ID, TYPE_ID);
+ anotherItem = TypeOwnableItemImpl.create(root, ANOTHER_ITEM_ID, ANOTHER_TYPE_ID);
+ portfolioSet.moveInto(item);
+ StateTestUtils.startActionChangeSet(root);
+ }
+
+ // helper function to check the initial state after undo
+ // includes redo, so after returning the state should be unchanged
+ private void assertInitialStateAfterUndo() {
+ StateTestUtils.closeAndUndo(root);
+ assertTrue(portfolioSet.containsItem(item));
+ assertSame(ownerSet, item.getOwner());
+ StateTestUtils.redo(root);
+ }
+
+ @Test
+ public void testMoveInto() {
+ portfolioMap.moveInto(item);
+ assertSame(ownerMap, item.getOwner());
+ assertTrue(portfolioMap.containsItem(item));
+ assertFalse(portfolioSet.containsItem(item));
+ // check undo
+ assertInitialStateAfterUndo();
+ // and redo
+ assertTrue(portfolioMap.containsItem(item));
+ }
+
+ @Test
+ public void testContainsItem() {
+ assertFalse(portfolioMap.containsItem(item));
+ item.moveTo(ownerMap);
+ assertTrue(portfolioMap.containsItem(item));
+ }
+
+ @Test
+ public void testItems() {
+ assertThat(portfolioMap.items()).isEmpty();
+ item.moveTo(ownerMap);
+ assertThat(portfolioMap.items()).containsOnly(item);
+ anotherItem.moveTo(ownerMap);
+ assertThat(portfolioMap.items()).containsOnly(item, anotherItem);
+ }
+
+ @Test
+ public void testSize() {
+ assertEquals(0, portfolioMap.size());
+ item.moveTo(ownerMap);
+ assertEquals(1, portfolioMap.size());
+ anotherItem.moveTo(ownerMap);
+ assertEquals(2, portfolioMap.size());
+ }
+
+ @Test
+ public void testIsEmpty() {
+ assertTrue(portfolioMap.isEmpty());
+ item.moveTo(ownerMap);
+ assertFalse(portfolioMap.isEmpty());
+ }
+
+ @Test
+ public void testContainsKey() {
+ assertFalse(portfolioMap.containsKey(TYPE_ID));
+ item.moveTo(ownerMap);
+ assertTrue(portfolioMap.containsKey(TYPE_ID));
+ item.moveTo(ownerSet);
+ assertFalse(portfolioMap.containsKey(TYPE_ID));
+ }
+
+ @Test
+ public void testGetItems() {
+ assertThat(portfolioMap.getItems(TYPE_ID)).isEmpty();
+ item.moveTo(ownerMap);
+ assertThat(portfolioMap.getItems(TYPE_ID)).containsOnly(item);
+ }
+
+ @Test
+ public void testView() {
+ item.moveTo(ownerMap);
+ SetMultimap<String, TypeOwnableItemImpl> view = portfolioMap.view();
+ assertTrue(view.containsValue(item));
+ // still holds true after removing item
+ item.moveTo(ownerSet);
+ assertTrue(view.containsValue(item));
+ assertFalse(portfolioMap.containsItem(item));
+ }
+
+ @Test
+ public void testIterator() {
+ item.moveTo(ownerMap);
+ anotherItem.moveTo(ownerMap);
+
+ // no order is defined, so store them
+ Set<Ownable> iterated = Sets.newHashSet();
+
+
+ Iterator<TypeOwnableItemImpl> it = portfolioMap.iterator();
+ // and it still works even after removing items
+ item.moveTo(ownerSet);
+
+ iterated.add(it.next());
+ iterated.add(it.next());
+
+ assertThat(iterated).containsOnly(item, anotherItem);
+ // iterator is finished
+ assertFalse(it.hasNext());
+ }
+
+}
diff --git a/junit/rails/game/state/PortfolioSetTest.java b/junit/rails/game/state/PortfolioSetTest.java
new file mode 100644
index 0000000..9954576
--- /dev/null
+++ b/junit/rails/game/state/PortfolioSetTest.java
@@ -0,0 +1,122 @@
+package rails.game.state;
+
+import static org.fest.assertions.api.Assertions.assertThat;
+import static org.junit.Assert.*;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.Sets;
+
+public class PortfolioSetTest {
+
+ private final static String PORTFOLIO_A_ID = "PortfolioA";
+ private final static String PORTFOLIO_B_ID = "PortfolioB";
+ private final static String OWNER_A_ID = "OwnerA";
+ private final static String OWNER_B_ID = "OwnerB";
+ private final static String ITEM_ID = "Item";
+ private final static String ANOTHER_ITEM_ID = "AnotherItem";
+
+ private Root root;
+ private PortfolioSet<Ownable> portfolioA;
+ private PortfolioSet<Ownable> portfolioB;
+ private Owner ownerA;
+ private Owner ownerB;
+ private Ownable item;
+ private Ownable anotherItem;
+
+ @Before
+ public void setUp() {
+ root = StateTestUtils.setUpRoot();
+ ownerA = OwnerImpl.create(root, OWNER_A_ID);
+ ownerB = OwnerImpl.create(root, OWNER_B_ID);
+ portfolioA = PortfolioSet.create(ownerA, PORTFOLIO_A_ID , Ownable.class);
+ portfolioB = PortfolioSet.create(ownerB, PORTFOLIO_B_ID , Ownable.class);
+ item = OwnableItemImpl.create(root, ITEM_ID);
+ anotherItem = OwnableItemImpl.create(root, ANOTHER_ITEM_ID);
+ portfolioA.moveInto(item);
+ StateTestUtils.startActionChangeSet(root);
+ }
+
+ // helper function to check the initial state after undo
+ // includes redo, so after returning the state should be unchanged
+ private void assertInitialStateAfterUndo() {
+ StateTestUtils.closeAndUndo(root);
+ assertTrue(portfolioA.containsItem(item));
+ assertSame(ownerA, item.getOwner());
+ StateTestUtils.redo(root);
+ }
+
+ @Test
+ public void testMoveInto() {
+ // move item to B
+ item.moveTo(ownerB);
+ assertTrue(portfolioB.containsItem(item));
+ assertSame(ownerB, item.getOwner());
+
+ // undo check
+ assertInitialStateAfterUndo();
+
+ // redo check
+ assertTrue(portfolioB.containsItem(item));
+ assertSame(ownerB, item.getOwner());
+ }
+
+ @Test
+ public void testContainsItem() {
+ assertTrue(portfolioA.containsItem(item));
+ assertFalse(portfolioB.containsItem(item));
+ }
+
+ @Test
+ public void testItems() {
+ assertThat(portfolioA.items()).containsOnly(item);
+ anotherItem.moveTo(ownerA);
+ Set<Ownable> items = portfolioA.items();
+ assertThat(items).containsOnly(item, anotherItem);
+ // and the view is unchanged after changing the portfolio
+ anotherItem.moveTo(ownerB);
+ assertTrue(items.contains(anotherItem));
+ assertFalse(portfolioA.containsItem(anotherItem));
+ }
+
+ @Test
+ public void testSize() {
+ assertEquals(1, portfolioA.size());
+ assertEquals(0, portfolioB.size());
+ anotherItem.moveTo(ownerA);
+ assertEquals(2, portfolioA.size());
+ item.moveTo(ownerB);
+ assertEquals(1, portfolioA.size());
+ assertEquals(1, portfolioB.size());
+ }
+
+ @Test
+ public void testIsEmpty() {
+ assertFalse(portfolioA.isEmpty());
+ assertTrue(portfolioB.isEmpty());
+ }
+
+ @Test
+ public void testIterator() {
+ anotherItem.moveTo(ownerA);
+
+ // no order is defined, so store them
+ Set<Ownable> iterated = Sets.newHashSet();
+
+ Iterator<Ownable> it = portfolioA.iterator();
+ // and it still works even after removing items
+ anotherItem.moveTo(ownerB);
+
+ iterated.add(it.next());
+ iterated.add(it.next());
+
+ assertThat(iterated).containsOnly(item, anotherItem);
+ // iterator is finished
+ assertFalse(it.hasNext());
+ }
+
+}
diff --git a/junit/rails/game/state/TypeOwnableItemImpl.java b/junit/rails/game/state/TypeOwnableItemImpl.java
new file mode 100644
index 0000000..7ba4b7d
--- /dev/null
+++ b/junit/rails/game/state/TypeOwnableItemImpl.java
@@ -0,0 +1,19 @@
+package rails.game.state;
+
+// Implementation of a typed OwnableItem
+class TypeOwnableItemImpl extends OwnableItem<TypeOwnableItemImpl> implements Typable<String> {
+ private final String type;
+
+ private TypeOwnableItemImpl(Item parent, String id, String type) {
+ super(parent, id, TypeOwnableItemImpl.class);
+ this.type = type;
+ }
+
+ static TypeOwnableItemImpl create(Item parent, String id, String type) {
+ return new TypeOwnableItemImpl(parent, id, type);
+ }
+
+ public String getType() {
+ return type;
+ }
+}
diff --git a/src/rails/game/Company.java b/src/rails/game/Company.java
index 4d5ad04..4815807 100644
--- a/src/rails/game/Company.java
+++ b/src/rails/game/Company.java
@@ -5,7 +5,7 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import rails.common.parser.ConfigurableComponent;
import rails.common.parser.ConfigurationException;
@@ -15,7 +15,7 @@ import rails.game.state.BooleanState;
import rails.game.state.AbstractItem;
import rails.game.state.Item;
import rails.game.state.Owner;
-import rails.game.state.PortfolioList;
+import rails.game.state.PortfolioSet;
import rails.util.Util;
public abstract class Company extends AbstractItem implements Owner, ConfigurableComponent,
@@ -53,8 +53,8 @@ Cloneable, Comparable<Company> {
protected final BooleanState closedObject = BooleanState.create(this, "closed", false);
// Moved here from PrivayeCOmpany on behalf of 1835
- protected final PortfolioList<SpecialProperty> specialProperties =
- PortfolioList.create(this, "specialProperties", SpecialProperty.class);
+ protected final PortfolioSet<SpecialProperty> specialProperties =
+ PortfolioSet.create(this, "specialProperties", SpecialProperty.class);
protected static Logger log =
LoggerFactory.getLogger(Company.class.getPackage().getName());
@@ -96,9 +96,9 @@ Cloneable, Comparable<Company> {
}
/**
- * @return ArrayList of all special properties we have.
+ * @return Set of all special properties we have.
*/
- public ImmutableList<SpecialProperty> getSpecialProperties() {
+ public ImmutableSet<SpecialProperty> getSpecialProperties() {
return specialProperties.items();
}
diff --git a/src/rails/game/GameManager.java b/src/rails/game/GameManager.java
index 5f9d4f0..b196d46 100644
--- a/src/rails/game/GameManager.java
+++ b/src/rails/game/GameManager.java
@@ -1703,7 +1703,7 @@ public class GameManager extends AbstractItem implements ConfigurableComponent,
public boolean addSpecialProperty(SpecialProperty property) {
if (commonSpecialProperties == null) {
- commonSpecialProperties = PortfolioList.create(this,
+ commonSpecialProperties = PortfolioSet.create(this,
"CommonSpecialProperties", SpecialProperty.class);
}
return commonSpecialProperties.moveInto(property);
diff --git a/src/rails/game/MapHex.java b/src/rails/game/MapHex.java
index 1c9f497..17e3c65 100644
--- a/src/rails/game/MapHex.java
+++ b/src/rails/game/MapHex.java
@@ -7,7 +7,7 @@ import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import rails.algorithms.RevenueBonusTemplate;
import rails.common.LocalText;
@@ -25,7 +25,7 @@ import rails.game.state.BooleanState;
import rails.game.state.Observer;
import rails.game.state.Owner;
import rails.game.state.Portfolio;
-import rails.game.state.PortfolioList;
+import rails.game.state.PortfolioSet;
import rails.game.state.AbstractItem;
import rails.util.*;
@@ -126,7 +126,7 @@ StationHolder {
protected List<PublicCompany> destinations;
/** Tokens that are not bound to a Station (City), such as Bonus tokens */
- protected final PortfolioList<Token> offStationTokens = PortfolioList.create(this,
+ protected final PortfolioSet<Token> offStationTokens = PortfolioSet.create(this,
"offStationTokens", Token.class);
/** Storage of revenueBonus that are bound to the hex */
@@ -979,7 +979,7 @@ StationHolder {
return tokens;
}
- public PortfolioList<Token> getTokens() {
+ public PortfolioSet<Token> getTokens() {
return offStationTokens;
}
@@ -1015,11 +1015,11 @@ StationHolder {
return false;
}
- public ImmutableList<Token> getTokens(int cityNumber) {
+ public ImmutableSet<Token> getTokens(int cityNumber) {
if (stops.size() > 0 && mStops.get(cityNumber) != null) {
return (mStops.get(cityNumber)).getTokens().items();
} else {
- return ImmutableList.of(); // empty List
+ return ImmutableSet.of(); // empty List
}
}
diff --git a/src/rails/game/OperatingRound.java b/src/rails/game/OperatingRound.java
index 3c02255..27a5377 100644
--- a/src/rails/game/OperatingRound.java
+++ b/src/rails/game/OperatingRound.java
@@ -10,6 +10,8 @@ import java.util.SortedMap;
import java.util.TreeMap;
import java.util.TreeSet;
+import com.google.common.collect.Iterables;
+
import rails.common.*;
import rails.common.parser.GameOption;
import rails.game.action.*;
@@ -2811,7 +2813,7 @@ public class OperatingRound extends Round implements Observer {
int cash = operatingCompany.value().getCash();
int cost = 0;
- List<Train> trains;
+ Set<Train> trains;
boolean hasTrains =
operatingCompany.value().getPortfolioModel().getNumberOfTrains() > 0;
@@ -2862,7 +2864,7 @@ public class OperatingRound extends Round implements Observer {
if (train.canBeExchanged() && hasTrains) {
cost = train.getCertType().getExchangeCost();
if (cost <= cash) {
- List<Train> exchangeableTrains =
+ Set<Train> exchangeableTrains =
operatingCompany.value().getPortfolioModel().getUniqueTrains();
BuyTrain action = new BuyTrain(train, ipo.getParent(), cost);
action.setTrainsForExchange(exchangeableTrains);
@@ -3031,7 +3033,7 @@ public class OperatingRound extends Round implements Observer {
public void checkForeignSales() {
if (getGameParameterAsBoolean(GameDef.Parm.REMOVE_TRAIN_BEFORE_SR)
&& trainManager.isAnyTrainBought()) {
- Train train = trainManager.getAvailableNewTrains().get(0);
+ Train train = Iterables.get(trainManager.getAvailableNewTrains(), 0);
if (train.getCertType().hasInfiniteQuantity()) return;
scrapHeap.addTrain(train);
ReportBuffer.add(LocalText.getText("RemoveTrain", train.getId()));
diff --git a/src/rails/game/PublicCertificate.java b/src/rails/game/PublicCertificate.java
index f6e2cd1..e72b973 100644
--- a/src/rails/game/PublicCertificate.java
+++ b/src/rails/game/PublicCertificate.java
@@ -10,8 +10,9 @@ import rails.common.LocalText;
import rails.game.model.CertificatesModel;
import rails.game.state.Item;
import rails.game.state.OwnableItem;
+import rails.game.state.Typable;
-public class PublicCertificate extends OwnableItem<PublicCertificate> implements Certificate, Cloneable {
+public class PublicCertificate extends OwnableItem<PublicCertificate> implements Certificate, Cloneable, Typable<PublicCompany> {
/** From which public company is this a certificate */
protected PublicCompany company;
@@ -188,6 +189,11 @@ public class PublicCertificate extends OwnableItem<PublicCertificate> implements
return certTypeId;
}
+ // Typable interface
+ public PublicCompany getType() {
+ return company;
+ }
+
@Override
protected Object clone() {
try {
diff --git a/src/rails/game/PublicCompany.java b/src/rails/game/PublicCompany.java
index c961906..bc673b4 100644
--- a/src/rails/game/PublicCompany.java
+++ b/src/rails/game/PublicCompany.java
@@ -4,6 +4,8 @@ import java.awt.Color;
import java.util.*;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
import rails.common.GuiDef;
import rails.common.LocalText;
@@ -1046,7 +1048,7 @@ public class PublicCompany extends Company implements CashOwner, PortfolioOwner
// TODO: Check if this works correctly
// move all laid tokens to free tokens again
- PortfolioList.moveAll(
+ PortfolioSet.moveAll(
baseTokens.getLaidTokens(), baseTokens.getFreeTokens());
// close company on the stock market
stockMarket.close(this);
@@ -1601,7 +1603,7 @@ public class PublicCompany extends Company implements CashOwner, PortfolioOwner
privatesCostThisTurn.change(price);
// Move any special abilities to the portfolio, if configured so
- List<SpecialProperty> sps = privateCompany.getSpecialProperties();
+ Set<SpecialProperty> sps = privateCompany.getSpecialProperties();
if (sps != null) {
// Need intermediate List to avoid ConcurrentModificationException
List<SpecialProperty> spsToMoveHere =
@@ -1818,7 +1820,7 @@ public class PublicCompany extends Company implements CashOwner, PortfolioOwner
public BaseToken getFreeToken() {
if (baseTokens.getFreeTokens().size() > 0) {
- return (BaseToken)baseTokens.getFreeTokens().items().get(0);
+ return (BaseToken) Iterables.get(baseTokens.getFreeTokens().items(), 0);
} else {
return null;
}
@@ -1854,7 +1856,7 @@ public class PublicCompany extends Company implements CashOwner, PortfolioOwner
return list;
}
- public ImmutableList<Token> getLaidBaseTokens() {
+ public ImmutableSet<Token> getLaidBaseTokens() {
return baseTokens.getLaidTokens().items();
}
diff --git a/src/rails/game/Stop.java b/src/rails/game/Stop.java
index 9c9607c..8f398b2 100644
--- a/src/rails/game/Stop.java
+++ b/src/rails/game/Stop.java
@@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory;
import rails.game.state.AbstractItem;
import rails.game.state.GenericState;
import rails.game.state.Owner;
-import rails.game.state.PortfolioList;
+import rails.game.state.PortfolioSet;
import rails.util.Util;
/**
@@ -31,7 +31,7 @@ public class Stop extends AbstractItem implements Owner {
//private Station relatedStation;
private GenericState<Station> relatedStation;
private int slots;
- private PortfolioList<Token> tokens;
+ private PortfolioSet<Token> tokens;
private String trackEdges;
@@ -99,7 +99,7 @@ public class Stop extends AbstractItem implements Owner {
super(hex, String.valueOf(number));
this.number = number;
uniqueId = getParent().getId() + "_" + number;
- tokens = PortfolioList.create(this, "tokens", Token.class);
+ tokens = PortfolioSet.create(this, "tokens", Token.class);
relatedStation = GenericState.create(this, "City_"+uniqueId+"_station");
}
@@ -232,7 +232,7 @@ public class Stop extends AbstractItem implements Owner {
return uniqueId;
}
- public PortfolioList<Token> getTokens() {
+ public PortfolioSet<Token> getTokens() {
return tokens;
}
diff --git a/src/rails/game/Train.java b/src/rails/game/Train.java
index 8d2f027..6d64c58 100644
--- a/src/rails/game/Train.java
+++ b/src/rails/game/Train.java
@@ -9,8 +9,11 @@ import rails.game.state.GenericState;
import rails.game.state.Item;
import rails.game.state.OwnableItem;
import rails.game.state.Portfolio;
+import rails.game.state.Typable;
-public class Train extends OwnableItem<Train> {
+// FIXME: Trains a tricky as they can swap their type
+// This change has to be tracked if used in a PortfolioMap
+public class Train extends OwnableItem<Train> implements Typable<TrainType> {
protected TrainCertificateType certificateType;
diff --git a/src/rails/game/TrainManager.java b/src/rails/game/TrainManager.java
index dd821c9..82b0469 100644
--- a/src/rails/game/TrainManager.java
+++ b/src/rails/game/TrainManager.java
@@ -4,8 +4,10 @@ package rails.game;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -331,9 +333,9 @@ public final class TrainManager extends AbstractItem implements ConfigurableComp
}
- public List<Train> getAvailableNewTrains() {
+ public Set<Train> getAvailableNewTrains() {
- List<Train> availableTrains = new ArrayList<Train>();
+ Set<Train> availableTrains = new HashSet<Train>();
Train train;
for (TrainCertificateType type : trainCertTypes) {
diff --git a/src/rails/game/action/BuyTrain.java b/src/rails/game/action/BuyTrain.java
index ce341af..c70873b 100644
--- a/src/rails/game/action/BuyTrain.java
+++ b/src/rails/game/action/BuyTrain.java
@@ -1,14 +1,9 @@
-/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/action/BuyTrain.java,v 1.22 2010/06/21 21:35:50 stefanfrey Exp $
- *
- * Created on 20-May-2006
- * Change Log:
- */
package rails.game.action;
import java.io.IOException;
import java.io.ObjectInputStream;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
import rails.game.Bank;
import rails.game.CompanyManager;
@@ -34,7 +29,7 @@ public class BuyTrain extends PossibleORAction {
private String fromName;
private int fixedCost = 0;
private boolean forcedBuyIfNoRoute = false; // TODO Can be disabled once route checking exists
- transient private List<Train> trainsForExchange = null;
+ transient private Set<Train> trainsForExchange = null;
private String[] trainsForExchangeUniqueIds;
/** Obsolete, but left in for backwards compatibility of saved files */
@@ -79,13 +74,13 @@ public class BuyTrain extends PossibleORAction {
this.typeName = type.getName();
}
- public BuyTrain setTrainsForExchange(List<Train> trains) {
+ public BuyTrain setTrainsForExchange(Set<Train> trains) {
trainsForExchange = trains;
if (trains != null) {
trainsForExchangeUniqueIds = new String[trains.size()];
- for (int i = 0; i < trains.size(); i++) {
- trainsForExchangeUniqueIds[i] = trains.get(i).getId();
- // Must be replaced by unique Ids - why was this a todo?
+ int i = 0;
+ for (Train train:trains) {
+ trainsForExchangeUniqueIds[i++] = train.getId();
}
}
return this;
@@ -165,7 +160,7 @@ public class BuyTrain extends PossibleORAction {
return trainsForExchange != null && !trainsForExchange.isEmpty();
}
- public List<Train> getTrainsForExchange() {
+ public Set<Train> getTrainsForExchange() {
return trainsForExchange;
}
@@ -325,7 +320,7 @@ public class BuyTrain extends PossibleORAction {
// from = gameManager.getPortfolioByName(fromName);
if (trainsForExchangeUniqueIds != null
&& trainsForExchangeUniqueIds.length > 0) {
- trainsForExchange = new ArrayList<Train>();
+ trainsForExchange = new HashSet<Train>();
for (int i = 0; i < trainsForExchangeUniqueIds.length; i++) {
trainsForExchange.add(trainManager.getTrainByUniqueId(trainsForExchangeUniqueIds[i]));
}
diff --git a/src/rails/game/action/DiscardTrain.java b/src/rails/game/action/DiscardTrain.java
index 35b4f9f..9bb98e9 100644
--- a/src/rails/game/action/DiscardTrain.java
+++ b/src/rails/game/action/DiscardTrain.java
@@ -1,14 +1,9 @@
-/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/action/DiscardTrain.java,v 1.11 2009/12/27 18:30:11 evos Exp $
- *
- * Created on 20-May-2006
- * Change Log:
- */
package rails.game.action;
import java.io.IOException;
import java.io.ObjectInputStream;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
import rails.game.*;
@@ -18,7 +13,7 @@ import rails.game.*;
public class DiscardTrain extends PossibleORAction {
// Server settings
- transient private List<Train> ownedTrains = null;
+ transient private Set<Train> ownedTrains = null;
private String[] ownedTrainsUniqueIds;
/** True if discarding trains is mandatory */
@@ -30,25 +25,26 @@ public class DiscardTrain extends PossibleORAction {
public static final long serialVersionUID = 1L;
- public DiscardTrain(PublicCompany company, List<Train> trains) {
+ public DiscardTrain(PublicCompany company, Set<Train> trains) {
super();
this.ownedTrains = trains;
this.ownedTrainsUniqueIds = new String[trains.size()];
- for (int i = 0; i < trains.size(); i++) {
- ownedTrainsUniqueIds[i] = trains.get(i).getId();
+ int i = 0;
+ for (Train train:trains) {
+ ownedTrainsUniqueIds[i++] = train.getId();
}
this.company = company;
this.companyName = company.getId();
}
- public DiscardTrain(PublicCompany company, List<Train> trains,
+ public DiscardTrain(PublicCompany company, Set<Train> trainsToDiscardFrom,
boolean forced) {
- this(company, trains);
+ this(company, trainsToDiscardFrom);
this.forced = forced;
}
- public List<Train> getOwnedTrains() {
+ public Set<Train> getOwnedTrains() {
return ownedTrains;
}
@@ -110,7 +106,7 @@ public class DiscardTrain extends PossibleORAction {
}
if (ownedTrainsUniqueIds != null && ownedTrainsUniqueIds.length > 0) {
- ownedTrains = new ArrayList<Train>();
+ ownedTrains = new HashSet<Train>();
for (int i = 0; i < ownedTrainsUniqueIds.length; i++) {
ownedTrains.add(trainManager.getTrainByUniqueId(ownedTrainsUniqueIds[i]));
}
diff --git a/src/rails/game/model/BaseTokensModel.java b/src/rails/game/model/BaseTokensModel.java
index 5f487ac..c11e680 100644
--- a/src/rails/game/model/BaseTokensModel.java
+++ b/src/rails/game/model/BaseTokensModel.java
@@ -4,20 +4,20 @@ import rails.game.BaseToken;
import rails.game.PublicCompany;
import rails.game.Token;
import rails.game.state.Model;
-import rails.game.state.PortfolioList;
+import rails.game.state.PortfolioSet;
/**
* A model presenting the number of tokens
*/
public class BaseTokensModel extends Model {
- private final PortfolioList<Token> freeBaseTokens;
- private final PortfolioList<Token> laidBaseTokens;
+ private final PortfolioSet<Token> freeBaseTokens;
+ private final PortfolioSet<Token> laidBaseTokens;
private BaseTokensModel(PublicCompany parent, String id) {
super(parent, id);
- freeBaseTokens = PortfolioList.create(parent, "freeBaseTokens", Token.class);
- laidBaseTokens = PortfolioList.create(parent, "laidBaseTokens", Token.class);
+ freeBaseTokens = PortfolioSet.create(parent, "freeBaseTokens", Token.class);
+ laidBaseTokens = PortfolioSet.create(parent, "laidBaseTokens", Token.class);
}
public static BaseTokensModel create(PublicCompany parent, String id){
@@ -46,11 +46,11 @@ public class BaseTokensModel extends Model {
laidBaseTokens.moveInto(token);
}
- public PortfolioList<Token> getFreeTokens() {
+ public PortfolioSet<Token> getFreeTokens() {
return freeBaseTokens;
}
- public PortfolioList<Token> getLaidTokens() {
+ public PortfolioSet<Token> getLaidTokens() {
return laidBaseTokens;
}
diff --git a/src/rails/game/model/CertificatesModel.java b/src/rails/game/model/CertificatesModel.java
index 5938b0c..76ccffc 100644
--- a/src/rails/game/model/CertificatesModel.java
+++ b/src/rails/game/model/CertificatesModel.java
@@ -2,7 +2,7 @@ package rails.game.model;
import java.util.Iterator;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import rails.game.Player;
import rails.game.PublicCertificate;
@@ -23,7 +23,7 @@ public final class CertificatesModel extends Model {
public final static String ID = "CertificatesModel";
- private final PortfolioMap<PublicCertificate> certificates;
+ private final PortfolioMap<PublicCompany, PublicCertificate> certificates;
private CertificatesModel(PortfolioHolder parent) {
super(parent, ID);
@@ -39,7 +39,7 @@ public final class CertificatesModel extends Model {
return (PortfolioHolder)getParent();
}
- public PortfolioMap<PublicCertificate> getPortfolio() {
+ public PortfolioMap<PublicCompany, PublicCertificate> getPortfolio() {
return certificates;
}
@@ -78,11 +78,11 @@ public final class CertificatesModel extends Model {
return certificates.toString();
}
- public ImmutableList<PublicCertificate> getCertificates() {
+ public ImmutableSet<PublicCertificate> getCertificates() {
return certificates.items();
}
- public ImmutableList<PublicCertificate> getCertificates(PublicCompany company) {
+ public ImmutableSet<PublicCertificate> getCertificates(PublicCompany company) {
return certificates.getItems(company);
}
diff --git a/src/rails/game/model/PortfolioModel.java b/src/rails/game/model/PortfolioModel.java
index a9901e5..96049e1 100644
--- a/src/rails/game/model/PortfolioModel.java
+++ b/src/rails/game/model/PortfolioModel.java
@@ -2,14 +2,17 @@ package rails.game.model;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
+import com.google.common.collect.ImmutableSet;
import rails.common.LocalText;
import rails.game.Bank;
@@ -31,7 +34,7 @@ import rails.game.special.SpecialProperty;
import rails.game.state.Model;
import rails.game.state.PortfolioHolder;
import rails.game.state.Portfolio;
-import rails.game.state.PortfolioList;
+import rails.game.state.PortfolioSet;
// FIXME: Solve id, name and uniquename clashes
@@ -57,7 +60,7 @@ public final class PortfolioModel extends Model implements PortfolioHolder {
/** Owned tokens */
// TODO Currently only used to discard expired Bonus tokens.
- private final Portfolio<Token> bonusTokens = PortfolioList.create(this, "BonusTokens", Token.class);
+ private final Portfolio<Token> bonusTokens = PortfolioSet.create(this, "BonusTokens", Token.class);
/**
* Private-independent special properties. When moved here, a special
@@ -65,7 +68,7 @@ public final class PortfolioModel extends Model implements PortfolioHolder {
* 18AL named train tokens.
*/
private final Portfolio<SpecialProperty> specialProperties =
- PortfolioList.create(this, "SpecialProperties", SpecialProperty.class);
+ PortfolioSet.create(this, "SpecialProperties", SpecialProperty.class);
private final GameManager gameManager;
@@ -140,11 +143,11 @@ public final class PortfolioModel extends Model implements PortfolioHolder {
return null;
}
- public ImmutableList<PrivateCompany> getPrivateCompanies() {
+ public ImmutableSet<PrivateCompany> getPrivateCompanies() {
return privates.getPortfolio().items();
}
- public ImmutableList<PublicCertificate> getCertificates() {
+ public ImmutableSet<PublicCertificate> getCertificates() {
return certificates.getPortfolio().items();
}
@@ -166,7 +169,7 @@ public final class PortfolioModel extends Model implements PortfolioHolder {
}
*/
- public ImmutableList<PublicCertificate> getCertificates(PublicCompany company) {
+ public ImmutableSet<PublicCertificate> getCertificates(PublicCompany company) {
return certificates.getPortfolio().getItems(company);
}
@@ -336,7 +339,7 @@ public final class PortfolioModel extends Model implements PortfolioHolder {
return trains.getPortfolio().size();
}
- public ImmutableList<Train> getTrainList() {
+ public ImmutableSet<Train> getTrainList() {
return trains.getPortfolio().items();
}
@@ -355,9 +358,9 @@ public final class PortfolioModel extends Model implements PortfolioHolder {
}
/** Returns one train of any type held */
- public List<Train> getUniqueTrains() {
+ public Set<Train> getUniqueTrains() {
- List<Train> trainsFound = new ArrayList<Train>();
+ Set<Train> trainsFound = new HashSet<Train>();
Map<TrainType, Object> trainTypesFound =
new HashMap<TrainType, Object>();
for (Train train : trains.getPortfolio()) {
@@ -506,9 +509,9 @@ public final class PortfolioModel extends Model implements PortfolioHolder {
*/
/**
- * @return ArrayList of all special properties we have.
+ * @return Set of all special properties we have.
*/
- public ImmutableList<SpecialProperty> getPersistentSpecialProperties() {
+ public ImmutableSet<SpecialProperty> getPersistentSpecialProperties() {
return specialProperties.items();
}
@@ -542,7 +545,7 @@ public final class PortfolioModel extends Model implements PortfolioHolder {
public <T extends SpecialProperty> List<T> getSpecialProperties(
Class<T> clazz, boolean includeExercised) {
List<T> result = new ArrayList<T>();
- List<SpecialProperty> sps;
+ Set<SpecialProperty> sps;
if (getParent() instanceof Player || getParent() instanceof PublicCompany) {
diff --git a/src/rails/game/model/PrivatesModel.java b/src/rails/game/model/PrivatesModel.java
index 055d2a5..86ad87d 100644
--- a/src/rails/game/model/PrivatesModel.java
+++ b/src/rails/game/model/PrivatesModel.java
@@ -5,7 +5,7 @@ import rails.game.PrivateCompany;
import rails.game.state.Model;
import rails.game.state.Portfolio;
import rails.game.state.PortfolioHolder;
-import rails.game.state.PortfolioList;
+import rails.game.state.PortfolioSet;
public final class PrivatesModel extends Model {
@@ -17,7 +17,7 @@ public final class PrivatesModel extends Model {
private PrivatesModel(PortfolioHolder parent, String id) {
super(parent, id);
- privates = PortfolioList.create(parent, "privates", PrivateCompany.class);
+ privates = PortfolioSet.create(parent, "privates", PrivateCompany.class);
}
/**
diff --git a/src/rails/game/model/TrainsModel.java b/src/rails/game/model/TrainsModel.java
index b266a23..a8f6289 100644
--- a/src/rails/game/model/TrainsModel.java
+++ b/src/rails/game/model/TrainsModel.java
@@ -1,21 +1,24 @@
package rails.game.model;
import com.google.common.collect.HashMultiset;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multiset;
import rails.game.TrainCertificateType;
import rails.game.Train;
+import rails.game.TrainType;
import rails.game.state.Model;
import rails.game.state.Portfolio;
import rails.game.state.PortfolioHolder;
import rails.game.state.PortfolioMap;
+// FIXME: It is tricky to use the PortfolioMap as the TrainType can switch
+// their type, potentially it is better to use a PortfolioSet
public class TrainsModel extends Model {
public static final String ID = "TrainsModel";
- private final PortfolioMap<Train> trains;
+ private final PortfolioMap<TrainType, Train> trains;
private boolean abbrList = false;
@@ -39,7 +42,7 @@ public class TrainsModel extends Model {
this.abbrList = abbrList;
}
- public ImmutableList<Train> getTrains() {
+ public ImmutableSet<Train> getTrains() {
return trains.items();
}
diff --git a/src/rails/game/specific/_1835/OperatingRound_1835.java b/src/rails/game/specific/_1835/OperatingRound_1835.java
index 18b8e0c..5f8d738 100644
--- a/src/rails/game/specific/_1835/OperatingRound_1835.java
+++ b/src/rails/game/specific/_1835/OperatingRound_1835.java
@@ -2,6 +2,8 @@ package rails.game.specific._1835;
import java.util.*;
+import com.google.common.collect.Iterables;
+
import rails.common.DisplayBuffer;
import rails.common.LocalText;
import rails.common.parser.GameOption;
@@ -81,7 +83,7 @@ public final class OperatingRound_1835 extends OperatingRound {
* so it can be subtracted if PR operates */
if (recipient instanceof Player && priv.getSpecialProperties() != null
&& priv.getSpecialProperties().size() > 0) {
- SpecialProperty sp = priv.getSpecialProperties().get(0);
+ SpecialProperty sp = Iterables.get(priv.getSpecialProperties(), 0);
if (sp instanceof ExchangeForShare) {
ExchangeForShare efs = (ExchangeForShare) sp;
if (efs.getPublicCompanyName().equalsIgnoreCase(GameManager_1835.PR_ID)) {
@@ -144,9 +146,9 @@ public final class OperatingRound_1835 extends OperatingRound {
super.initTurn();
- List<SpecialProperty> sps = operatingCompany.value().getSpecialProperties();
+ Set<SpecialProperty> sps = operatingCompany.value().getSpecialProperties();
if (sps != null && !sps.isEmpty()) {
- ExchangeForShare efs = (ExchangeForShare) sps.get(0);
+ ExchangeForShare efs = (ExchangeForShare) Iterables.get(sps, 0);
addIncomeDenialShare (operatingCompany.value().getPresident(), efs.getShare());
}
}
diff --git a/src/rails/game/specific/_1835/PrussianFormationRound.java b/src/rails/game/specific/_1835/PrussianFormationRound.java
index 835f4be..6ced1eb 100644
--- a/src/rails/game/specific/_1835/PrussianFormationRound.java
+++ b/src/rails/game/specific/_1835/PrussianFormationRound.java
@@ -2,6 +2,8 @@ package rails.game.specific._1835;
import java.util.*;
+import com.google.common.collect.Iterables;
+
import rails.common.DisplayBuffer;
import rails.common.GuiDef;
import rails.common.LocalText;
@@ -79,19 +81,19 @@ public final class PrussianFormationRound extends StockRound {
log.debug("Original Prussian starting player was "+startingPlayer.getId());
setCurrentPlayer(startingPlayer);
if (forcedMerge) {
- List<SpecialProperty> sps;
+ Set<SpecialProperty> sps;
setFoldablePrePrussians();
List<Company> foldables = new ArrayList<Company> ();
for (PrivateCompany company : gameManager.getAllPrivateCompanies()) {
sps = company.getSpecialProperties();
- if (sps != null && !sps.isEmpty() && sps.get(0) instanceof ExchangeForShare) {
+ if (sps != null && !sps.isEmpty() && Iterables.get(sps, 0) instanceof ExchangeForShare) {
foldables.add(company);
}
}
for (PublicCompany company : gameManager.getAllPublicCompanies()) {
if (company.isClosed()) continue;
sps = company.getSpecialProperties();
- if (sps != null && !sps.isEmpty() && sps.get(0) instanceof ExchangeForShare) {
+ if (sps != null && !sps.isEmpty() && Iterables.get(sps, 0) instanceof ExchangeForShare) {
foldables.add(company);
}
}
@@ -135,18 +137,18 @@ public final class PrussianFormationRound extends StockRound {
foldablePrePrussians = new ArrayList<Company> ();
SpecialProperty sp;
for (PrivateCompany company : currentPlayer.getPortfolioModel().getPrivateCompanies()) {
- sp = company.getSpecialProperties().get(0);
+ sp = Iterables.get(company.getSpecialProperties(), 0);
if (sp instanceof ExchangeForShare) {
foldablePrePrussians.add(company);
}
}
PublicCompany company;
- List<SpecialProperty> sps;
+ Set<SpecialProperty> sps;
for (PublicCertificate cert : currentPlayer.getPortfolioModel().getCertificates()) {
if (!cert.isPresidentShare()) continue;
company = cert.getCompany();
sps = company.getSpecialProperties();
- if (sps != null && !sps.isEmpty() && sps.get(0) instanceof ExchangeForShare) {
+ if (sps != null && !sps.isEmpty() && Iterables.get(sps, 0) instanceof ExchangeForShare) {
foldablePrePrussians.add(company);
}
}
@@ -321,7 +323,7 @@ public final class PrussianFormationRound extends StockRound {
player = ((PublicCompany)company).getPresident();
}
// Shortcut, sp should be checked
- efs = (ExchangeForShare) company.getSpecialProperties().get(0);
+ efs = (ExchangeForShare) Iterables.get(company.getSpecialProperties(), 0);
cert = unavailable.findCertificate(prussian, efs.getShare()/prussian.getShareUnit(),
president);
player.getPortfolioModel().addPublicCertificate(cert);
diff --git a/src/rails/game/specific/_1856/CGRFormationRound.java b/src/rails/game/specific/_1856/CGRFormationRound.java
index a2ea45d..7283e94 100644
--- a/src/rails/game/specific/_1856/CGRFormationRound.java
+++ b/src/rails/game/specific/_1856/CGRFormationRound.java
@@ -34,7 +34,7 @@ public final class CGRFormationRound extends SwitchableUIRound {
* effects from the merger, processed at the end
* thus no need for state variables
*/
- private List<Train> trainsToDiscardFrom = null;
+ private Set<Train> trainsToDiscardFrom = null;
private boolean forcedTrainDiscard = true;
private List<ExchangeableToken> tokensToExchangeFrom = null;
private List<BaseToken> nonHomeTokens = null;
@@ -556,7 +556,7 @@ public final class CGRFormationRound extends SwitchableUIRound {
}
// Move any remaining trains
- List<Train> trains = comp.getPortfolioModel().getTrainList();
+ Set<Train> trains = comp.getPortfolioModel().getTrainList();
for (Train train : trains) {
cgr.getPortfolioModel().addTrain(train);
if (train.isPermanent()) cgr.setHadPermanentTrain(true);
@@ -668,7 +668,7 @@ bonuses: for (Bonus bonus : bonuses) {
// Check the trains, autodiscard any excess non-permanent trains
// int trainLimit = cgr.getTrainLimit(gameManager.getCurrentPlayerIndex());
int trainLimit = cgr.getCurrentTrainLimit();
- List<Train> trains = cgr.getPortfolioModel().getTrainList();
+ Set<Train> trains = cgr.getPortfolioModel().getTrainList();
if (cgr.getNumberOfTrains() > trainLimit) {
ReportBuffer.add("");
int numberToDiscard = cgr.getNumberOfTrains() - trainLimit;
@@ -770,7 +770,7 @@ bonuses: for (Bonus bonus : bonuses) {
} else if (!this.cgrHasDiscardedTrains.value()) {
// Check if CGR still has non-permanent trains
// these may be discarded voluntarily
- trainsToDiscardFrom = new ArrayList<Train>();
+ trainsToDiscardFrom = new HashSet<Train>();
for (Train train : cgr.getPortfolioModel().getTrainList()) {
if (!train.isPermanent()) {
trainsToDiscardFrom.add(train);
diff --git a/src/rails/game/specific/_1856/OperatingRound_1856.java b/src/rails/game/specific/_1856/OperatingRound_1856.java
index 9c0981e..6c40d6d 100644
--- a/src/rails/game/specific/_1856/OperatingRound_1856.java
+++ b/src/rails/game/specific/_1856/OperatingRound_1856.java
@@ -3,6 +3,8 @@ package rails.game.specific._1856;
import java.util.ArrayList;
import java.util.List;
+import com.google.common.collect.Iterables;
+
import rails.common.DisplayBuffer;
import rails.common.GuiDef;
import rails.common.LocalText;
@@ -66,7 +68,7 @@ public class OperatingRound_1856 extends OperatingRound {
if (!operatingCompany.value().hasOperated()) {
int soldPercentage = getSoldPercentage (operatingCompany.value());
- Train nextAvailableTrain = gameManager.getTrainManager().getAvailableNewTrains().get(0);
+ Train nextAvailableTrain = Iterables.get(gameManager.getTrainManager().getAvailableNewTrains(), 0);
int trainNumber;
try {
trainNumber = Integer.parseInt(nextAvailableTrain.getId());
diff --git a/src/rails/game/specific/_1856/PublicCompany_1856.java b/src/rails/game/specific/_1856/PublicCompany_1856.java
index 0eec963..6625635 100644
--- a/src/rails/game/specific/_1856/PublicCompany_1856.java
+++ b/src/rails/game/specific/_1856/PublicCompany_1856.java
@@ -1,5 +1,7...
[truncated message content] |