blob: 553e391e2c1c369b4d7e8f9c358744238b759c9c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 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.common.ui.decorator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.bpel.common.ui.markers.IModelMarkerConstants;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.draw2d.Connection;
import org.eclipse.draw2d.ConnectionEndpointLocator;
import org.eclipse.draw2d.ConnectionLocator;
import org.eclipse.draw2d.IFigure;
import org.eclipse.emf.ecore.EObject;
/**
* Default implementation of marker behavior for a connection edit part.
*
*/
public class LinkEditPartMarkerDecorator extends EditPartMarkerDecorator {
private Connection fConnection;
private List<IFigure> fMarkerFigures = new ArrayList<IFigure>();
/**
* Brand new shiny LinkEditPartMarkerDecorator
* @param aModelObject
* @param aConnection
*/
public LinkEditPartMarkerDecorator(EObject aModelObject, Connection aConnection) {
super(aModelObject);
this.fConnection = aConnection;
}
/**
* May be overridden by subclasses.
*
* @param marker
* @return a layout constraint
*/
@Override
protected Object getConstraint(IMarker marker) {
try {
if (marker.isSubtypeOf(IModelMarkerConstants.DECORATION_GRAPHICAL_MARKER_ID)) {
String anchorString = (String)marker.getAttribute(IModelMarkerConstants.DECORATION_GRAPHICAL_MARKER_ANCHOR_POINT_ATTR);
if (anchorString != null) {
if (anchorString.equals(IMarkerConstants.MARKER_ANCHORPOINT_SOURCE)) {
ConnectionEndpointLocator locator = new ConnectionEndpointLocator(fConnection, false);
locator.setUDistance(4);
locator.setVDistance(0);
return locator;
}
if (anchorString.equals(IMarkerConstants.MARKER_ANCHORPOINT_TARGET)) {
ConnectionEndpointLocator locator = new ConnectionEndpointLocator(fConnection, true);
locator.setUDistance(4);
locator.setVDistance(0);
return locator;
}
if (anchorString.equals(IMarkerConstants.MARKER_ANCHORPOINT_CENTRE)) return new ConnectionLocator(fConnection, ConnectionLocator.MIDDLE);
}
}
} catch (CoreException e) {
// ignore this exception since the marker may no longer exist
}
// default
return new ConnectionLocator(fConnection, ConnectionLocator.MIDDLE);
}
/**
*
*/
public void removeAllMarkerFigures() {
for (IFigure figure : fMarkerFigures) {
fConnection.remove(figure);
}
fMarkerFigures.clear();
}
/**
* Add marker figure.
*
* @param figure
*/
public void addMarkerFigure(IFigure figure){
fMarkerFigures.add(figure);
}
/**
* @return Returns the conn.
*/
public Connection getConnection() {
return fConnection;
}
/**
* Draws the markers. This method should be called from the EditPart's refreshVisuals()
* method.
*/
@Override
protected void refreshMarkers() {
// Refresh any decorations on this edit part
if(getConnection() != null) {
removeAllMarkerFigures();
Map<Object, IMarker> constraintToMarkerMap = getMarkerMap();
for(Iterator iter = constraintToMarkerMap.entrySet().iterator(); iter.hasNext(); ) {
Map.Entry entry = (Map.Entry) iter.next();
Object constraint = entry.getKey();
IMarker marker = (IMarker) entry.getValue();
IFigure markerFigure = createFigureForMarker(marker);
if (markerFigure != null) {
addMarkerFigure(markerFigure);
getConnection().add(markerFigure, constraint);
}
}
}
}
}