blob: 854e4e3afb2a361e3d7d230e25831a4122ebcc77 [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.marker;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.bpel.common.ui.decorator.EditPartMarkerDecorator;
import org.eclipse.bpel.common.ui.decorator.IMarkerConstants;
import org.eclipse.bpel.common.ui.markers.IModelMarkerConstants;
import org.eclipse.bpel.ui.BPELUIPlugin;
import org.eclipse.bpel.ui.IBPELUIConstants;
import org.eclipse.bpel.ui.adapters.IMarkerHolder;
import org.eclipse.bpel.ui.editparts.util.BPELDecorationLayout;
import org.eclipse.bpel.ui.util.BPELUtil;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.draw2d.Layer;
import org.eclipse.emf.ecore.EObject;
/**
*
* @author IBM
* @date May 23, 2007
*
*/
public class BPELEditPartMarkerDecorator extends EditPartMarkerDecorator {
protected List<MarkerMotionListener> listeners = new ArrayList<MarkerMotionListener>();
/**
* Marker Motion Listener.
* @author IBM
* @date May 23, 2007
*/
public interface MarkerMotionListener {
/**
* Marker has been entered ...
* @param marker
*/
public void markerEntered(IMarker marker);
}
/**
* Brand new shiny BPELEditPartMarkerDecorator ...
*
* @param aModelObject the model object
* @param decorationLayout
*/
public BPELEditPartMarkerDecorator (EObject aModelObject, BPELDecorationLayout decorationLayout) {
super(aModelObject, null, decorationLayout);
decorationLayout.addAnchorMotionListener(new BPELDecorationLayout.AnchorMotionListener() {
public void anchorEntered(int position) {
// Look up the marker for the anchor and fire the listeners
for(IMarker marker : getMarkers()) {
Object constraint = getConstraint(marker);
if (constraint instanceof Integer) {
int value = ((Integer)constraint).intValue();
if (value == position) {
fireMarkerMotionListeners(marker);
return;
}
}
}
}
});
}
@Override
protected IMarker[] getMarkers () {
IMarkerHolder holder = BPELUtil.adapt(modelObject, IMarkerHolder.class);
if (holder != null) {
return holder.getMarkers(modelObject);
}
return super.getMarkers();
}
/**
* Add marker motion listener.
*
* @param listener
*/
public void addMarkerMotionListener(MarkerMotionListener listener) {
listeners.add(listener);
}
/**
* Remove marker motion listener.
* @param listener
*/
public void removeMarkerMotionListener(MarkerMotionListener listener) {
listeners.remove(listener);
}
protected void fireMarkerMotionListeners(IMarker marker) {
for(MarkerMotionListener listener : listeners) {
listener.markerEntered(marker);
}
}
/**
* Return the decoration layer.
*
* @return return the decoration layer.
*/
public Layer getDecorationLayer() {
if(decorationLayer == null) {
decorationLayer = new Layer();
}
return decorationLayer;
}
@Override
protected boolean isAcceptable (IMarker marker) {
boolean isVisible = marker.getAttribute(IModelMarkerConstants.DECORATION_MARKER_VISIBLE_ATTR, true);
if (!isVisible) {
return false;
}
// If the marker isn't for this decorator, skip it.
String anchorString = marker.getAttribute(IModelMarkerConstants.DECORATION_GRAPHICAL_MARKER_ANCHOR_POINT_ATTR, ""); //$NON-NLS-1$
if (anchorString.equals(IBPELUIConstants.MARKER_ANCHORPOINT_DRAWER_BOTTOM)
|| anchorString.equals(IBPELUIConstants.MARKER_ANCHORPOINT_DRAWER_TOP)) {
return false;
}
return super.isAcceptable(marker);
}
@Override
protected Object getConstraint(IMarker marker) {
try {
// problem markers are always placed in the top left
if (marker.isSubtypeOf(IMarker.PROBLEM)) {
return IMarkerConstants.BOTTOM_LEFT;
}
} catch (CoreException e) {
BPELUIPlugin.log(e);
}
return super.getConstraint(marker);
}
@Override
protected Object convertAnchorKeyToConstraint(String key) {
if (key.equals(IBPELUIConstants.MARKER_ANCHORPOINT_DRAWER_TOP)) {
return Integer.valueOf( 64 );
}
if (key.equals(IBPELUIConstants.MARKER_ANCHORPOINT_DRAWER_BOTTOM)) {
return Integer.valueOf( 128 );
}
return super.convertAnchorKeyToConstraint(key);
}
}