001/**
002 * 
003 */
004package icy.sequence.edit;
005
006import icy.roi.ROI;
007import icy.sequence.Sequence;
008
009import java.util.Collection;
010
011import javax.swing.undo.CannotRedoException;
012import javax.swing.undo.CannotUndoException;
013
014/**
015 * ROI group replace Sequence edit event.
016 * 
017 * @author Stephane
018 */
019public class ROIReplacesSequenceEdit extends AbstractROIsSequenceEdit
020{
021    final Collection<ROI> oldRois;
022
023    public ROIReplacesSequenceEdit(Sequence sequence, Collection<ROI> oldRois, Collection<ROI> newRois, String name)
024    {
025        super(sequence, newRois, name);
026
027        this.oldRois = oldRois;
028    }
029
030    public ROIReplacesSequenceEdit(Sequence sequence, Collection<ROI> oldRois, Collection<ROI> newRois)
031    {
032        this(sequence, oldRois, newRois, (newRois.size() > 1) ? "ROI group replaced" : "ROI replaced");
033    }
034
035    @Override
036    public void undo() throws CannotUndoException
037    {
038        super.undo();
039
040        final Sequence sequence = getSequence();
041
042        sequence.beginUpdate();
043        try
044        {
045            for (ROI roi : getROIs())
046                sequence.removeROI(roi, false);
047            for (ROI roi : oldRois)
048                sequence.addROI(roi, false);
049        }
050        finally
051        {
052            sequence.endUpdate();
053        }
054    }
055
056    @Override
057    public void redo() throws CannotRedoException
058    {
059        super.redo();
060
061        final Sequence sequence = getSequence();
062
063        sequence.beginUpdate();
064        try
065        {
066            for (ROI roi : oldRois)
067                sequence.removeROI(roi, false);
068            for (ROI roi : getROIs())
069                sequence.addROI(roi, false);
070        }
071        finally
072        {
073            sequence.endUpdate();
074        }
075    }
076}