/*******************************************************************************
* 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 java.util.Iterator;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.common.ui.URIEditorInput;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.navigator.ILinkHelper;
import org.eclipse.ui.part.FileEditorInput;
import eu.geclipse.workflow.ui.internal.WorkflowDiagramEditorPlugin;
/**
* @generated
*/
public class WorkflowNavigatorLinkHelper implements ILinkHelper {
/**
* @generated
*/
private static IEditorInput getEditorInput( Diagram diagram ) {
Resource diagramResource = diagram.eResource();
for( Iterator it = diagramResource.getContents().iterator(); it.hasNext(); )
{
EObject nextEObject = ( EObject )it.next();
if( nextEObject == diagram ) {
return new FileEditorInput( WorkspaceSynchronizer.getFile( diagramResource ) );
}
if( nextEObject instanceof Diagram ) {
break;
}
}
return new URIEditorInput( EcoreUtil.getURI( diagram ) );
}
/**
* @generated
*/
public IStructuredSelection findSelection( IEditorInput anInput ) {
IDiagramDocument document = WorkflowDiagramEditorPlugin.getInstance()
.getDocumentProvider()
.getDiagramDocument( anInput );
if( document == null ) {
return StructuredSelection.EMPTY;
}
Diagram diagram = document.getDiagram();
IFile file = WorkspaceSynchronizer.getFile( diagram.eResource() );
if( file != null ) {
WorkflowNavigatorItem item = new WorkflowNavigatorItem( diagram,
file,
false );
return new StructuredSelection( item );
}
return StructuredSelection.EMPTY;
}
/**
* @generated
*/
public void activateEditor( IWorkbenchPage aPage,
IStructuredSelection aSelection )
{
if( aSelection == null || aSelection.isEmpty() ) {
return;
}
if( false == aSelection.getFirstElement() instanceof WorkflowAbstractNavigatorItem )
{
return;
}
WorkflowAbstractNavigatorItem abstractNavigatorItem = ( WorkflowAbstractNavigatorItem )aSelection.getFirstElement();
View navigatorView = null;
if( abstractNavigatorItem instanceof WorkflowNavigatorItem ) {
navigatorView = ( ( WorkflowNavigatorItem )abstractNavigatorItem ).getView();
} else if( abstractNavigatorItem instanceof WorkflowNavigatorGroup ) {
WorkflowNavigatorGroup navigatorGroup = ( WorkflowNavigatorGroup )abstractNavigatorItem;
if( navigatorGroup.getParent() instanceof WorkflowNavigatorItem ) {
navigatorView = ( ( WorkflowNavigatorItem )navigatorGroup.getParent() ).getView();
}
}
if( navigatorView == null ) {
return;
}
IEditorInput editorInput = getEditorInput( navigatorView.getDiagram() );
IEditorPart editor = aPage.findEditor( editorInput );
if( editor == null ) {
return;
}
aPage.bringToTop( editor );
if( editor instanceof DiagramEditor ) {
DiagramEditor diagramEditor = ( DiagramEditor )editor;
ResourceSet diagramEditorResourceSet = diagramEditor.getEditingDomain()
.getResourceSet();
EObject selectedView = diagramEditorResourceSet.getEObject( EcoreUtil.getURI( navigatorView ),
true );
if( selectedView == null ) {
return;
}
GraphicalViewer graphicalViewer = ( GraphicalViewer )diagramEditor.getAdapter( GraphicalViewer.class );
EditPart selectedEditPart = ( EditPart )graphicalViewer.getEditPartRegistry()
.get( selectedView );
if( selectedEditPart != null ) {
graphicalViewer.select( selectedEditPart );
}
}
}
}