| /******************************************************************************* |
| * 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 java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.bpel.common.ui.decorator.EditPartMarkerDecorator; |
| import org.eclipse.bpel.common.ui.tray.MainTrayEditPart; |
| import org.eclipse.bpel.common.ui.tray.TrayMarkerDecorator; |
| import org.eclipse.bpel.model.BPELFactory; |
| import org.eclipse.bpel.model.CorrelationSet; |
| import org.eclipse.bpel.model.CorrelationSets; |
| import org.eclipse.bpel.model.MessageExchange; |
| import org.eclipse.bpel.model.MessageExchanges; |
| import org.eclipse.bpel.model.PartnerLink; |
| import org.eclipse.bpel.model.PartnerLinks; |
| import org.eclipse.bpel.model.Process; |
| import org.eclipse.bpel.model.Scope; |
| import org.eclipse.bpel.model.Variable; |
| import org.eclipse.bpel.model.Variables; |
| import org.eclipse.bpel.ui.BPELEditor; |
| 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.BPELDirectEditPolicy; |
| import org.eclipse.bpel.ui.extensions.BPELUIRegistry; |
| import org.eclipse.bpel.ui.uiextensionmodel.ReferencePartnerLinks; |
| import org.eclipse.bpel.ui.util.BPELUtil; |
| import org.eclipse.bpel.ui.util.ModelHelper; |
| 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.EditPolicy; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| |
| |
| /** |
| * @author IBM, initial contribution. |
| * @author Michal Chmielewski (michal.chmielewski@oracle.com) |
| * |
| */ |
| public class ProcessTrayEditPart extends MainTrayEditPart implements IHoverHelperSupport { |
| |
| protected ISelectionChangedListener selectionListener; |
| protected Object lastSelection = null; |
| |
| protected MouseMotionListener fMouseMotionListener; |
| |
| // protected ReferencePartnerLinks referencePartners; |
| |
| /** (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(); |
| } |
| }; |
| |
| } |
| |
| @Override |
| protected void createEditPolicies() { |
| super.createEditPolicies(); |
| // The DIRECT_EDIT_ROLE policy determines how in-place editing takes place. |
| installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new BPELDirectEditPolicy()); |
| } |
| |
| |
| |
| |
| /** |
| * @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 text = helper.getHoverFigure((EObject)getModel()); |
| getFigure().setToolTip(text); |
| } |
| |
| protected MouseMotionListener getMouseMotionListener() { |
| if (fMouseMotionListener == null) { |
| this.fMouseMotionListener = 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 fMouseMotionListener; |
| } |
| |
| @Override |
| |
| protected IFigure createFigure() { |
| IFigure fig = super.createFigure(); |
| fig.addMouseMotionListener(getMouseMotionListener()); |
| return fig; |
| } |
| |
| |
| @Override |
| protected List<?> getModelChildren() { |
| |
| //Process process = getProcess(); |
| List<Object> list = new ArrayList<Object>(); |
| |
| PartnerLinks links = getPartnerLinks(); |
| if (links != null) { |
| list.add(links); |
| // referencePartners = UiextensionmodelFactory.eINSTANCE.createReferencePartnerLinks(); |
| // referencePartners.setPartnerLinks(links); |
| // list.add(referencePartners); |
| } |
| |
| Variables variables = getVariables(); |
| if (variables != null) { |
| list.add(variables); |
| } |
| |
| CorrelationSets sets = getCorrelationSets(); |
| if (sets != null) { |
| list.add(sets); |
| } |
| |
| MessageExchanges exchanges = getMessageExchanges(); |
| if (exchanges != null) { |
| list.add(exchanges); |
| } |
| |
| return list; |
| } |
| |
| /** |
| * We show scoped partnerLinks if a Scope is the current selection, |
| * otherwise we show the process partnerLinks. |
| */ |
| protected PartnerLinks getPartnerLinks() { |
| if (lastSelection instanceof Scope) { |
| Scope scope = (Scope) lastSelection; |
| if ( scope.getPartnerLinks() == null) { |
| scope.setPartnerLinks( BPELFactory.eINSTANCE.createPartnerLinks() ); |
| } |
| return scope.getPartnerLinks(); |
| } |
| Process process = getProcess(); |
| if (process.getPartnerLinks() == null) { |
| process.setPartnerLinks( BPELFactory.eINSTANCE.createPartnerLinks() ); |
| } |
| |
| return process.getPartnerLinks(); |
| |
| } |
| |
| /** |
| * We show scoped variables if a Scope is the current selection, |
| * otherwise we show the process variables. |
| */ |
| protected Variables getVariables() { |
| |
| if (lastSelection instanceof Scope) { |
| |
| Scope scope = (Scope) lastSelection; |
| if ( scope.getVariables() == null) { |
| scope.setVariables( BPELFactory.eINSTANCE.createVariables() ); |
| } |
| return scope.getVariables(); |
| |
| } |
| |
| Process process = getProcess(); |
| if (process.getVariables() == null) { |
| process.setVariables( BPELFactory.eINSTANCE.createVariables() ); |
| } |
| |
| return process.getVariables(); |
| } |
| |
| /** |
| * We show scoped correlationSets if a Scope is the current selection, |
| * otherwise we show the process correlationSets. |
| */ |
| protected CorrelationSets getCorrelationSets() { |
| if (lastSelection instanceof Scope) { |
| Scope scope = (Scope) lastSelection; |
| if ( scope.getCorrelationSets() == null) { |
| scope.setCorrelationSets( BPELFactory.eINSTANCE.createCorrelationSets() ); |
| } |
| return scope.getCorrelationSets(); |
| } |
| Process process = getProcess(); |
| if (process.getCorrelationSets() == null) { |
| process.setCorrelationSets( BPELFactory.eINSTANCE.createCorrelationSets() ); |
| } |
| |
| return process.getCorrelationSets(); |
| } |
| |
| /** |
| * We show scoped correlationSets if a Scope is the current selection, |
| * otherwise we show the process correlationSets. |
| */ |
| protected MessageExchanges getMessageExchanges() { |
| if (lastSelection instanceof Scope) { |
| Scope scope = (Scope) lastSelection; |
| if ( scope.getMessageExchanges() == null) { |
| scope.setMessageExchanges( BPELFactory.eINSTANCE.createMessageExchanges() ); |
| } |
| return scope.getMessageExchanges(); |
| } |
| Process process = getProcess(); |
| if (process.getMessageExchanges() == null) { |
| process.setMessageExchanges( BPELFactory.eINSTANCE.createMessageExchanges() ); |
| } |
| |
| return process.getMessageExchanges(); |
| } |
| |
| protected Process getProcess() { |
| return (Process)getModel(); |
| } |
| |
| |
| /** |
| * @see org.eclipse.bpel.common.ui.tray.TrayEditPart#activate() |
| */ |
| @Override |
| public void activate() { |
| super.activate(); |
| BPELEditor editor = ModelHelper.getBPELEditor(getProcess()); |
| editor.getGraphicalViewer().addSelectionChangedListener(getSelectionChangedListener()); |
| } |
| |
| |
| /** |
| * @see org.eclipse.bpel.common.ui.tray.TrayEditPart#deactivate() |
| */ |
| @Override |
| public void deactivate() { |
| super.deactivate(); |
| // There is a chance that by the time we deactivate, we can't find the editor anymore. |
| // This is okay because there is a hack in BPELEditor.modelReloaded that manually |
| // removes this selection change listener from the graphical viewer. |
| try { |
| BPELEditor editor = ModelHelper.getBPELEditor(getProcess()); |
| editor.getGraphicalViewer().removeSelectionChangedListener(getSelectionChangedListener()); |
| } catch (Exception e) { |
| } |
| } |
| |
| /** |
| * Selection listeners that tracks the canvas selection and causes the variables |
| * to refresh accordingly. |
| * @return the selection changed listener |
| */ |
| public ISelectionChangedListener getSelectionChangedListener() { |
| if (selectionListener == null) { |
| selectionListener = new ISelectionChangedListener() { |
| public void selectionChanged(SelectionChangedEvent event) { |
| Object currentSelection = getModelObjectFromSelection(event.getSelection()); |
| if (shouldRefresh(currentSelection)) { |
| lastSelection = currentSelection; |
| refreshChildren(); |
| } |
| } |
| protected boolean shouldRefresh(Object currentSelection) { |
| if (currentSelection == null) |
| return false; |
| if (currentSelection instanceof Variables || currentSelection instanceof Variable) |
| return false; |
| if (currentSelection instanceof PartnerLinks || currentSelection instanceof PartnerLink) |
| return false; |
| if (currentSelection instanceof CorrelationSets || currentSelection instanceof CorrelationSet) |
| return false; |
| if (currentSelection instanceof MessageExchanges || currentSelection instanceof MessageExchange) |
| return false; |
| if (currentSelection instanceof ReferencePartnerLinks) |
| return false; |
| return (lastSelection != currentSelection && (lastSelection instanceof Scope || currentSelection instanceof Scope)); |
| } |
| }; |
| } |
| return selectionListener; |
| } |
| |
| |
| @Override |
| protected AccessibleEditPart createAccessible() { |
| return new BPELTrayAccessibleEditPart(this); |
| } |
| } |