/******************************************************************************* * Copyright (c) 2006, 2007 g-Eclipse Consortium * 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 * * Initial development of the original code was made for the g-Eclipse project * funded by European Union project number: FP6-IST-034327 * http://www.geclipse.eu/ * * Contributors: * RUR (http://acet.rdg.ac.uk/) * - Ashish Thandavan - initial API and implementation ******************************************************************************/ package eu.geclipse.workflow.ui.navigator; import eu.geclipse.workflow.ui.edit.parts.WorkflowEditPart; import eu.geclipse.workflow.ui.editor.WorkflowDiagramEditor; import eu.geclipse.workflow.ui.internal.WorkflowDiagramEditorPlugin; import eu.geclipse.workflow.ui.part.WorkflowVisualIDRegistry; import java.util.Iterator; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.emf.common.ui.URIEditorInput; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.workspace.util.WorkspaceSynchronizer; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.navigator.CommonActionProvider; import org.eclipse.ui.navigator.ICommonActionConstants; import org.eclipse.ui.navigator.ICommonActionExtensionSite; import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite; import org.eclipse.ui.part.FileEditorInput; /** * @generated */ public class WorkflowNavigatorActionProvider extends CommonActionProvider { /** * @generated */ private boolean myContribute; /** * @generated */ private OpenDiagramAction myOpenDiagramAction; /** * @generated */ @Override public void init( ICommonActionExtensionSite aSite ) { super.init( aSite ); if( aSite.getViewSite() instanceof ICommonViewerWorkbenchSite ) { myContribute = true; makeActions( ( ICommonViewerWorkbenchSite )aSite.getViewSite() ); } else { myContribute = false; } } /** * @generated */ private void makeActions( ICommonViewerWorkbenchSite viewerSite ) { myOpenDiagramAction = new OpenDiagramAction( viewerSite ); } /** * @generated */ @Override public void fillActionBars( IActionBars actionBars ) { if( !myContribute ) { return; } IStructuredSelection selection = ( IStructuredSelection )getContext().getSelection(); myOpenDiagramAction.selectionChanged( selection ); if( myOpenDiagramAction.isEnabled() ) { actionBars.setGlobalActionHandler( ICommonActionConstants.OPEN, myOpenDiagramAction ); } } /** * @generated */ @Override public void fillContextMenu( IMenuManager menu ) { } /** * @generated */ private class OpenDiagramAction extends Action { /** * @generated */ private Diagram myDiagram; /** * @generated */ private ICommonViewerWorkbenchSite myViewerSite; /** * @generated */ public OpenDiagramAction( ICommonViewerWorkbenchSite viewerSite ) { super( "Open Diagram" ); myViewerSite = viewerSite; } /** * @generated */ public final void selectionChanged( IStructuredSelection selection ) { myDiagram = null; if( selection.size() == 1 ) { Object selectedElement = selection.getFirstElement(); if( selectedElement instanceof WorkflowNavigatorItem ) { selectedElement = ( ( WorkflowNavigatorItem )selectedElement ).getView(); } else if( selectedElement instanceof IAdaptable ) { selectedElement = ( ( IAdaptable )selectedElement ).getAdapter( View.class ); } if( selectedElement instanceof Diagram ) { Diagram diagram = ( Diagram )selectedElement; if( WorkflowEditPart.MODEL_ID.equals( WorkflowVisualIDRegistry.getModelID( diagram ) ) ) { myDiagram = diagram; } } } setEnabled( myDiagram != null ); } /** * @generated */ @Override public void run() { if( myDiagram == null || myDiagram.eResource() == null ) { return; } IEditorInput editorInput = getEditorInput(); IWorkbenchPage page = myViewerSite.getPage(); try { page.openEditor( editorInput, WorkflowDiagramEditor.ID ); } catch( PartInitException e ) { WorkflowDiagramEditorPlugin.getInstance() .logError( "Exception while openning diagram", e ); } } /** * @generated */ private IEditorInput getEditorInput() { Resource diagramResource = myDiagram.eResource(); for( Iterator it = diagramResource.getContents().iterator(); it.hasNext(); ) { EObject nextEObject = ( EObject )it.next(); if( nextEObject == myDiagram ) { return new FileEditorInput( WorkspaceSynchronizer.getFile( diagramResource ) ); } if( nextEObject instanceof Diagram ) { break; } } return new URIEditorInput( diagramResource.getURI() .appendFragment( diagramResource.getURIFragment( myDiagram ) ) ); } } }