package com.xrosstools.xunit.editor.commands; import org.eclipse.gef.commands.Command; import com.xrosstools.xunit.editor.model.BaseLoopNode; import com.xrosstools.xunit.editor.model.UnitNode; import com.xrosstools.xunit.editor.model.UnitNodeContainer; public class DeleteNodeCommand extends Command { private Object parent; private UnitNode unit; int index = -1; boolean removed = false; public DeleteNodeCommand(Object parent, UnitNode unit){ this.parent = parent; this.unit = unit; } public void execute() { if(parent instanceof UnitNodeContainer){ deleteFromContainer(); } if(parent instanceof BaseLoopNode){ deleteFromLoop(); } } public String getLabel() { return "delete node"; } public void redo() { execute(); } public void undo() { if(parent instanceof UnitNodeContainer){ addToContainer(); } if(parent instanceof BaseLoopNode){ addToLoop(); } } private void deleteFromContainer(){ index = ((UnitNodeContainer)parent).indexOf(unit); ((UnitNodeContainer)parent).remove(unit); } private void addToContainer(){ ((UnitNodeContainer)parent).add(index, unit); } private void deleteFromLoop(){ BaseLoopNode loop = (BaseLoopNode)parent; if(unit == loop.getUnit()){ loop.setUnit(null); removed = true; }else removed = false; } private void addToLoop(){ if(removed) ((BaseLoopNode)parent).setUnit(unit); } }