package info.limpet.stackedcharts.ui.editor.commands; import info.limpet.stackedcharts.model.DependentAxis; import info.limpet.stackedcharts.model.impl.ChartImpl; import org.eclipse.emf.common.util.EList; import org.eclipse.gef.commands.Command; public class MoveAxisCommand extends Command { /** * convenience class to find the relevant list (min/max axes) for the supplied axis * * @param axis * @return */ public static EList<DependentAxis> getHostListFor(final DependentAxis axis) { final ChartImpl chart = (ChartImpl) axis.eContainer(); // ok, find out which item this is in final EList<DependentAxis> minAxes = chart.getMinAxes(); final EList<DependentAxis> maxAxes = chart.getMaxAxes(); // check if max has it if (maxAxes.contains(axis)) { return maxAxes; } return minAxes; } private final DependentAxis axis; private final EList<DependentAxis> destination; private final EList<DependentAxis> source; private final int index; private final int redoIndex; public MoveAxisCommand(final EList<DependentAxis> destination, final DependentAxis axis) { this(destination, axis, -1); } public MoveAxisCommand(final EList<DependentAxis> destination, final DependentAxis axis, final int index) { this.axis = axis; this.destination = destination; this.index = index; source = getHostListFor(axis); redoIndex = source.indexOf(axis); } @Override public void execute() { source.remove(axis); if (index > -1) { destination.add(index, axis); } else { destination.add(axis); } } @Override public void undo() { destination.remove(axis); if (redoIndex != -1) { source.add(redoIndex, axis); } else { source.add(axis); } } }