package games.strategy.triplea.delegate;
import java.util.ArrayList;
import java.util.Collection;
import games.strategy.engine.data.Change;
import games.strategy.engine.data.CompositeChange;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.data.Territory;
import games.strategy.engine.data.Unit;
import games.strategy.engine.data.changefactory.ChangeFactory;
import games.strategy.triplea.Constants;
import games.strategy.triplea.TripleAUnit;
import games.strategy.triplea.attachments.TerritoryAttachment;
/**
* Tracks the original owner of things.
* Needed since territories and factories must revert
* to their original owner when captured from the enemy.
*/
public class OriginalOwnerTracker implements java.io.Serializable {
private static final long serialVersionUID = 8462432412106180906L;
/** Creates new OriginalOwnerTracker. */
public OriginalOwnerTracker() {}
public static Change addOriginalOwnerChange(final Territory t, final PlayerID player) {
return ChangeFactory.attachmentPropertyChange(TerritoryAttachment.get(t), player, Constants.ORIGINAL_OWNER);
}
public static Change addOriginalOwnerChange(final Unit unit, final PlayerID player) {
return ChangeFactory.unitPropertyChange(unit, player, Constants.ORIGINAL_OWNER);
}
public static Change addOriginalOwnerChange(final Collection<Unit> units, final PlayerID player) {
final CompositeChange change = new CompositeChange();
for (final Unit unit : units) {
change.add(addOriginalOwnerChange(unit, player));
}
return change;
}
public static PlayerID getOriginalOwner(final Unit unit) {
return TripleAUnit.get(unit).getOriginalOwner();
}
public static PlayerID getOriginalOwner(final Territory t) {
final TerritoryAttachment ta = TerritoryAttachment.get(t);
if (ta == null) {
return null;
}
return ta.getOriginalOwner();
}
public static Collection<Territory> getOriginallyOwned(final GameData data, final PlayerID player) {
final Collection<Territory> rVal = new ArrayList<>();
for (final Territory t : data.getMap()) {
PlayerID originalOwner = getOriginalOwner(t);
if (originalOwner == null) {
originalOwner = PlayerID.NULL_PLAYERID;
}
if (originalOwner.equals(player)) {
rVal.add(t);
}
}
return rVal;
}
}