/******************************************************************************* * 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); } }