blob: ab441df3340d8fd5b620ec7399efba6373d82517 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 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 java.util.List;
import org.eclipse.bpel.common.ui.decorator.EditPartMarkerDecorator;
import org.eclipse.bpel.common.ui.tray.TrayCategoryEntryEditPart;
import org.eclipse.bpel.common.ui.tray.TrayMarkerDecorator;
import org.eclipse.bpel.model.Scope;
import org.eclipse.bpel.ui.BPELUIPlugin;
import org.eclipse.bpel.ui.IHoverHelper;
import org.eclipse.bpel.ui.IHoverHelperSupport;
import org.eclipse.bpel.ui.adapters.IMarkerHolder;
import org.eclipse.bpel.ui.editparts.policies.BPELComponentEditPolicy;
import org.eclipse.bpel.ui.editparts.policies.BPELDirectEditPolicy;
import org.eclipse.bpel.ui.extensions.BPELUIRegistry;
import org.eclipse.bpel.ui.util.BPELUtil;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseMotionListener;
import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.AccessibleEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.RootEditPart;
/**
* Tray category edit part.
*
* @author IBM
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date May 23, 2007
*
*/
public abstract class BPELTrayCategoryEntryEditPart extends TrayCategoryEntryEditPart implements IHoverHelperSupport{
protected MouseMotionListener mouseMotionListener;
// added by Grid.Qian
// use the variable to hold the root of the editpart
// because when we delete a correlationSet from scope
// the editpart parent will be null
private RootEditPart holdRoot;
@Override
protected AccessibleEditPart createAccessible() {
return new BPELTrayAccessibleEditPart(this);
}
@Override
protected void createEditPolicies() {
super.createEditPolicies();
// handles deletions
installEditPolicy(EditPolicy.COMPONENT_ROLE, new BPELComponentEditPolicy());
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new BPELDirectEditPolicy());
}
/** (non-Javadoc)
* @see org.eclipse.bpel.common.ui.tray.TrayCategoryEntryEditPart#createEditPartMarkerDecorator()
*/
@Override
protected EditPartMarkerDecorator createEditPartMarkerDecorator() {
return new TrayMarkerDecorator((EObject)getModel(), new ToolbarLayout()) {
@Override
protected IMarker[] getMarkers () {
IMarkerHolder holder = BPELUtil.adapt(modelObject, IMarkerHolder.class);
if (holder != null) {
return holder.getMarkers(modelObject);
}
return super.getMarkers();
}
};
}
/**
* @see org.eclipse.bpel.ui.IHoverHelperSupport#refreshHoverHelp()
*/
public void refreshHoverHelp() {
// Refresh the tool-tip if we can find a helper.
IHoverHelper helper = null;
try {
helper = BPELUIRegistry.getInstance().getHoverHelper();
if (helper == null) {
return;
}
} catch (CoreException e) {
getFigure().setToolTip(null);
BPELUIPlugin.log(e);
return ;
}
IFigure tooltip = helper.getHoverFigure((EObject)getModel());
getFigure().setToolTip(tooltip);
}
protected MouseMotionListener getMouseMotionListener() {
if (mouseMotionListener == null) {
this.mouseMotionListener = new MouseMotionListener() {
public void mouseDragged(MouseEvent me) {
}
public void mouseEntered(MouseEvent me) {
}
public void mouseExited(MouseEvent me) {
}
public void mouseHover(MouseEvent me) {
}
public void mouseMoved(MouseEvent me) {
refreshHoverHelp();
}
};
}
return mouseMotionListener;
}
@Override
protected IFigure createFigure() {
IFigure fig = super.createFigure();
fig.addMouseMotionListener(getMouseMotionListener());
return fig;
}
/**
* HACK
* See comments in org.eclipse.bpel.ui.editparts.BPELTrayCategoryEditPart.selectAnotherEntry()
*/
@Override
public void removeNotify() {
// we only do the following hack if we are dealing with scoped variables
// when we delete a variable from scope, the variables parent will
// be null, so we need to filter this
EObject eObj = ((EObject) getParent().getModel()).eContainer();
if (eObj != null && !(eObj instanceof Scope)) {
super.removeNotify();
return;
}
if (getSelected() != SELECTED_NONE) {
// getViewer().deselect(this);
// instead of deselecting this entry (which would cause the process to be selected)
// we should ask the parent edit part to select some other child
((BPELTrayCategoryEditPart)getParent()).selectAnotherEntry();
}
if (hasFocus())
getViewer().setFocus(null);
List<EditPart> children = getChildren();
for (int i = 0; i < children.size(); i++)
children.get(i).removeNotify();
unregister();
}
/**
* Overwrite the method by Grid.Qian to get the viewer
* when the editpart's parent == null
*/
public EditPartViewer getViewer() {
try {
return super.getViewer();
} catch (Exception e) {
return holdRoot.getViewer();
}
}
/**
* Overwrite the method by Grid.Qian
* Hold the editpart's root editpart
*/
public void setParent(EditPart parent) {
if (this.getParent() == parent)
return;
if (parent != null) {
holdRoot = parent.getRoot();
}
super.setParent(parent);
}
}