/*******************************************************************************
* Copyright (c) 2010-2015 Henshin developers. All rights reserved.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* TU Berlin, University of Luxembourg, SES S.A.
*******************************************************************************/
package de.tub.tfs.henshin.tggeditor.commands.move;
import java.util.List;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import de.tub.tfs.henshin.tgg.TNode;
import de.tub.tfs.henshin.tggeditor.editparts.graphical.TNodeObjectEditPart;
public class MoveManyNodeObjectsCommand extends CompoundCommand {
private List<?> ep;
private ChangeBoundsRequest req;
private int deltaX;
private int deltaY;
/**
* creates a move command for every node object
*
* @param editparts list of all elements to move
* @param request the change bounds request
*/
public MoveManyNodeObjectsCommand(List<?> editparts, ChangeBoundsRequest request) {
super();
this.ep = editparts;
this.req = request;
this.deltaX = request.getMoveDelta().x;
this.deltaY = request.getMoveDelta().y;
}
@Override
public void execute() {
for (Object obj : ep) {
TNode node = (TNode) ((EditPart)obj).getModel();
node.eSetDeliver(false);
((TNode) node).setComponent(null);
}
for (Object obj : ep) {
TNode node = (TNode) ((EditPart)obj).getModel();
if (deltaX != 0)
node.setX(node.getX()+deltaX);
if (deltaY != 0)
node.setY(node.getY()+deltaY);
}
for (Object obj : ep) {
TNode node = (TNode) ((EditPart)obj).getModel();
node.eSetDeliver(true);
((TNode) node).setComponent(null);
}
}
@Override
public void undo() {
for (Object obj : ep) {
TNode node = (TNode) ((EditPart)obj).getModel();
node.eSetDeliver(false);
((TNode) node).setComponent(null);
}
for (Object obj : ep) {
TNode node = (TNode) ((EditPart)obj).getModel();
if (deltaX != 0)
node.setX(node.getX()-deltaX);
if (deltaY != 0)
node.setY(node.getY()-deltaY);
}
for (Object obj : ep) {
TNode node = (TNode) ((EditPart)obj).getModel();
node.eSetDeliver(true);
((TNode) node).setComponent(null);
}
}
}