package com.windowtester.examples.gef.uml.commands;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import com.windowtester.examples.gef.uml.model.ClassElement;
/**
* A command to resize or move a class element.
* <p>
* Copyright (c) 2007, Instantiations, Inc.<br>
* All Rights Reserved
*
* @author Phil Quitslund
*
*/
public class ClassElementSetConstraintCommand extends Command {
private final ClassElement _elem;
private final ChangeBoundsRequest _request;
private final Rectangle _newBounds;
private Rectangle _oldBounds;
public ClassElementSetConstraintCommand(ClassElement elem, ChangeBoundsRequest req, Rectangle newBounds) {
if (elem == null || req == null || newBounds == null) {
throw new IllegalArgumentException();
}
_elem = elem;
_request = req;
_newBounds = newBounds;
}
public ChangeBoundsRequest getRequest() {
return _request;
}
public Rectangle getNewBounds() {
return _newBounds;
}
public ClassElement getElement() {
return _elem;
}
/*
* (non-Javadoc)
* @see org.eclipse.gef.commands.Command#canExecute()
*/
public boolean canExecute() {
Object type = getRequest().getType();
// make sure the Request is of a type we support:
return (RequestConstants.REQ_MOVE.equals(type)
|| RequestConstants.REQ_MOVE_CHILDREN.equals(type)
|| RequestConstants.REQ_RESIZE.equals(type) || RequestConstants.REQ_RESIZE_CHILDREN
.equals(type));
}
/*
* (non-Javadoc)
* @see org.eclipse.gef.commands.Command#execute()
*/
public void execute() {
setOldBounds(new Rectangle(getElement().getLocation(), getDimensions(getElement())));
redo();
}
private Dimension getDimensions(ClassElement element) {
Dimension size = element.getSize();
if (size == null)
size = new Dimension();
return size;
}
/*
* (non-Javadoc)
* @see org.eclipse.gef.commands.Command#redo()
*/
public void redo() {
//getElement().setSize(getNewBounds().getSize());
getElement().setLocation(getNewBounds().getLocation());
}
/*
* (non-Javadoc)
* @see org.eclipse.gef.commands.Command#undo()
*/
public void undo() {
//getElement().setSize(_oldBounds.getSize());
getElement().setLocation(getOldBounds().getLocation());
}
private void setOldBounds(Rectangle oldBounds) {
_oldBounds = oldBounds;
}
private Rectangle getOldBounds() {
return _oldBounds;
}
}