package ini.trakem2.display;
import ini.trakem2.utils.History;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class TransformationStep implements History.Step<Displayable> {
final HashMap<Displayable,AffineTransform> ht;
TransformationStep(final HashMap<Displayable,AffineTransform> ht) {
this.ht = ht;
}
public List<Displayable> remove(final long id) {
final List<Displayable> al = new ArrayList<Displayable>();
for (Iterator<Displayable> it = ht.keySet().iterator(); it.hasNext(); ) {
final Displayable d = it.next();
if (d.getId() == id) {
it.remove();
}
al.add(d);
}
return al;
}
public boolean isEmpty() {
return ht.isEmpty();
}
public boolean isIdentical(final History.Step<?> step) {
if (step.getClass() != TransformationStep.class) return false;
final HashMap<Displayable,AffineTransform> m = ((TransformationStep)step).ht;
// cheap test:
if (m.size() != this.ht.size()) return false;
// Check each:
for (final Map.Entry<Displayable,AffineTransform> e : m.entrySet()) {
final AffineTransform aff = this.ht.get(e.getKey());
if (null == aff) return false; // at least one Displayable is missing
if (!aff.equals(e.getValue())) return false; // at least one Displayable has a different AffineTransform
}
return true;
}
}