ProjectAres/PGM/src/main/java/tc/oc/pgm/rotation/RemoveAllTransformation.java

51 lines
1.3 KiB
Java

package tc.oc.pgm.rotation;
import java.util.List;
import javax.annotation.Nonnull;
import tc.oc.pgm.map.PGMMap;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
/**
* Transformation that removes all instances of a specific map from the
* rotation.
*/
public class RemoveAllTransformation implements RotationTransformation {
public RemoveAllTransformation(@Nonnull PGMMap map) {
Preconditions.checkNotNull(map, "map");
this.map = map;
}
public @Nonnull PGMMap getRemovedMap() {
return this.map;
}
@Override
public @Nonnull RotationState apply(@Nonnull RotationState state) {
Preconditions.checkNotNull(state, "rotation state");
List<PGMMap> maps = Lists.newArrayList(state.getMaps());
int nextId = state.getNextId();
for(int i = 0; i < maps.size() && maps.size() > 1; i++) {
if(maps.get(i) == this.map) {
// need to remove
maps.remove(i);
if(nextId >= maps.size()) {
nextId = 0;
} else if (i < nextId) {
nextId--;
}
}
}
return new RotationState(maps, nextId);
}
protected final @Nonnull PGMMap map;
}