blob: e4140d6b64bcecb4bca34a2fb9ac9bcd7dc0fb4e [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.util;
import org.eclipse.bpel.model.Activity;
import org.eclipse.bpel.ui.GraphicalBPELRootEditPart;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
/**
* A NonclippingXYLayout that knows how to re-create missing constraints from a model object.
*
*/
public class FlowXYLayout extends NonclippingXYLayout {
EditPart flowEditPart;
public FlowXYLayout(EditPart flowEditPart) {
super();
this.flowEditPart = flowEditPart;
}
@Override
public Object getConstraint(IFigure figure) {
Object constraint = super.getConstraint(figure);
if (constraint != null) return constraint;
// We don't have a constraint yet. Try and create one.
EditPart editPart = BPELUtil.mapFigure2EditPart(flowEditPart.getViewer(), figure);
if (editPart != null && (editPart.getModel() instanceof Activity)) {
EditPart rootEditPart = editPart.getRoot();
if (rootEditPart instanceof GraphicalBPELRootEditPart) {
Point p = ModelHelper.getLocation((Activity)editPart.getModel());
if (p.x == Integer.MIN_VALUE) {
// HACK: We don't know its position, pretend it's at 0, 0. This should only
// be necessary during brief edge-case situations (like during startup before
// we've done auto-layout on flows without metadata)..
p = new Point(0, 0);
}
Dimension s = new Dimension(-1, -1);
Rectangle r = new Rectangle(p, s);
//System.out.println("Created constraint: "+r);
//setConstraint(figure, r);
((GraphicalEditPart)flowEditPart).setLayoutConstraint(editPart, figure, r);
return r;
}
}
return super.getConstraint(figure);
}
}