Selaa lähdekoodia

Modified link helper to select and reveal elements in the editor.
Added Trigger model elements to filter.

markus.muehlbrandt@itemis.de 14 vuotta sitten
vanhempi
commit
acdbf438c1

+ 10 - 0
plugins/org.yakindu.sct.ui.navigator/plugin.xml

@@ -39,6 +39,11 @@
             id="org.eclipse.ui.navigator.navigatorActionProvider"
             class="org.yakindu.sct.ui.navigator.NavigatorActionProvider">
          <enablement>
+            <or>
+               <instanceof
+                     value="org.yakindu.sct.ui.navigator.DomainNavigatorItem">
+               </instanceof>
+            </or>
          </enablement>
       </actionProvider>
        <commonFilter
@@ -56,6 +61,11 @@
                   value="org.yakindu.sct.ui.navigator.DomainNavigatorItem">
             </instanceof>
          </selectionEnablement>
+         <editorInputEnablement>
+            <instanceof
+                  value="org.eclipse.emf.common.ui.URIEditorInput">
+            </instanceof>
+         </editorInputEnablement>
       </linkHelper>
    </extension>
 </plugin>

+ 33 - 59
plugins/org.yakindu.sct.ui.navigator/src/org/yakindu/sct/ui/navigator/DomainNavigatorItem.java

@@ -5,6 +5,7 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.PlatformObject;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.ui.views.properties.IPropertySource;
 import org.eclipse.ui.views.properties.IPropertySourceProvider;
 
@@ -14,52 +15,37 @@ public class DomainNavigatorItem extends PlatformObject {
 	static {
 		final Class[] supportedTypes = new Class[] { EObject.class,
 				IPropertySource.class };
-		Platform.getAdapterManager().registerAdapters(
-				new IAdapterFactory() {
-
-					public Object getAdapter(Object adaptableObject,
-							Class adapterType) {
-						if (adaptableObject instanceof DomainNavigatorItem) {
-							DomainNavigatorItem domainNavigatorItem = (DomainNavigatorItem) adaptableObject;
-							EObject eObject = domainNavigatorItem.getEObject();
-							if (adapterType == EObject.class) {
-								return eObject;
-							}
-							if (adapterType == IPropertySource.class) {
-								return domainNavigatorItem
-										.getPropertySourceProvider()
-										.getPropertySource(eObject);
-							}
-						}
-
-						return null;
+		Platform.getAdapterManager().registerAdapters(new IAdapterFactory() {
+
+			public Object getAdapter(Object adaptableObject, Class adapterType) {
+				if (adaptableObject instanceof DomainNavigatorItem) {
+					DomainNavigatorItem domainNavigatorItem = (DomainNavigatorItem) adaptableObject;
+					EObject eObject = domainNavigatorItem.getEObject();
+					if (adapterType == EObject.class) {
+						return eObject;
 					}
-
-					public Class[] getAdapterList() {
-						return supportedTypes;
+					if (adapterType == IPropertySource.class) {
+						return domainNavigatorItem.getPropertySourceProvider()
+								.getPropertySource(eObject);
 					}
-				},
-				DomainNavigatorItem.class);
+				}
+				return null;
+			}
+
+			public Class[] getAdapterList() {
+				return supportedTypes;
+			}
+		}, DomainNavigatorItem.class);
 	}
 
-	/**
-	 * @generated
-	 */
 	private Object myParent;
 
-	/**
-	 * @generated
-	 */
 	private EObject myEObject;
 
-	/**
-	 * @generated
-	 */
 	private IPropertySourceProvider myPropertySourceProvider;
 
-	/**
-	 * @generated
-	 */
+	private View view = null;
+
 	public DomainNavigatorItem(EObject eObject, Object parent,
 			IPropertySourceProvider propertySourceProvider) {
 		myParent = parent;
@@ -67,47 +53,35 @@ public class DomainNavigatorItem extends PlatformObject {
 		myPropertySourceProvider = propertySourceProvider;
 	}
 
-	/**
-	 * @generated
-	 */
 	public Object getParent() {
 		return myParent;
 	}
 
-	/**
-	 * @generated
-	 */
 	public EObject getEObject() {
 		return myEObject;
 	}
 
-	/**
-	 * @generated
-	 */
+	public View getView() {
+		return view;
+	}
+
+	public void setView(View view) {
+		this.view = view;
+	}
+
 	public IPropertySourceProvider getPropertySourceProvider() {
 		return myPropertySourceProvider;
 	}
 
-	/**
-	 * @generated
-	 */
 	public boolean equals(Object obj) {
 		if (obj instanceof DomainNavigatorItem) {
-			return EcoreUtil
-					.getURI(getEObject())
-					.equals(
-							EcoreUtil
-									.getURI(((DomainNavigatorItem) obj)
-											.getEObject()));
+			return EcoreUtil.getURI(getEObject()).equals(
+					EcoreUtil.getURI(((DomainNavigatorItem) obj).getEObject()));
 		}
 		return super.equals(obj);
 	}
 
-	/**
-	 * @generated
-	 */
 	public int hashCode() {
 		return EcoreUtil.getURI(getEObject()).hashCode();
 	}
-
-}
+}

+ 2 - 8
plugins/org.yakindu.sct.ui.navigator/src/org/yakindu/sct/ui/navigator/NavigatorActionProvider.java

@@ -1,7 +1,5 @@
 package org.yakindu.sct.ui.navigator;
 
-import java.util.Iterator;
-
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.emf.common.ui.URIEditorInput;
 import org.eclipse.emf.common.util.URI;
@@ -107,9 +105,7 @@ public class NavigatorActionProvider extends CommonActionProvider {
 		}
 
 		private IEditorInput getEditorInput() {
-			for (Iterator<EObject> it = myDiagram.eResource().getContents().iterator(); it
-					.hasNext();) {
-				EObject nextEObject = (EObject) it.next();
+			for (EObject nextEObject : myDiagram.eResource().getContents()) {
 				if (nextEObject == myDiagram) {
 					return new FileEditorInput(
 							WorkspaceSynchronizer.getFile(myDiagram.eResource()));
@@ -124,7 +120,5 @@ public class NavigatorActionProvider extends CommonActionProvider {
 			IEditorInput editorInput = new URIEditorInput(uri, editorName);
 			return editorInput;
 		}
-
 	}
-
-}
+}

+ 99 - 71
plugins/org.yakindu.sct.ui.navigator/src/org/yakindu/sct/ui/navigator/NavigatorLinkHelper.java

@@ -1,89 +1,117 @@
 package org.yakindu.sct.ui.navigator;
 
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.common.util.URI;
+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.edit.ui.provider.AdapterFactoryContentProvider;
+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.parts.DiagramDocumentEditor;
+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 org.yakindu.sct.ui.navigator.utils.ComposedAdapterFactoryUtil;
+
+import de.itemis.xtext.utils.jface.viewers.util.ActiveEditorResolver;
 
 public class NavigatorLinkHelper implements ILinkHelper {
 
+	private AdapterFactoryContentProvider myAdapterFctoryContentProvier;
+
 	public NavigatorLinkHelper() {
+		myAdapterFctoryContentProvier = new AdapterFactoryContentProvider(
+				ComposedAdapterFactoryUtil.FACTORY);
+	}
+
+	private static IEditorInput getEditorInput(Diagram diagram) {
+		Resource diagramResource = diagram.eResource();
+		for (Iterator<EObject> 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;
+			}
+		}
+		URI uri = EcoreUtil.getURI(diagram);
+		String editorName = uri.lastSegment() + "#"
+				+ diagram.eResource().getContents().indexOf(diagram);
+		IEditorInput editorInput = new URIEditorInput(uri, editorName);
+		return editorInput;
 	}
-	
-	
-//	private static IEditorInput getEditorInput(Diagram diagram) {
-//		Resource diagramResource = diagram.eResource();
-//		for (Iterator<EObject> 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;
-//			}
-//		}
-//		URI uri = EcoreUtil.getURI(diagram);
-//		String editorName = uri.lastSegment() + "#" + diagram.eResource().getContents().indexOf(diagram);
-//		IEditorInput editorInput = new URIEditorInput(uri, editorName);
-//		return editorInput;
-//	}
 
 	public IStructuredSelection findSelection(IEditorInput anInput) {
-//		IEditorPart activeEditor = ActiveEditorResolver.getActiveEditor();
-//		if(activeEditor instanceof DiagramDocumentEditor){
-//			Diagram diagram = ((DiagramDocumentEditor) activeEditor)
-//					.getDiagram();
-//			IFile file = WorkspaceSynchronizer.getFile(diagram.eResource());
-//			if (file != null) {
-//				DomainNavigatorItem item = new DomainNavigatorItem(diagram, file, false);
-//				return new StructuredSelection(item);
-//			}
-//		}
+		IEditorPart activeEditor = ActiveEditorResolver.getActiveEditor();
+		if (activeEditor instanceof DiagramDocumentEditor) {
+			Diagram diagram = ((DiagramDocumentEditor) activeEditor)
+					.getDiagram();
+			IFile file = WorkspaceSynchronizer.getFile(diagram.eResource());
+			if (file != null) {
+				DomainNavigatorItem item = new DomainNavigatorItem(diagram,
+						file, myAdapterFctoryContentProvier);
+				return new StructuredSelection(item);
+			}
+		}
 		return StructuredSelection.EMPTY;
 	}
 
-	public void activateEditor(IWorkbenchPage aPage, IStructuredSelection aSelection) {
-//		if (aSelection == null || aSelection.isEmpty()) {
-//			return;
-//		}
-//		if (false == aSelection.getFirstElement() instanceof AbstractNavigatorItem) {
-//			return;
-//		}
-//
-//		AbstractNavigatorItem abstractNavigatorItem = (AbstractNavigatorItem)aSelection.getFirstElement();
-//		View navigatorView = null;
-//		if (abstractNavigatorItem instanceof NavigatorItem) {
-//			navigatorView = ((NavigatorItem)abstractNavigatorItem).getView();
-//		} else if (abstractNavigatorItem instanceof NavigatorGroup) {
-//			NavigatorGroup navigatorGroup = (NavigatorGroup)abstractNavigatorItem;
-//			if (navigatorGroup.getParent() instanceof NavigatorItem) {
-//				navigatorView = ((NavigatorItem)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);
-//			}
-//		}
-	}
+	public void activateEditor(IWorkbenchPage aPage,
+			IStructuredSelection aSelection) {
+
+		if (aSelection == null || aSelection.isEmpty()) {
+			return;
+		}
+		if (false == aSelection.getFirstElement() instanceof DomainNavigatorItem) {
+			return;
+		}
 
-}
+		DomainNavigatorItem abstractNavigatorItem = (DomainNavigatorItem) aSelection
+				.getFirstElement();
+
+		View navigatorView = abstractNavigatorItem.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);
+				graphicalViewer.reveal(selectedEditPart);
+			}
+		}
+	}
+}

+ 35 - 4
plugins/org.yakindu.sct.ui.navigator/src/org/yakindu/sct/ui/navigator/StatechartNavigatorContentProvider.java

@@ -8,12 +8,16 @@ import java.util.Iterator;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature.Setting;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.ECrossReferenceAdapter;
 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
 import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
 import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.navigator.ICommonContentExtensionSite;
@@ -34,9 +38,10 @@ public class StatechartNavigatorContentProvider implements
 	private WorkspaceSynchronizer myWorkspaceSynchronizer;
 
 	private Runnable myViewerRefreshRunnable;
+	
+	private ECrossReferenceAdapter myCrossReferenceAdapter;
 
 	public StatechartNavigatorContentProvider() {
-		System.out.println("ContentProvider");
 		myAdapterFctoryContentProvier = new AdapterFactoryContentProvider(
 				ComposedAdapterFactoryUtil.FACTORY);
 		
@@ -109,6 +114,9 @@ public class StatechartNavigatorContentProvider implements
 						return true;
 					}
 				});
+		
+		myCrossReferenceAdapter = new ECrossReferenceAdapter();
+		myEditingDomain.getResourceSet().eAdapters().add(myCrossReferenceAdapter);
 	}
 
 	public void dispose() {
@@ -120,6 +128,7 @@ public class StatechartNavigatorContentProvider implements
 			Resource resource = (Resource) it.next();
 			resource.unload();
 		}
+		myEditingDomain.getResourceSet().eAdapters().remove(myCrossReferenceAdapter);
 		((TransactionalEditingDomain) myEditingDomain).dispose();
 		myEditingDomain = null;
 	}
@@ -162,16 +171,38 @@ public class StatechartNavigatorContentProvider implements
 		return EMPTY_ARRAY;
 	}
 
-	public Object[] wrapEObjects(Object[] objects, Object parentElement) {
+	private Object[] wrapEObjects(Object[] objects, Object parentElement) {
 		Collection<DomainNavigatorItem> result = new ArrayList<DomainNavigatorItem>();
 		for (int i = 0; i < objects.length; i++) {
 			if (objects[i] instanceof EObject) {
-				result.add(new DomainNavigatorItem((EObject) objects[i],
-						parentElement, myAdapterFctoryContentProvier));
+				DomainNavigatorItem navigatorItem = new DomainNavigatorItem(
+						(EObject) objects[i], parentElement,
+						myAdapterFctoryContentProvier);
+				// Check if object has a corresponding View
+				if (!(objects[i] instanceof View)) {
+					EObject eObject = (EObject) objects[i];
+					navigatorItem.setView(getReferencigView(eObject));
+				}
+				result.add(navigatorItem);
 			}
 		}
 		return result.toArray();
 	}
+	
+	private View getReferencigView(EObject eObject) {
+		
+		Collection<Setting> inverseReferences = myCrossReferenceAdapter
+				.getInverseReferences(eObject, true);
+		
+		for (Setting setting:inverseReferences) {
+			if (setting.getEObject() instanceof View
+					&& setting.getEStructuralFeature() == NotationPackage.eINSTANCE
+							.getView_Element()) {
+				return (View) setting.getEObject();
+			}
+		}
+		return null;
+	}
 
 	public Object getParent(Object element) {
 		if (element instanceof DomainNavigatorItem) {

+ 1 - 32
plugins/org.yakindu.sct.ui.navigator/src/org/yakindu/sct/ui/navigator/StatechartNavigatorLabelProvider.java

@@ -13,15 +13,9 @@ public class StatechartNavigatorLabelProvider implements ICommonLabelProvider {
 	private AdapterFactoryLabelProvider myAdapterFactoryLabelProvider = new AdapterFactoryLabelProvider(
 			ComposedAdapterFactoryUtil.FACTORY);
 
-	/**
-	 * @generated
-	 */
 	public void init(ICommonContentExtensionSite aConfig) {
 	}
 
-	/**
-	 * @generated
-	 */
 	public Image getImage(Object element) {
 		if (element instanceof DomainNavigatorItem) {
 			return myAdapterFactoryLabelProvider
@@ -30,9 +24,6 @@ public class StatechartNavigatorLabelProvider implements ICommonLabelProvider {
 		return null;
 	}
 
-	/**
-	 * @generated
-	 */
 	public String getText(Object element) {
 		if (element instanceof DomainNavigatorItem) {
 			return myAdapterFactoryLabelProvider
@@ -41,51 +32,29 @@ public class StatechartNavigatorLabelProvider implements ICommonLabelProvider {
 		return null;
 	}
 
-	/**
-	 * @generated
-	 */
 	public void addListener(ILabelProviderListener listener) {
 		myAdapterFactoryLabelProvider.addListener(listener);
 	}
 
-	/**
-	 * @generated
-	 */
 	public void dispose() {
 		myAdapterFactoryLabelProvider.dispose();
 	}
 
-	/**
-	 * @generated
-	 */
 	public boolean isLabelProperty(Object element, String property) {
 		return myAdapterFactoryLabelProvider.isLabelProperty(element, property);
 	}
 
-	/**
-	 * @generated
-	 */
 	public void removeListener(ILabelProviderListener listener) {
 		myAdapterFactoryLabelProvider.removeListener(listener);
 	}
 
-	/**
-	 * @generated
-	 */
 	public void restoreState(IMemento aMemento) {
 	}
 
-	/**
-	 * @generated
-	 */
 	public void saveState(IMemento aMemento) {
 	}
 
-	/**
-	 * @generated
-	 */
 	public String getDescription(Object anElement) {
 		return null;
 	}
-
-}
+}

+ 4 - 0
plugins/org.yakindu.sct.ui.navigator/src/org/yakindu/sct/ui/navigator/StatechartObjectViewerFilter.java

@@ -5,6 +5,7 @@ import org.eclipse.gmf.runtime.notation.Diagram;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 import org.yakindu.sct.model.sgraph.Scope;
+import org.yakindu.sct.model.sgraph.Trigger;
 import org.yakindu.sct.model.stext.stext.InterfaceScope;
 import org.yakindu.sct.model.stext.stext.InternalScope;
 
@@ -18,6 +19,9 @@ public class StatechartObjectViewerFilter extends ViewerFilter {
 			if (modelElement instanceof Diagram) {
 				return false;
 			}
+			if (modelElement instanceof Trigger) {
+				return false;
+			}
 			if (modelElement instanceof InternalScope
 					|| modelElement instanceof InterfaceScope) {
 				return true;