) fields.get("canReplaceToken", canReplaceToken);
+ selectedTargetCompanyName = (String) fields.get("selectedTargetCompanyName", selectedTargetCompanyName);
+ replaceToken = fields.get("replaceToken", replaceToken);
+
+ CompanyManager cmgr = getCompanyManager();
+ mergingCompany = cmgr.getPublicCompany(mergingCompanyName);
+
+ targetCompanies = new ArrayList<>();
+ for (String name : targetCompanyNames.split(",")) {
+ if (name.equals("null")) {
+ targetCompanies.add(null);
+ } else {
+ targetCompanies.add(cmgr.getPublicCompany(name));
+ }
+ }
+
+ if (selectedTargetCompanyName != null && !selectedTargetCompanyName.equals("null")) {
+ selectedTargetCompany = cmgr.getPublicCompany(selectedTargetCompanyName);
+ }
+ } else {
+ in.defaultReadObject();
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
CompanyManager cmgr = getCompanyManager();
mergingCompany = cmgr.getPublicCompany(mergingCompanyName);
diff --git a/src/main/java/rails/game/action/NullAction.java b/src/main/java/rails/game/action/NullAction.java
index cee3c8979..19671c58a 100644
--- a/src/main/java/rails/game/action/NullAction.java
+++ b/src/main/java/rails/game/action/NullAction.java
@@ -4,18 +4,19 @@
import java.io.ObjectInputStream;
import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
import com.google.common.base.Objects;
/**
- *
* Rails 2.0: Updated equals and toString methods
*/
public class NullAction extends PossibleAction {
private static final long serialVersionUID = 2L;
- public enum Mode { DONE, PASS, SKIP, AUTOPASS, START_GAME }
+
+ public enum Mode {DONE, PASS, SKIP, AUTOPASS, START_GAME}
// optional label that is returned on toString instead of the standard labels defined below
private String optionalLabel = null;
@@ -34,7 +35,9 @@ public Mode getMode() {
return mode_enum;
}
- /** returns the NullAction itself */
+ /**
+ * returns the NullAction itself
+ */
public NullAction setLabel(String label) {
this.optionalLabel = label;
return this;
@@ -48,28 +51,36 @@ protected boolean equalsAs(PossibleAction pa, boolean asOption) {
if (!super.equalsAs(pa, asOption)) return false;
// check asOption attributes
- NullAction action = (NullAction)pa;
+ NullAction action = (NullAction) pa;
return Objects.equal(this.mode, action.mode)
&& Objects.equal(this.optionalLabel, action.optionalLabel)
- ;
+ ;
// no asAction attributes to be checked
}
- @Override
+ @Override
public String toString() {
- return super.toString() +
- RailsObjects.stringHelper(this)
- .addToString("mode", mode_enum)
- .addToString("optionalLabel", optionalLabel)
- .toString()
- ;
+ return super.toString() +
+ RailsObjects.stringHelper(this)
+ .addToString("mode", mode_enum)
+ .addToString("optionalLabel", optionalLabel)
+ .toString()
+ ;
}
- private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- in.defaultReadObject();
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ in.defaultReadObject();
- // required since Rails 2.0
- mode_enum = Mode.values()[mode];
- }
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ // required since Rails 2.0
+ mode_enum = Mode.values()[mode];
+ }
+ }
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ // required since Rails 2.0
+ mode_enum = Mode.values()[mode];
+ }
}
diff --git a/src/main/java/rails/game/action/PossibleAction.java b/src/main/java/rails/game/action/PossibleAction.java
index 7009420c8..d376b19aa 100644
--- a/src/main/java/rails/game/action/PossibleAction.java
+++ b/src/main/java/rails/game/action/PossibleAction.java
@@ -24,7 +24,7 @@
* PossibleAction is the superclass of all classes that describe an allowed user
* action (such as laying a tile or dropping a token on a specific hex, buying a
* train etc.).
- *
+ *
* Rails 2.0: Added updated equals and toString methods
*/
@@ -48,7 +48,7 @@ public abstract class PossibleAction implements ChangeAction, Serializable {
// TODO: Replace this by a constructor argument for the player
public PossibleAction(Activity activity) {
- if ( activity == null ) {
+ if (activity == null) {
return;
}
root = activity.getRoot();
@@ -57,7 +57,7 @@ public PossibleAction(Activity activity) {
}
public PossibleAction(RailsRoot root) {
- if ( root == null ) {
+ if (root == null) {
log.debug("missing root", new Exception());
return;
}
@@ -65,6 +65,10 @@ public PossibleAction(RailsRoot root) {
setPlayer();
}
+ protected PossibleAction() {
+ // do nothing
+ }
+
public void setPlayer() {
player = root.getPlayerManager().getCurrentPlayer();
if (player != null) {
@@ -114,8 +118,8 @@ protected boolean equalsAs(PossibleAction pa, boolean asOption) {
// check asOption attributes
boolean options = Objects.equal(this.player, pa.player)
- || pa instanceof NullAction // TODO: Old save files are sometimes wrong to assign Null Actions
- ;
+ || pa instanceof NullAction // TODO: Old save files are sometimes wrong to assign Null Actions
+ ;
// finish if asOptions check
if (asOption) return options;
@@ -135,10 +139,11 @@ protected boolean equalsAs(PossibleAction pa, boolean asOption) {
* the PossibleAction does not fully restrict choices to valid values only
* (such as the blanket LayTile that does no restrict the hex to lay a tile on,
* or the SetDividend that will accept any revenue value).
+ *
* @param pa Another PossibleAction to compare with.
* @return True if the compared PossibleAction object has equal choice options.
*/
- public final boolean equalsAsOption (PossibleAction pa) {
+ public final boolean equalsAsOption(PossibleAction pa) {
return equalsAs(pa, true);
}
@@ -149,10 +154,11 @@ public final boolean equalsAsOption (PossibleAction pa) {
*
This method is used by the server (engine) to check if two action
* objects represent the same actual action, as is done when reloading a saved file
* (i.e. loading a later stage of the same game).
+ *
* @param pa Another PossibleAction to compare with.
* @return True if the compared PossibleAction object has equal selected action values.
*/
- public final boolean equalsAsAction (PossibleAction pa) {
+ public final boolean equalsAsAction(PossibleAction pa) {
return equalsAs(pa, false);
}
@@ -164,7 +170,7 @@ protected GameManager getGameManager() {
return root.getGameManager();
}
- protected CompanyManager getCompanyManager () {
+ protected CompanyManager getCompanyManager() {
return root.getCompanyManager();
}
@@ -179,7 +185,9 @@ public boolean isCorrection() {
return false;
}
- /** Default version of an Menu item text. To be overridden where useful. */
+ /**
+ * Default version of an Menu item text. To be overridden where useful.
+ */
public String toMenu() {
return toString();
}
@@ -198,8 +206,20 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- // inject RailsRoot for use by all subclasses during their own deserializing
- root = ((RailsObjectInputStream) in).getRoot();
+ if (in instanceof RailsObjectInputStream) {
+ // inject RailsRoot for use by all subclasses during their own deserializing
+ this.root = ((RailsObjectInputStream) in).getRoot();
+
+ if (playerName != null) {
+ player = root.getPlayerManager().getPlayerByName(playerName);
+ } else {
+ player = root.getPlayerManager().getPlayerByIndex(playerIndex);
+ }
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ this.root = root;
if (playerName != null) {
player = root.getPlayerManager().getPlayerByName(playerName);
@@ -207,5 +227,4 @@ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundE
player = root.getPlayerManager().getPlayerByIndex(playerIndex);
}
}
-
}
diff --git a/src/main/java/rails/game/action/PossibleActions.java b/src/main/java/rails/game/action/PossibleActions.java
index bd8ba0890..f175ef58a 100644
--- a/src/main/java/rails/game/action/PossibleActions.java
+++ b/src/main/java/rails/game/action/PossibleActions.java
@@ -89,7 +89,7 @@ public boolean validate(PossibleAction checkedAction) {
// Some actions are always allowed
if (checkedAction instanceof GameAction
- && EnumSet.of(GameAction.Mode.SAVE, GameAction.Mode.RELOAD, GameAction.Mode.EXPORT).contains(
+ && EnumSet.of(GameAction.Mode.XML_SAVE, GameAction.Mode.SAVE, GameAction.Mode.RELOAD, GameAction.Mode.EXPORT).contains(
((GameAction)checkedAction).getMode() )) {
return true;
}
diff --git a/src/main/java/rails/game/action/PossibleORAction.java b/src/main/java/rails/game/action/PossibleORAction.java
index 23850790a..52f8a1a75 100644
--- a/src/main/java/rails/game/action/PossibleORAction.java
+++ b/src/main/java/rails/game/action/PossibleORAction.java
@@ -9,6 +9,7 @@
import net.sf.rails.game.PublicCompany;
import net.sf.rails.game.RailsRoot;
import net.sf.rails.game.round.RoundFacade;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
import net.sf.rails.util.Util;
@@ -86,7 +87,17 @@ public String toString () {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- if (Util.hasValue(companyName))
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(companyName))
+ company = getCompanyManager().getPublicCompany(companyName);
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ if (Util.hasValue(companyName)) {
company = getCompanyManager().getPublicCompany(companyName);
+ }
}
}
diff --git a/src/main/java/rails/game/action/ReachDestinations.java b/src/main/java/rails/game/action/ReachDestinations.java
index cc85252bd..2e648dd85 100644
--- a/src/main/java/rails/game/action/ReachDestinations.java
+++ b/src/main/java/rails/game/action/ReachDestinations.java
@@ -5,6 +5,7 @@
import java.util.ArrayList;
import java.util.List;
+import net.sf.rails.util.GameLoader;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
@@ -96,12 +97,38 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ CompanyManager cmgr = getCompanyManager();
+
+ possibleCompanies = new ArrayList<>();
+ if (Util.hasValue(possibleCompanyNames)) {
+ for (String cname : possibleCompanyNames.split(",")) {
+ if (StringUtils.isNotBlank(cname)) {
+ possibleCompanies.add(cmgr.getPublicCompany(cname));
+ }
+ }
+ }
+
+ if (Util.hasValue(reachedCompanyNames)) {
+ reachedCompanies = new ArrayList<>();
+ for (String cname : reachedCompanyNames.split(",")) {
+ if (StringUtils.isNotBlank(cname)) {
+ reachedCompanies.add(cmgr.getPublicCompany(cname));
+ }
+ }
+ }
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
CompanyManager cmgr = getCompanyManager();
possibleCompanies = new ArrayList<>();
if (Util.hasValue(possibleCompanyNames)) {
for (String cname : possibleCompanyNames.split(",")) {
- if ( StringUtils.isNotBlank(cname) ) {
+ if (StringUtils.isNotBlank(cname)) {
possibleCompanies.add(cmgr.getPublicCompany(cname));
}
}
@@ -110,7 +137,7 @@ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundE
if (Util.hasValue(reachedCompanyNames)) {
reachedCompanies = new ArrayList<>();
for (String cname : reachedCompanyNames.split(",")) {
- if ( StringUtils.isNotBlank(cname) ) {
+ if (StringUtils.isNotBlank(cname)) {
reachedCompanies.add(cmgr.getPublicCompany(cname));
}
}
diff --git a/src/main/java/rails/game/action/RepayLoans.java b/src/main/java/rails/game/action/RepayLoans.java
index 19dd2585b..74fe852e8 100644
--- a/src/main/java/rails/game/action/RepayLoans.java
+++ b/src/main/java/rails/game/action/RepayLoans.java
@@ -6,6 +6,8 @@
import com.google.common.base.Objects;
import net.sf.rails.game.PublicCompany;
+import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
/**
@@ -114,6 +116,14 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ company = getCompanyManager().getPublicCompany(companyName);
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
company = getCompanyManager().getPublicCompany(companyName);
}
diff --git a/src/main/java/rails/game/action/SellShares.java b/src/main/java/rails/game/action/SellShares.java
index 7db59caf1..e268477ce 100644
--- a/src/main/java/rails/game/action/SellShares.java
+++ b/src/main/java/rails/game/action/SellShares.java
@@ -7,6 +7,8 @@
import net.sf.rails.game.CompanyManager;
import net.sf.rails.game.PublicCompany;
+import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
import net.sf.rails.util.Util;
@@ -135,17 +137,30 @@ public String toString() {
/** Deserialize */
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- // Custom reading for backwards compatibility
- ObjectInputStream.GetField fields = in.readFields();
-
- companyName = (String) fields.get("companyName", null);
- shareUnit = fields.get("shareUnit", shareUnit);
- shareUnits = fields.get("shareUnits", shareUnits);
- share = fields.get("share", share);
- price = fields.get("price", price);
- numberSold = fields.get("numberSold", 0); // For backwards compatibility
- number = fields.get("number", numberSold);
- presidentExchange = fields.get("presidentExchange", 0);
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ // Custom reading for backwards compatibility
+ ObjectInputStream.GetField fields = in.readFields();
+
+ companyName = (String) fields.get("companyName", null);
+ shareUnit = fields.get("shareUnit", shareUnit);
+ shareUnits = fields.get("shareUnits", shareUnits);
+ share = fields.get("share", share);
+ price = fields.get("price", price);
+ numberSold = fields.get("numberSold", 0); // For backwards compatibility
+ number = fields.get("number", numberSold);
+ presidentExchange = fields.get("presidentExchange", 0);
+
+ CompanyManager companyManager = getCompanyManager();
+ if (Util.hasValue(companyName))
+ companyName = companyManager.checkAlias(companyName);
+ company = companyManager.getPublicCompany(companyName);
+ } else {
+ in.defaultReadObject();
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
CompanyManager companyManager = getCompanyManager();
if (Util.hasValue(companyName))
diff --git a/src/main/java/rails/game/action/SetDividend.java b/src/main/java/rails/game/action/SetDividend.java
index d51766125..3b2413477 100644
--- a/src/main/java/rails/game/action/SetDividend.java
+++ b/src/main/java/rails/game/action/SetDividend.java
@@ -7,6 +7,7 @@
import com.google.common.base.Objects;
import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
import net.sf.rails.util.Util;
@@ -233,16 +234,28 @@ public String toString() {
/** Deserialize */
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- // Custom deserialization for backwards compatibility
- ObjectInputStream.GetField fields = in.readFields();
- presetRevenue = fields.get("presetRevenue", presetRevenue);
- presetCompanyTreasuryRevenue = fields.get("presetCompanyTreasuryRevenue", presetCompanyTreasuryRevenue);
- setMayUserSetRevenue(fields.get("mayUserSetRevenue", getMayUserSetRevenue()));
- setAllowedRevenueAllocations((int[]) fields.get("allowedRevenueAllocations", getAllowedRevenueAllocations()));
- requiredCash = fields.get("requiredCash", 0);
- actualRevenue = fields.get("actualRevenue", actualRevenue);
- actualCompanyTreasuryRevenue = fields.get("actualCompanyTreasuryRevenue", actualCompanyTreasuryRevenue);
- revenueAllocation = fields.get("revenueAllocation", revenueAllocation);
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ // Custom deserialization for backwards compatibility
+ ObjectInputStream.GetField fields = in.readFields();
+ presetRevenue = fields.get("presetRevenue", presetRevenue);
+ presetCompanyTreasuryRevenue = fields.get("presetCompanyTreasuryRevenue", presetCompanyTreasuryRevenue);
+ setMayUserSetRevenue(fields.get("mayUserSetRevenue", getMayUserSetRevenue()));
+ setAllowedRevenueAllocations((int[]) fields.get("allowedRevenueAllocations", getAllowedRevenueAllocations()));
+ requiredCash = fields.get("requiredCash", 0);
+ actualRevenue = fields.get("actualRevenue", actualRevenue);
+ actualCompanyTreasuryRevenue = fields.get("actualCompanyTreasuryRevenue", actualCompanyTreasuryRevenue);
+ revenueAllocation = fields.get("revenueAllocation", revenueAllocation);
+
+ if (Util.hasValue(companyName)) {
+ company = getCompanyManager().getPublicCompany(companyName);
+ }
+ } else {
+ in.defaultReadObject();
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
if (Util.hasValue(companyName)) {
company = getCompanyManager().getPublicCompany(companyName);
diff --git a/src/main/java/rails/game/action/StartItemAction.java b/src/main/java/rails/game/action/StartItemAction.java
index b794d5efa..ad640463a 100644
--- a/src/main/java/rails/game/action/StartItemAction.java
+++ b/src/main/java/rails/game/action/StartItemAction.java
@@ -7,6 +7,7 @@
import net.sf.rails.game.RailsRoot;
import net.sf.rails.game.StartItem;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
@@ -37,6 +38,10 @@ public StartItemAction (RailsRoot root) {
super (root);
}
+ protected StartItemAction() {
+ super();
+ }
+
/**
* @return Returns the startItem.
*/
@@ -78,6 +83,18 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- startItem = root.getCompanyManager().getStartItemById(startItemName);
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (root != null) {
+ startItem = root.getCompanyManager().getStartItemById(startItemName);
+ }
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ if (root != null) {
+ startItem = root.getCompanyManager().getStartItemById(startItemName);
+ }
}
}
diff --git a/src/main/java/rails/game/action/TakeLoans.java b/src/main/java/rails/game/action/TakeLoans.java
index 80f4418d2..680170b53 100644
--- a/src/main/java/rails/game/action/TakeLoans.java
+++ b/src/main/java/rails/game/action/TakeLoans.java
@@ -6,6 +6,8 @@
import com.google.common.base.Objects;
import net.sf.rails.game.PublicCompany;
+import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
/**
@@ -101,7 +103,14 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- company = getCompanyManager().getPublicCompany(companyName);
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ company = getCompanyManager().getPublicCompany(companyName);
+ }
}
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ company = getCompanyManager().getPublicCompany(companyName);
+ }
}
diff --git a/src/main/java/rails/game/action/UseSpecialProperty.java b/src/main/java/rails/game/action/UseSpecialProperty.java
index 9d321d0ed..15a444e8a 100644
--- a/src/main/java/rails/game/action/UseSpecialProperty.java
+++ b/src/main/java/rails/game/action/UseSpecialProperty.java
@@ -5,7 +5,9 @@
import com.google.common.base.Objects;
+import net.sf.rails.game.RailsRoot;
import net.sf.rails.game.special.SpecialProperty;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
@@ -70,6 +72,16 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (specialPropertyId > 0) {
+ specialProperty = SpecialProperty.getByUniqueId(getRoot(), specialPropertyId);
+ }
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
if (specialPropertyId > 0) {
specialProperty = SpecialProperty.getByUniqueId(getRoot(), specialPropertyId);
}
diff --git a/src/main/java/rails/game/correct/CashCorrectionAction.java b/src/main/java/rails/game/correct/CashCorrectionAction.java
index 4dbb84eca..c31396122 100644
--- a/src/main/java/rails/game/correct/CashCorrectionAction.java
+++ b/src/main/java/rails/game/correct/CashCorrectionAction.java
@@ -7,6 +7,7 @@
import com.google.common.base.Objects;
import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import rails.game.action.PossibleAction;
import net.sf.rails.game.Player;
import net.sf.rails.game.PublicCompany;
@@ -125,6 +126,22 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(correctionName))
+ correctionType = CorrectionType.valueOf(correctionName);
+
+ if (Util.hasValue(cashHolderType) && Util.hasValue(cashHolderName)) {
+ if (cashHolderType.equals("Player"))
+ correctCashHolder = getGameManager().getRoot().getPlayerManager().getPlayerByName(cashHolderName);
+ else if (cashHolderType.equals("PublicCompany"))
+ correctCashHolder = getCompanyManager().getPublicCompany(cashHolderName);
+ }
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
if (Util.hasValue(correctionName))
correctionType = CorrectionType.valueOf(correctionName);
diff --git a/src/main/java/rails/game/correct/ClosePrivate.java b/src/main/java/rails/game/correct/ClosePrivate.java
index 26e6ed177..e9fe9dd10 100644
--- a/src/main/java/rails/game/correct/ClosePrivate.java
+++ b/src/main/java/rails/game/correct/ClosePrivate.java
@@ -5,6 +5,8 @@
import com.google.common.base.Objects;
+import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import rails.game.action.PossibleAction;
import net.sf.rails.game.PrivateCompany;
import net.sf.rails.util.RailsObjects;
@@ -72,7 +74,17 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- if (Util.hasValue(privateCompanyName))
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(privateCompanyName))
privateCompany = getCompanyManager().getPrivateCompany(privateCompanyName);
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ if (Util.hasValue(privateCompanyName)) {
+ privateCompany = getCompanyManager().getPrivateCompany(privateCompanyName);
+ }
}
}
diff --git a/src/main/java/rails/game/correct/CorrectionModeAction.java b/src/main/java/rails/game/correct/CorrectionModeAction.java
index fea32421d..ba82a3311 100644
--- a/src/main/java/rails/game/correct/CorrectionModeAction.java
+++ b/src/main/java/rails/game/correct/CorrectionModeAction.java
@@ -78,10 +78,19 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- if (Util.hasValue(correctionName))
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(correctionName))
correctionType = CorrectionType.valueOf(correctionName);
+ }
}
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ if (Util.hasValue(correctionName)) {
+ correctionType = CorrectionType.valueOf(correctionName);
+ }
+ }
// a version with enumsets:
// // pre-conditions
diff --git a/src/main/java/rails/game/correct/MapCorrectionAction.java b/src/main/java/rails/game/correct/MapCorrectionAction.java
index c1e93d517..87933f32c 100644
--- a/src/main/java/rails/game/correct/MapCorrectionAction.java
+++ b/src/main/java/rails/game/correct/MapCorrectionAction.java
@@ -7,6 +7,7 @@
import com.google.common.base.Objects;
import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import rails.game.action.PossibleAction;
import rails.game.correct.MapCorrectionManager.*;
import net.sf.rails.game.BaseToken;
@@ -29,10 +30,14 @@
@Deprecated
public class MapCorrectionAction extends CorrectionAction {
- /** The Constant serialVersionUID. */
+ /**
+ * The Constant serialVersionUID.
+ */
public static final long serialVersionUID = 1L;
- /** Sequence: Indicates the enrichment of the action */
+ /**
+ * Sequence: Indicates the enrichment of the action
+ */
private transient ActionStep step = null;
private String stepName;
@@ -41,20 +46,28 @@ public class MapCorrectionAction extends CorrectionAction {
/* Conditions */
- /** Location: where to lay the tile */
+ /**
+ * Location: where to lay the tile
+ */
private transient MapHex location = null;
private String locationCoordinates;
- /** Tiles: which tile(s) to lay */
+ /**
+ * Tiles: which tile(s) to lay
+ */
private transient List tiles = null;
private String[] sTileIds;
// FIXME: Rewrite this with Rails1.x version flag
private int[] tileIds;
- /** Orientation: how to lay the tile */
+ /**
+ * Orientation: how to lay the tile
+ */
private int orientation;
- /** RelayBaseTokens: how to relay the base tokens */
+ /**
+ * RelayBaseTokens: how to relay the base tokens
+ */
private transient List tokensToRelay;
//private String[]tokensToRelayOwner;
private transient List stationsForRelay;
@@ -124,7 +137,7 @@ void setPossibleStations(Collection possibleStations) {
this.possibleStations = possibleStations;
}
- public int getOrientation(){
+ public int getOrientation() {
return orientation;
}
@@ -202,27 +215,64 @@ protected boolean equalsAs(PossibleAction pa, boolean asOption) {
if (asOption) return true;
// check asAction attributes
- MapCorrectionAction action = (MapCorrectionAction)pa;
+ MapCorrectionAction action = (MapCorrectionAction) pa;
return Objects.equal(this.location, action.location)
&& Objects.equal(this.tiles, action.tiles)
&& Objects.equal(this.orientation, action.orientation)
- ;
+ ;
}
@Override
- public String toString(){
+ public String toString() {
return super.toString() +
RailsObjects.stringHelper(this)
- .addToStringOnlyActed("location", location)
- .addToStringOnlyActed("tiles", tiles)
- .addToStringOnlyActed("orientation", orientation)
- ;
+ .addToStringOnlyActed("location", location)
+ .addToStringOnlyActed("tiles", tiles)
+ .addToStringOnlyActed("orientation", orientation)
+ ;
}
- /** Deserialize */
+ /**
+ * Deserialize
+ */
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(correctionName))
+ correctionType = CorrectionType.valueOf(correctionName);
+
+ if (Util.hasValue(stepName))
+ step = ActionStep.valueOf(stepName);
+
+ if (Util.hasValue(nextStepName))
+ nextStep = ActionStep.valueOf(nextStepName);
+
+ MapManager mmgr = getRoot().getMapManager();
+ if (Util.hasValue(locationCoordinates))
+ location = mmgr.getHex(locationCoordinates);
+
+ TileManager tmgr = getRoot().getTileManager();
+ if (sTileIds != null && sTileIds.length > 0) {
+ tiles = new ArrayList<>();
+ for (String sTileId : sTileIds) {
+ tiles.add(tmgr.getTile(sTileId));
+ }
+ }
+
+ // FIXME: Rewrite this with Rails1.x version flag
+ if (tileIds != null && tileIds.length > 0) {
+ tiles = new ArrayList<>();
+ for (int tileId : tileIds) {
+ tiles.add(tmgr.getTile(String.valueOf(tileId)));
+ }
+ }
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
if (Util.hasValue(correctionName))
correctionType = CorrectionType.valueOf(correctionName);
@@ -239,7 +289,7 @@ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundE
TileManager tmgr = getRoot().getTileManager();
if (sTileIds != null && sTileIds.length > 0) {
tiles = new ArrayList<>();
- for ( String sTileId : sTileIds ) {
+ for (String sTileId : sTileIds) {
tiles.add(tmgr.getTile(sTileId));
}
}
@@ -247,7 +297,7 @@ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundE
// FIXME: Rewrite this with Rails1.x version flag
if (tileIds != null && tileIds.length > 0) {
tiles = new ArrayList<>();
- for ( int tileId : tileIds ) {
+ for (int tileId : tileIds) {
tiles.add(tmgr.getTile(String.valueOf(tileId)));
}
}
diff --git a/src/main/java/rails/game/correct/OperatingCost.java b/src/main/java/rails/game/correct/OperatingCost.java
index e1afbfc63..aacf37a33 100644
--- a/src/main/java/rails/game/correct/OperatingCost.java
+++ b/src/main/java/rails/game/correct/OperatingCost.java
@@ -6,6 +6,7 @@
import com.google.common.base.Objects;
import net.sf.rails.game.RailsRoot;
+import net.sf.rails.util.GameLoader;
import rails.game.action.PossibleAction;
import rails.game.action.PossibleORAction;
import net.sf.rails.util.RailsObjects;
@@ -117,7 +118,18 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- if (Util.hasValue(companyName))
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(companyName))
company = getCompanyManager().getPublicCompany(companyName);
+ }
+ }
+
+ @Override
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ if (Util.hasValue(companyName)) {
+ company = getCompanyManager().getPublicCompany(companyName);
+ }
}
}
diff --git a/src/main/java/rails/game/specific/_1835/FoldIntoPrussian.java b/src/main/java/rails/game/specific/_1835/FoldIntoPrussian.java
index 144d40901..067f80c46 100644
--- a/src/main/java/rails/game/specific/_1835/FoldIntoPrussian.java
+++ b/src/main/java/rails/game/specific/_1835/FoldIntoPrussian.java
@@ -6,6 +6,7 @@
import java.util.Arrays;
import java.util.List;
+import net.sf.rails.util.GameLoader;
import org.jetbrains.annotations.NotNull;
import net.sf.rails.game.RailsRoot;
@@ -110,6 +111,33 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ Company company;
+ CompanyManager cmgr = getCompanyManager();
+
+ foldableCompanies = new ArrayList<>();
+ if (foldableCompanyNames != null) {
+ for (String name : foldableCompanyNames.split(",")) {
+ company = cmgr.getPublicCompany(name);
+ if (company == null) company = cmgr.getPrivateCompany(name);
+ if (company != null) foldableCompanies.add(company);
+ }
+ }
+ if (Util.hasValue(foldedCompanyNames)) {
+ foldedCompanies = new ArrayList<>();
+ for (String name : foldedCompanyNames.split(",")) {
+ company = cmgr.getPublicCompany(name);
+ if (company == null) company = cmgr.getPrivateCompany(name);
+ if (company != null) foldedCompanies.add(company);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
Company company;
CompanyManager cmgr = getCompanyManager();
@@ -130,5 +158,4 @@ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundE
}
}
}
-
}
diff --git a/src/main/java/rails/game/specific/_1837/SetHomeHexLocation.java b/src/main/java/rails/game/specific/_1837/SetHomeHexLocation.java
index c0833dd05..3201755fa 100644
--- a/src/main/java/rails/game/specific/_1837/SetHomeHexLocation.java
+++ b/src/main/java/rails/game/specific/_1837/SetHomeHexLocation.java
@@ -2,6 +2,7 @@
import com.google.common.base.Objects;
import net.sf.rails.game.*;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
import net.sf.rails.util.Util;
import rails.game.action.PossibleAction;
@@ -79,8 +80,18 @@ private String[] parseStationName (String name) {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- if (Util.hasValue(companyName))
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(companyName))
+ company = getCompanyManager().getPublicCompany(companyName);
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ if (Util.hasValue(companyName)) {
company = getCompanyManager().getPublicCompany(companyName);
+ }
}
public PublicCompany getCompany() {
diff --git a/src/main/java/rails/game/specific/_1880/ExchangeForCash.java b/src/main/java/rails/game/specific/_1880/ExchangeForCash.java
index f1c474246..543d431f5 100644
--- a/src/main/java/rails/game/specific/_1880/ExchangeForCash.java
+++ b/src/main/java/rails/game/specific/_1880/ExchangeForCash.java
@@ -8,8 +8,10 @@
import com.google.common.collect.ImmutableMap;
import net.sf.rails.game.PrivateCompany;
+import net.sf.rails.game.RailsRoot;
import net.sf.rails.game.TrainType;
import net.sf.rails.game.state.Owner;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
import net.sf.rails.util.Util;
import rails.game.action.PossibleAction;
@@ -108,6 +110,17 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(ownerName)) {
+ owner = getRoot().getPlayerManager().getPlayerByName(ownerName);
+ }
+ }
+ }
+
+ @Override
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
if (Util.hasValue(ownerName)) {
owner = getRoot().getPlayerManager().getPlayerByName(ownerName);
}
diff --git a/src/main/java/rails/game/specific/_1880/SetupNewPublicDetails_1880.java b/src/main/java/rails/game/specific/_1880/SetupNewPublicDetails_1880.java
index f484ba4de..65a9f788b 100644
--- a/src/main/java/rails/game/specific/_1880/SetupNewPublicDetails_1880.java
+++ b/src/main/java/rails/game/specific/_1880/SetupNewPublicDetails_1880.java
@@ -6,7 +6,9 @@
import com.google.common.base.Objects;
import net.sf.rails.game.PublicCompany;
+import net.sf.rails.game.RailsRoot;
import net.sf.rails.game.StartItem;
+import net.sf.rails.util.GameLoader;
import net.sf.rails.util.RailsObjects;
import net.sf.rails.util.Util;
import rails.game.action.PossibleAction;
@@ -45,8 +47,18 @@ public SetupNewPublicDetails_1880(StartItem startItem,
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- if (Util.hasValue(companyName))
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ if (Util.hasValue(companyName))
+ company = getCompanyManager().getPublicCompany(companyName);
+ }
+ }
+
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
+ if (Util.hasValue(companyName)) {
company = getCompanyManager().getPublicCompany(companyName);
+ }
}
public PublicCompany getCompany() {
diff --git a/src/main/java/rails/game/specific/_18EU/StartCompany_18EU.java b/src/main/java/rails/game/specific/_18EU/StartCompany_18EU.java
index d2fe38427..eeb44191d 100644
--- a/src/main/java/rails/game/specific/_18EU/StartCompany_18EU.java
+++ b/src/main/java/rails/game/specific/_18EU/StartCompany_18EU.java
@@ -168,21 +168,52 @@ public String toString() {
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
+ if (in instanceof GameLoader.RailsObjectInputStream) {
+ CompanyManager cmgr = root.getCompanyManager();
+ if (minorsToMergeNames != null) {
+ minorsToMerge = new ArrayList<>();
+ for (String name : minorsToMergeNames.split(",")) {
+ minorsToMerge.add(cmgr.getPublicCompany(name));
+ }
+ }
+ if (chosenMinorName != null) {
+ chosenMinor = cmgr.getPublicCompany(chosenMinorName);
+ }
+
+ MapManager mapManager = root.getMapManager();
+ if (availableHomeStationNames != null) {
+ availableHomeStations = new ArrayList<>();
+ for (String cityName : availableHomeStationNames.split(",")) {
+ String[] parts = parseStationName(cityName);
+ MapHex hex = mapManager.getHex(parts[0]);
+ int stationId = Integer.parseInt(parts[1]);
+ availableHomeStations.add(hex.getRelatedStop(stationId));
+ }
+ }
+ // force fetching of the selected home station to prevent a load compare issue during reload
+ getSelectedHomeStation();
+ }
+ }
+
+ @Override
+ public void applyRailsRoot(RailsRoot root) {
+ super.applyRailsRoot(root);
+
CompanyManager cmgr = root.getCompanyManager();
- if ( minorsToMergeNames != null ) {
+ if (minorsToMergeNames != null) {
minorsToMerge = new ArrayList<>();
- for ( String name : minorsToMergeNames.split(",") ) {
+ for (String name : minorsToMergeNames.split(",")) {
minorsToMerge.add(cmgr.getPublicCompany(name));
}
}
- if ( chosenMinorName != null ) {
+ if (chosenMinorName != null) {
chosenMinor = cmgr.getPublicCompany(chosenMinorName);
}
MapManager mapManager = root.getMapManager();
- if ( availableHomeStationNames != null ) {
+ if (availableHomeStationNames != null) {
availableHomeStations = new ArrayList<>();
- for ( String cityName : availableHomeStationNames.split(",") ) {
+ for (String cityName : availableHomeStationNames.split(",")) {
String[] parts = parseStationName(cityName);
MapHex hex = mapManager.getHex(parts[0]);
int stationId = Integer.parseInt(parts[1]);
diff --git a/src/test/java/net/sf/rails/test/TestGame.java b/src/test/java/net/sf/rails/test/TestGame.java
index 99f339662..b083d98ea 100644
--- a/src/test/java/net/sf/rails/test/TestGame.java
+++ b/src/test/java/net/sf/rails/test/TestGame.java
@@ -10,6 +10,7 @@
import net.sf.rails.game.RailsRoot;
import net.sf.rails.util.GameLoader;
+import net.sf.rails.util.XmlGameLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -96,7 +97,7 @@ protected void setUp() throws Exception {
if (gameFile.exists()) {
log.debug("Found gamefile at {}", gameFilename);
- GameLoader gameLoader = new GameLoader();
+ XmlGameLoader gameLoader = new XmlGameLoader();
if (gameLoader.createFromFile(gameFile)) {
testReport = gameLoader.getRoot().getReportManager().getReportBuffer().getAsList();
} else {
diff --git a/src/test/java/net/sf/rails/test/TestGameBuilder.java b/src/test/java/net/sf/rails/test/TestGameBuilder.java
index 4cf4d43fc..9f226db21 100644
--- a/src/test/java/net/sf/rails/test/TestGameBuilder.java
+++ b/src/test/java/net/sf/rails/test/TestGameBuilder.java
@@ -16,6 +16,7 @@
import net.sf.rails.game.RailsRoot;
import net.sf.rails.util.GameLoader;
+import net.sf.rails.util.XmlGameLoader;
import org.junit.runners.AllTests;
import org.junit.runner.RunWith;
@@ -55,7 +56,7 @@ private static void prepareGameReport(File gameFile, String reportFilename) {
RailsRoot root = null;
if (gameFile.exists()) {
System.out.println("Found game at " + gameFile.getAbsolutePath());
- GameLoader gameLoader = new GameLoader();
+ XmlGameLoader gameLoader = new XmlGameLoader();
if (gameLoader.createFromFile(gameFile)) {
root = gameLoader.getRoot();
}
diff --git a/src/test/resources/data/bugs/1830CF_obsoleteTrains.rails b/src/test/resources/data/bugs/1830CF_obsoleteTrains.rails
index 80446ead1..87f1c8f6c 100644
Binary files a/src/test/resources/data/bugs/1830CF_obsoleteTrains.rails and b/src/test/resources/data/bugs/1830CF_obsoleteTrains.rails differ
diff --git a/src/test/resources/data/bugs/1830_sell_Presidency2.rails b/src/test/resources/data/bugs/1830_sell_Presidency2.rails
index a8df22663..6164c2b28 100644
Binary files a/src/test/resources/data/bugs/1830_sell_Presidency2.rails and b/src/test/resources/data/bugs/1830_sell_Presidency2.rails differ
diff --git a/src/test/resources/data/bugs/1835_CorrectPrussianSharePriceinShareSellingRound.rails b/src/test/resources/data/bugs/1835_CorrectPrussianSharePriceinShareSellingRound.rails
index d028c7ee8..b1709aec7 100644
Binary files a/src/test/resources/data/bugs/1835_CorrectPrussianSharePriceinShareSellingRound.rails and b/src/test/resources/data/bugs/1835_CorrectPrussianSharePriceinShareSellingRound.rails differ
diff --git a/src/test/resources/data/bugs/1835_Issue129done.rails b/src/test/resources/data/bugs/1835_Issue129done.rails
index 4f29b1d1f..c71a78629 100644
Binary files a/src/test/resources/data/bugs/1835_Issue129done.rails and b/src/test/resources/data/bugs/1835_Issue129done.rails differ
diff --git a/src/test/resources/data/bugs/1835_changePresidentAtStart.rails b/src/test/resources/data/bugs/1835_changePresidentAtStart.rails
index a1d91f09f..368f7f642 100644
Binary files a/src/test/resources/data/bugs/1835_changePresidentAtStart.rails and b/src/test/resources/data/bugs/1835_changePresidentAtStart.rails differ
diff --git a/src/test/resources/data/bugs/1856_Bridge+TunnelBonusBug.rails b/src/test/resources/data/bugs/1856_Bridge+TunnelBonusBug.rails
index a2c5b9545..1fb7dea21 100644
Binary files a/src/test/resources/data/bugs/1856_Bridge+TunnelBonusBug.rails and b/src/test/resources/data/bugs/1856_Bridge+TunnelBonusBug.rails differ
diff --git a/src/test/resources/data/bugs/1856_tokens.rails b/src/test/resources/data/bugs/1856_tokens.rails
index 02ccc1eee..840ec215d 100644
Binary files a/src/test/resources/data/bugs/1856_tokens.rails and b/src/test/resources/data/bugs/1856_tokens.rails differ
diff --git a/src/test/resources/data/bugs/1889_presidentContribution.rails b/src/test/resources/data/bugs/1889_presidentContribution.rails
index 7ddb0ffa0..8c6c90354 100644
Binary files a/src/test/resources/data/bugs/1889_presidentContribution.rails and b/src/test/resources/data/bugs/1889_presidentContribution.rails differ
diff --git a/src/test/resources/data/real/1830_B.rails b/src/test/resources/data/real/1830_B.rails
index c1bb51e48..7401e085c 100644
Binary files a/src/test/resources/data/real/1830_B.rails and b/src/test/resources/data/real/1830_B.rails differ
diff --git a/src/test/resources/data/real/1835_Forced_Selling_PR_5_Shares.rails b/src/test/resources/data/real/1835_Forced_Selling_PR_5_Shares.rails
index 54d6cafb5..9935d1e39 100644
Binary files a/src/test/resources/data/real/1835_Forced_Selling_PR_5_Shares.rails and b/src/test/resources/data/real/1835_Forced_Selling_PR_5_Shares.rails differ
diff --git a/src/test/resources/data/real/1835_KoIT3.rails b/src/test/resources/data/real/1835_KoIT3.rails
index 253d01841..b7e797dd0 100644
Binary files a/src/test/resources/data/real/1835_KoIT3.rails and b/src/test/resources/data/real/1835_KoIT3.rails differ
diff --git a/src/test/resources/data/real/1835_Stoll_12.rails b/src/test/resources/data/real/1835_Stoll_12.rails
index 981f36665..1539cf12b 100644
Binary files a/src/test/resources/data/real/1835_Stoll_12.rails and b/src/test/resources/data/real/1835_Stoll_12.rails differ
diff --git a/src/test/resources/data/real/1856_A.rails b/src/test/resources/data/real/1856_A.rails
index 6371551ee..d56d7d3b2 100644
Binary files a/src/test/resources/data/real/1856_A.rails and b/src/test/resources/data/real/1856_A.rails differ
diff --git a/src/test/resources/data/real/1856_CGR-10Shares-Test.rails b/src/test/resources/data/real/1856_CGR-10Shares-Test.rails
index 309bfca40..55f6f128e 100644
Binary files a/src/test/resources/data/real/1856_CGR-10Shares-Test.rails and b/src/test/resources/data/real/1856_CGR-10Shares-Test.rails differ
diff --git a/src/test/resources/data/real/1880_ATG1.rails b/src/test/resources/data/real/1880_ATG1.rails
index b7d89b187..11503c718 100644
Binary files a/src/test/resources/data/real/1880_ATG1.rails and b/src/test/resources/data/real/1880_ATG1.rails differ
diff --git a/src/test/resources/data/real/1889_A.rails b/src/test/resources/data/real/1889_A.rails
index 24cabfd90..6807040d3 100644
Binary files a/src/test/resources/data/real/1889_A.rails and b/src/test/resources/data/real/1889_A.rails differ
diff --git a/src/test/resources/data/real/1889_B.rails b/src/test/resources/data/real/1889_B.rails
index 6d0aff534..383f0bc91 100644
Binary files a/src/test/resources/data/real/1889_B.rails and b/src/test/resources/data/real/1889_B.rails differ
diff --git a/src/test/resources/data/real/1889_C.rails b/src/test/resources/data/real/1889_C.rails
index 0ca98e67a..dce6546f3 100644
Binary files a/src/test/resources/data/real/1889_C.rails and b/src/test/resources/data/real/1889_C.rails differ
diff --git a/src/test/resources/data/real/18AL_A.rails b/src/test/resources/data/real/18AL_A.rails
index 3b8b414eb..091ddb9fa 100644
Binary files a/src/test/resources/data/real/18AL_A.rails and b/src/test/resources/data/real/18AL_A.rails differ
diff --git a/src/test/resources/data/real/18EU_A.rails b/src/test/resources/data/real/18EU_A.rails
index 219e76c8f..59e8944b8 100644
Binary files a/src/test/resources/data/real/18EU_A.rails and b/src/test/resources/data/real/18EU_A.rails differ
diff --git a/src/test/resources/data/real/18EU_B.rails b/src/test/resources/data/real/18EU_B.rails
index 60a48203f..ffe4217a0 100644
Binary files a/src/test/resources/data/real/18EU_B.rails and b/src/test/resources/data/real/18EU_B.rails differ
diff --git a/src/test/resources/data/test/1830_5forDtrainExchange.rails b/src/test/resources/data/test/1830_5forDtrainExchange.rails
index 4ba0154fd..2c9b547e4 100644
Binary files a/src/test/resources/data/test/1830_5forDtrainExchange.rails and b/src/test/resources/data/test/1830_5forDtrainExchange.rails differ
diff --git a/src/test/resources/data/test/1830_Auction_Test.rails b/src/test/resources/data/test/1830_Auction_Test.rails
index a220fa96b..735a39549 100644
Binary files a/src/test/resources/data/test/1830_Auction_Test.rails and b/src/test/resources/data/test/1830_Auction_Test.rails differ
diff --git a/src/test/resources/data/test/1830_SellFullPresCert.rails b/src/test/resources/data/test/1830_SellFullPresCert.rails
index d5e2a353e..4a20e3657 100644
Binary files a/src/test/resources/data/test/1830_SellFullPresCert.rails and b/src/test/resources/data/test/1830_SellFullPresCert.rails differ
diff --git a/src/test/resources/data/test/1830_SellHalfPresCert.rails b/src/test/resources/data/test/1830_SellHalfPresCert.rails
index bfa70c55c..e0fb78006 100644
Binary files a/src/test/resources/data/test/1830_SellHalfPresCert.rails and b/src/test/resources/data/test/1830_SellHalfPresCert.rails differ
diff --git a/src/test/resources/data/test/1830_ShareSelling_Test.rails b/src/test/resources/data/test/1830_ShareSelling_Test.rails
index ac8d57656..55c7d0d5a 100644
Binary files a/src/test/resources/data/test/1830_ShareSelling_Test.rails and b/src/test/resources/data/test/1830_ShareSelling_Test.rails differ
diff --git a/src/test/resources/data/test/1835_AfterBankruptcy.rails b/src/test/resources/data/test/1835_AfterBankruptcy.rails
index 8dce354c0..896407e2d 100644
Binary files a/src/test/resources/data/test/1835_AfterBankruptcy.rails and b/src/test/resources/data/test/1835_AfterBankruptcy.rails differ
diff --git a/src/test/resources/data/test/1835_AfterEmergency1.rails b/src/test/resources/data/test/1835_AfterEmergency1.rails
index 3bd654a52..49672f261 100644
Binary files a/src/test/resources/data/test/1835_AfterEmergency1.rails and b/src/test/resources/data/test/1835_AfterEmergency1.rails differ
diff --git a/src/test/resources/data/test/1835_AfterEmergency2d.rails b/src/test/resources/data/test/1835_AfterEmergency2d.rails
index ad599132d..04f390466 100644
Binary files a/src/test/resources/data/test/1835_AfterEmergency2d.rails and b/src/test/resources/data/test/1835_AfterEmergency2d.rails differ
diff --git a/src/test/resources/data/test/1835_Correct_Sell_Pass.rails b/src/test/resources/data/test/1835_Correct_Sell_Pass.rails
index d7c998733..0ac258df9 100644
Binary files a/src/test/resources/data/test/1835_Correct_Sell_Pass.rails and b/src/test/resources/data/test/1835_Correct_Sell_Pass.rails differ
diff --git a/src/test/resources/data/test/1835_SellDoubleShare.rails b/src/test/resources/data/test/1835_SellDoubleShare.rails
index 2cf33e39c..4b9d2c67a 100644
Binary files a/src/test/resources/data/test/1835_SellDoubleShare.rails and b/src/test/resources/data/test/1835_SellDoubleShare.rails differ
diff --git a/src/test/resources/data/test/1835_ShareSelling_Test.rails b/src/test/resources/data/test/1835_ShareSelling_Test.rails
index b1b6e3447..af0014f76 100644
Binary files a/src/test/resources/data/test/1835_ShareSelling_Test.rails and b/src/test/resources/data/test/1835_ShareSelling_Test.rails differ
diff --git a/src/test/resources/data/test/1837v1_SR5.rails b/src/test/resources/data/test/1837v1_SR5.rails
index 93ca57b35..74209e72f 100644
Binary files a/src/test/resources/data/test/1837v1_SR5.rails and b/src/test/resources/data/test/1837v1_SR5.rails differ
diff --git a/src/test/resources/data/test/1837v2_SR4.rails b/src/test/resources/data/test/1837v2_SR4.rails
index baecd8457..ac5ac9e37 100644
Binary files a/src/test/resources/data/test/1837v2_SR4.rails and b/src/test/resources/data/test/1837v2_SR4.rails differ
diff --git a/src/test/resources/data/test/1851_Late.rails b/src/test/resources/data/test/1851_Late.rails
index 175ba7223..b7ddccc2a 100644
Binary files a/src/test/resources/data/test/1851_Late.rails and b/src/test/resources/data/test/1851_Late.rails differ
diff --git a/src/test/resources/data/test/18EU_AfterBankruptcy1.rails b/src/test/resources/data/test/18EU_AfterBankruptcy1.rails
index 53bb6dd6b..1869b033c 100644
Binary files a/src/test/resources/data/test/18EU_AfterBankruptcy1.rails and b/src/test/resources/data/test/18EU_AfterBankruptcy1.rails differ
diff --git a/src/test/resources/data/test/18EU_AfterBankruptcy2.rails b/src/test/resources/data/test/18EU_AfterBankruptcy2.rails
index 16c70d9d4..00f2220ab 100644
Binary files a/src/test/resources/data/test/18EU_AfterBankruptcy2.rails and b/src/test/resources/data/test/18EU_AfterBankruptcy2.rails differ
diff --git a/src/test/resources/data/test/18Scan_AfterBankruptcy1.rails b/src/test/resources/data/test/18Scan_AfterBankruptcy1.rails
index e8c1a814a..e77627534 100644
Binary files a/src/test/resources/data/test/18Scan_AfterBankruptcy1.rails and b/src/test/resources/data/test/18Scan_AfterBankruptcy1.rails differ
diff --git a/src/test/resources/data/test/18Scan_AfterBankruptcy2.rails b/src/test/resources/data/test/18Scan_AfterBankruptcy2.rails
index 20428c452..360546ee8 100644
Binary files a/src/test/resources/data/test/18Scan_AfterBankruptcy2.rails and b/src/test/resources/data/test/18Scan_AfterBankruptcy2.rails differ
diff --git a/src/test/resources/data/test/18Scan_Final.rails b/src/test/resources/data/test/18Scan_Final.rails
index 90f818122..f776e6e5f 100644
Binary files a/src/test/resources/data/test/18Scan_Final.rails and b/src/test/resources/data/test/18Scan_Final.rails differ
diff --git a/src/test/resources/data/test/SOH_AfterBankruptcy.rails b/src/test/resources/data/test/SOH_AfterBankruptcy.rails
index 520e1af30..d07c38364 100644
Binary files a/src/test/resources/data/test/SOH_AfterBankruptcy.rails and b/src/test/resources/data/test/SOH_AfterBankruptcy.rails differ
diff --git a/src/test/resources/data/test/SOH_AfterEmergency.rails b/src/test/resources/data/test/SOH_AfterEmergency.rails
index e57169549..c1ab713e6 100644
Binary files a/src/test/resources/data/test/SOH_AfterEmergency.rails and b/src/test/resources/data/test/SOH_AfterEmergency.rails differ
diff --git a/src/test/resources/data/test/SOH_P126_Final.rails b/src/test/resources/data/test/SOH_P126_Final.rails
index eb4b795eb..12353006e 100644
Binary files a/src/test/resources/data/test/SOH_P126_Final.rails and b/src/test/resources/data/test/SOH_P126_Final.rails differ
diff --git a/src/test/resources/data/test/SOH_P3457_Final.rails b/src/test/resources/data/test/SOH_P3457_Final.rails
index f66a3c24d..d2219541b 100644
Binary files a/src/test/resources/data/test/SOH_P3457_Final.rails and b/src/test/resources/data/test/SOH_P3457_Final.rails differ