blob: f483aa4bdf0775c49434c7a6bbb9f13322bbe3b6 [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;
import org.eclipse.bpel.model.CompensationHandler;
import org.eclipse.bpel.model.EventHandler;
import org.eclipse.bpel.model.TerminationHandler;
import org.eclipse.bpel.ui.BPELUIPlugin;
import org.eclipse.bpel.ui.IBPELUIConstants;
import org.eclipse.bpel.ui.editparts.borders.RoundRectangleBorderWithDecoration;
import org.eclipse.bpel.ui.editparts.policies.BPELContainerEditPolicy;
import org.eclipse.bpel.ui.editparts.policies.BPELOrderedLayoutEditPolicy;
import org.eclipse.bpel.ui.editparts.policies.ContainerHighlightEditPolicy;
import org.eclipse.bpel.ui.figures.ILayoutAware;
import org.eclipse.bpel.ui.util.ModelHelper;
import org.eclipse.draw2d.Border;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FlowLayout;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.gef.EditPolicy;
import org.eclipse.swt.graphics.Image;
public class FaultHandlerEditPart extends BPELEditPart implements ILayoutAware{
private Image image;
private IFigure contentPane;
private Border containerBorder;
public static final int LEFT_MARGIN = 30;
@Override
protected void createEditPolicies() {
super.createEditPolicies();
// Show the selection rectangle
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new ContainerHighlightEditPolicy(false, false));
installEditPolicy(EditPolicy.CONTAINER_ROLE, new BPELContainerEditPolicy());
installEditPolicy(EditPolicy.LAYOUT_ROLE, new BPELOrderedLayoutEditPolicy());
}
@Override
protected IFigure createFigure() {
IFigure figure = new Figure();
FlowLayout layout = new FlowLayout();
layout.setMinorAlignment(FlowLayout.ALIGN_CENTER);
boolean vertical = (getModel() instanceof CompensationHandler) || (getModel() instanceof TerminationHandler);
boolean horizontalLayout = ModelHelper.isHorizontalLayout(getModel());
layout.setHorizontal(horizontalLayout ? vertical : !vertical);
figure.setLayoutManager(layout);
if (image == null) {
// Get Image from registry
if (getModel() instanceof EventHandler) {
image = BPELUIPlugin.INSTANCE.getImage(IBPELUIConstants.ICON_EVENT_INDICATOR);
} else if (getModel() instanceof CompensationHandler) {
image = BPELUIPlugin.INSTANCE.getImage(IBPELUIConstants.ICON_COMPENSATION_INDICATOR);
} else if (getModel() instanceof TerminationHandler) {
image = BPELUIPlugin.INSTANCE.getImage(IBPELUIConstants.ICON_TERMINATION_INDICATOR);
} else {
image = BPELUIPlugin.INSTANCE.getImage(IBPELUIConstants.ICON_FAULT_INDICATOR);
}
}
figure.setBorder(new RoundRectangleBorderWithDecoration(figure, image, new Insets(20, 10, 20, 10)));
figure.setOpaque(true);
this.contentPane = figure;
int topMargin = calcTopMargin(horizontalLayout);
int leftMargin = calcLeftMargin(horizontalLayout);
IFigure container = new Figure();
this.containerBorder = new MarginBorder(topMargin,leftMargin,0,0);
container.setBorder(containerBorder);
container.add(figure);
layout = new FlowLayout();
layout.setHorizontal(false);
container.setLayoutManager(layout);
return container;
}
@Override
public void deactivate() {
if (!isActive()) return;
super.deactivate();
if (this.image != null) {
//this.image.dispose();
this.image = null;
}
}
@Override
public IFigure getContentPane() {
return contentPane;
}
public void switchLayout(boolean horizontal) {
boolean vertical = (getModel() instanceof CompensationHandler) || (getModel() instanceof TerminationHandler);
boolean horizontalLayout = ModelHelper.isHorizontalLayout(getModel());
((FlowLayout)getContentPane().getLayoutManager()).setHorizontal(horizontalLayout ? vertical : !vertical);
int leftMargin = calcLeftMargin(horizontal);
int topMargin = calcTopMargin(horizontal);
getFigure().setBorder(new MarginBorder(topMargin,leftMargin,0,0));
}
/**
* Calculates the top margin regarding the layout orientation
* @return
*/
private int calcTopMargin(boolean horizontal){
int topMargin = 0;
if(horizontal){
topMargin = 2;
}else{
if(getParent() instanceof ScopeEditPart){
// Four possible handlers
topMargin = 42;
}else if(getParent() instanceof InvokeEditPart){
// Standard offset
topMargin = 17;
}else
topMargin = 16;
}
return topMargin;
}
/**
* Calculates the left margin regarding the layout orientation
* @return
*/
private int calcLeftMargin(boolean horizontal){
int leftMargin = 0;
if(horizontal && getParent() instanceof ProcessEditPart){
leftMargin = LEFT_MARGIN;
}
return leftMargin;
}
}