blob: 95ce90915c11af3d1fce42739e74bf74f1ff526c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2012 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.ui.editparts.policies;
import org.eclipse.bpel.model.Activity;
import org.eclipse.bpel.ui.GraphicalBPELRootEditPart;
import org.eclipse.bpel.ui.Messages;
import org.eclipse.bpel.ui.commands.CompoundCommand;
import org.eclipse.bpel.ui.commands.InsertInContainerCommand;
import org.eclipse.bpel.ui.commands.SetConstraintCommand;
import org.eclipse.bpel.ui.commands.SetNameAndDirectEditCommand;
import org.eclipse.bpel.ui.editparts.BPELEditPart;
import org.eclipse.bpel.ui.editparts.FlowEditPart;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.XYLayoutEditPolicy;
/**
* GEF Edit Policy used to place bpel objects at specific XY locations
*/
public abstract class BPELXYLayoutEditPolicy extends XYLayoutEditPolicy {
// the common guts of the AddCommand
@Override
protected Command createAddCommand(EditPart childEditPart, Object constraint) {
Activity activity = (Activity)childEditPart.getModel();
Rectangle rect = (Rectangle) constraint;
Command add = createAddCommand((EObject)getHost().getModel(), activity);
add.setLabel(Messages.BPELXYLayoutEditPolicy_Add_Part_1);
add.setDebugLabel("BPEL Editor CreateInListCommand"); //$NON-NLS-1$
// TODO: what does the following comment mean?
// we need to check if we should preserve the size when adding that child
rect.setSize(-1, -1);
SetConstraintCommand setConstraint = new SetConstraintCommand(activity, rect.getLocation(), null);
setConstraint.setLabel(Messages.BPELXYLayoutEditPolicy_Move_Part_2);
setConstraint.setDebugLabel("BPEL Editor setConstraintCommand"); //$NON-NLS-1$
return add.chain(setConstraint);
}
protected Command createAddCommand(EObject parent, EObject child) {
return new InsertInContainerCommand(parent, child, null);
}
@Override
protected Command createChangeConstraintCommand(EditPart child, Object constraint) {
return new SetConstraintCommand(
(Activity)child.getModel(), ((Rectangle)constraint).getLocation(), null);
}
protected Command createCreateCommand(EObject parent, final EObject child) {
CompoundCommand c = new CompoundCommand();
c.add(new InsertInContainerCommand(parent, child, null));
c.add(new SetNameAndDirectEditCommand(child, getHost().getViewer()));
return c;
}
@Override
protected Command getDeleteDependantCommand(Request request) {
return null;
}
@Override
protected Command getOrphanChildrenCommand(Request request) {
return null;
}
@Override
protected EditPolicy createChildEditPolicy(EditPart child){
//if (child instanceof FlowEditPart)
// return new org.eclipse.gef.editpolicies.ResizableEditPolicy();
return null;
}
@Override
public EditPart getTargetEditPart(Request request) {
// this policy only works for the BPEL Editor itself, not the outline
if (getHost().getRoot() instanceof GraphicalBPELRootEditPart) {
return super.getTargetEditPart(request);
}
return null;
}
/**
* TODO: THIS IS A TOTAL HACK
*/
@Override
protected Rectangle getCurrentConstraintFor(GraphicalEditPart child) {
Rectangle result = super.getCurrentConstraintFor(child);
if (result == null && child instanceof BPELEditPart && (getHost() instanceof FlowEditPart)) {
// We need a constraint but we don't have one.
// Currently, calling refreshVisuals() on the child causes it to
// poof up a constraint for itself if its parent is a flow and the
// constraint is missing. Ugly hack.
((BPELEditPart)child).refreshVisuals();
result = super.getCurrentConstraintFor(child);
}
return result;
}
}