package games.strategy.engine.data.changefactory;
import java.util.Map;
import games.strategy.engine.data.BattleRecordsList;
import games.strategy.engine.data.Change;
import games.strategy.engine.data.GameData;
import games.strategy.triplea.delegate.dataObjects.BattleRecords;
class AddBattleRecordsChange extends Change {
private static final long serialVersionUID = -6927678548172402611L;
private final BattleRecords m_recordsToAdd;
private final int m_round;
AddBattleRecordsChange(final BattleRecords battleRecords, final GameData data) {
m_round = data.getSequence().getRound();
// make a copy because this is only done once, and only externally from battle
// tracker, and the source will be cleared (battle tracker clears out the records
// each turn)
m_recordsToAdd = new BattleRecords(battleRecords);
}
AddBattleRecordsChange(final BattleRecords battleRecords, final int round) {
m_round = round;
// do not make a copy, this is only called from RemoveBattleRecordsChange, and we make a copy when we
// perform, so no need for another copy.
m_recordsToAdd = battleRecords;
}
@Override
protected void perform(final GameData data) {
final Map<Integer, BattleRecords> currentRecords = data.getBattleRecordsList().getBattleRecordsMap();
// make a copy because otherwise ours will be
// cleared when we RemoveBattleRecordsChange
BattleRecordsList.addRecords(currentRecords, m_round, new BattleRecords(m_recordsToAdd));
}
@Override
public Change invert() {
return new RemoveBattleRecordsChange(m_recordsToAdd, m_round);
}
@Override
public String toString() {
// This only occurs when serialization went badly, or something cannot be serialized.
if (m_recordsToAdd == null) {
throw new IllegalStateException(
"Records cannot be null (most likely caused by improper or impossible serialization): " + m_recordsToAdd);
}
return "Adding Battle Records: " + m_recordsToAdd;
}
}