|
@@ -11,13 +11,16 @@
|
|
|
package org.yakindu.sct.ui.editor.providers;
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.Collection;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import org.eclipse.core.resources.IMarker;
|
|
|
import org.eclipse.core.runtime.CoreException;
|
|
|
+import org.eclipse.emf.common.util.TreeIterator;
|
|
|
import org.eclipse.emf.ecore.EObject;
|
|
|
+import org.eclipse.emf.ecore.util.EcoreUtil;
|
|
|
import org.eclipse.gef.EditPart;
|
|
|
import org.eclipse.gef.requests.DirectEditRequest;
|
|
|
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
|
|
@@ -26,6 +29,7 @@ import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
|
|
|
import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
|
|
|
import org.eclipse.gmf.runtime.emf.ui.providers.marker.AbstractModelMarkerNavigationProvider;
|
|
|
import org.eclipse.gmf.runtime.notation.Diagram;
|
|
|
+import org.eclipse.gmf.runtime.notation.NotationPackage;
|
|
|
import org.eclipse.gmf.runtime.notation.View;
|
|
|
import org.eclipse.xtext.EcoreUtil2;
|
|
|
import org.yakindu.base.xtext.utils.gmf.directedit.IXtextAwareEditPart;
|
|
@@ -49,15 +53,19 @@ public class StatechartMarkerNavigationProvider extends AbstractModelMarkerNavig
|
|
|
return;
|
|
|
}
|
|
|
DiagramEditor editor = (DiagramEditor) getEditor();
|
|
|
- View targetView = (View) editor.getDiagram().eResource().getEObject(elementId);
|
|
|
- if (targetView == null) {
|
|
|
+ EObject targetElement = (EObject) editor.getDiagram().eResource().getEObject(elementId);
|
|
|
+ if (targetElement == null) {
|
|
|
return;
|
|
|
}
|
|
|
- Diagram element = DiagramPartitioningUtil.getDiagramContaining(targetView.getElement());
|
|
|
+ View view = findNotationView(targetElement);
|
|
|
+ if (view == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Diagram element = DiagramPartitioningUtil.getDiagramContaining(view.getElement());
|
|
|
editor = (DiagramEditor) DiagramPartitioningUtil.openEditor(element);
|
|
|
Map editPartRegistry = editor.getDiagramGraphicalViewer().getEditPartRegistry();
|
|
|
|
|
|
- EditPart targetEditPart = (EditPart) editPartRegistry.get(targetView);
|
|
|
+ EditPart targetEditPart = (EditPart) editPartRegistry.get(view);
|
|
|
if (targetEditPart != null) {
|
|
|
selectElementsInDiagram(editor, Arrays.asList(new EditPart[] { targetEditPart }));
|
|
|
}
|
|
@@ -67,7 +75,7 @@ public class StatechartMarkerNavigationProvider extends AbstractModelMarkerNavig
|
|
|
if (type.equals(SCT_MARKER_TYPE)) {
|
|
|
final DirectEditRequest request = new DirectEditRequest();
|
|
|
request.setDirectEditFeature(SGraphPackage.eINSTANCE.getSpecificationElement_Specification());
|
|
|
- List<EObject> allNotationElements = EcoreUtil2.eAllContentsAsList(targetView);
|
|
|
+ List<EObject> allNotationElements = EcoreUtil2.eAllContentsAsList(view);
|
|
|
for (EObject eObject : allNotationElements) {
|
|
|
if (eObject instanceof View) {
|
|
|
IGraphicalEditPart editPart = (IGraphicalEditPart) editPartRegistry.get(eObject);
|
|
@@ -80,10 +88,26 @@ public class StatechartMarkerNavigationProvider extends AbstractModelMarkerNavig
|
|
|
} catch (CoreException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ protected View findNotationView(EObject semanticElement) {
|
|
|
+ Collection<Diagram> objects = EcoreUtil.getObjectsByType(semanticElement.eResource().getContents(),
|
|
|
+ NotationPackage.Literals.DIAGRAM);
|
|
|
+ for (Diagram diagram : objects) {
|
|
|
+ TreeIterator<EObject> eAllContents = diagram.eAllContents();
|
|
|
+ while (eAllContents.hasNext()) {
|
|
|
+ EObject next = eAllContents.next();
|
|
|
+ if (next instanceof View) {
|
|
|
+ if (((View) next).getElement() == semanticElement) {
|
|
|
+ return ((View) next);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
- public static void selectElementsInDiagram(IDiagramWorkbenchPart diagramPart, List<EditPart> editParts) {
|
|
|
+ public void selectElementsInDiagram(IDiagramWorkbenchPart diagramPart, List<EditPart> editParts) {
|
|
|
diagramPart.getDiagramGraphicalViewer().deselectAll();
|
|
|
|
|
|
EditPart firstPrimary = null;
|