package games.strategy.engine.data.changefactory;
import games.strategy.engine.data.Change;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.data.Territory;
/**
* Changes ownership of a territory.
*/
class OwnerChange extends Change {
private static final long serialVersionUID = -5938125380623744929L;
/**
* Either new or old owner can be null.
*/
private final String m_old;
private final String m_new;
private final String m_territory;
/**
* newOwner can be null.
*/
OwnerChange(final Territory territory, final PlayerID newOwner) {
m_territory = territory.getName();
m_new = getName(newOwner);
m_old = getName(territory.getOwner());
}
private OwnerChange(final String name, final String newOwner, final String oldOwner) {
m_territory = name;
m_new = newOwner;
m_old = oldOwner;
}
private String getName(final PlayerID player) {
if (player == null) {
return null;
}
return player.getName();
}
private PlayerID getPlayerID(final String name, final GameData data) {
if (name == null) {
return null;
}
return data.getPlayerList().getPlayerID(name);
}
@Override
public Change invert() {
return new OwnerChange(m_territory, m_old, m_new);
}
@Override
protected void perform(final GameData data) {
// both names could be null
data.getMap().getTerritory(m_territory).setOwner(getPlayerID(m_new, data));
}
@Override
public String toString() {
return m_new + " takes " + m_territory + " from " + m_old;
}
}