package games.strategy.engine.data.changefactory;
import java.util.ArrayList;
import java.util.Collection;
import games.strategy.engine.data.Change;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.Unit;
import games.strategy.engine.data.UnitCollection;
import games.strategy.engine.data.UnitHolder;
class RemoveUnits extends Change {
private static final long serialVersionUID = -6410444472951010568L;
private final String m_name;
private final Collection<Unit> m_units;
private final String m_type;
RemoveUnits(final UnitCollection collection, final Collection<Unit> units) {
this(collection.getHolder().getName(), collection.getHolder().getType(), units);
}
RemoveUnits(final String name, final String type, final Collection<Unit> units) {
m_units = new ArrayList<>(units);
m_name = name;
m_type = type;
}
@Override
public Change invert() {
return new AddUnits(m_name, m_type, m_units);
}
@Override
protected void perform(final GameData data) {
final UnitHolder holder = data.getUnitHolder(m_name, m_type);
if (!holder.getUnits().containsAll(m_units)) {
throw new IllegalStateException("Not all units present in:" + m_name + ". Trying to remove:" + m_units
+ " present:" + holder.getUnits().getUnits());
}
holder.getUnits().removeAllUnits(m_units);
}
@Override
public String toString() {
return "Remove unit change. Remove from:" + m_name + " units:" + m_units;
}
}