Added support for fixing Sirius markers
diff --git a/plugins/org.eclipse.epsilon.evl.emf.validation/META-INF/MANIFEST.MF b/plugins/org.eclipse.epsilon.evl.emf.validation/META-INF/MANIFEST.MF
index f6a763a..6ee579a 100644
--- a/plugins/org.eclipse.epsilon.evl.emf.validation/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epsilon.evl.emf.validation/META-INF/MANIFEST.MF
@@ -11,7 +11,11 @@
org.eclipse.epsilon.eol.dt,
org.eclipse.gmf.runtime.diagram.ui;resolution:=optional,
org.eclipse.ocl.ecore;resolution:=optional,
- org.eclipse.ui.ide
+ org.eclipse.ui.ide,
+ org.eclipse.sirius;resolution:=optional,
+ org.eclipse.sirius.ecore.extender;resolution:=optional,
+ org.eclipse.sirius.diagram.ui;resolution:=optional,
+ org.eclipse.emf.common.ui
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.epsilon.evl.emf.validation
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/EvlMarkerResolverManager.java b/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/EvlMarkerResolverManager.java
index 207f5a0..1cf9a35 100644
--- a/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/EvlMarkerResolverManager.java
+++ b/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/EvlMarkerResolverManager.java
@@ -28,6 +28,7 @@
private EvlMarkerResolverManager() {
delegates.add(new EmfMarkerResolver());
+ delegates.add(new SiriusMarkerResolver());
try {
Class.forName("org.eclipse.gmf.runtime.notation.View");
delegates.add(new GmfMarkerResolver());
@@ -54,7 +55,7 @@
}
return null;
}
-
+
public String getAbsoluteElementId(IMarker marker) {
for (IEvlMarkerResolver delegate : delegates) {
if (delegate.canResolve(marker))
diff --git a/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/IEvlMarkerResolver.java b/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/IEvlMarkerResolver.java
index c27d514..e2303df 100644
--- a/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/IEvlMarkerResolver.java
+++ b/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/IEvlMarkerResolver.java
@@ -13,7 +13,6 @@
import org.eclipse.core.resources.IMarker;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.ui.IEditorPart;
public interface IEvlMarkerResolver {
@@ -26,6 +25,5 @@
public String getMessage(IMarker marker);
public EditingDomain getEditingDomain(IMarker marker);
-
- public EditingDomain getEditingDomain(IEditorPart editor);
+
}
diff --git a/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/SiriusMarkerResolver.java b/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/SiriusMarkerResolver.java
new file mode 100644
index 0000000..b26ed6a
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.evl.emf.validation/src/org/eclipse/epsilon/evl/emf/validation/SiriusMarkerResolver.java
@@ -0,0 +1,96 @@
+package org.eclipse.epsilon.evl.emf.validation;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.epsilon.common.dt.util.LogUtil;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.diagram.ui.tools.internal.resource.NavigationMarkerConstants;
+import org.eclipse.sirius.ui.business.api.session.SessionEditorInput;
+import org.eclipse.sirius.viewpoint.DSemanticDecorator;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+
+@SuppressWarnings("restriction")
+public class SiriusMarkerResolver extends EmfMarkerResolver {
+
+ @Override
+ public boolean canResolve(IMarker marker) {
+ try {
+ return marker.getType().equals("org.eclipse.sirius.diagram.ui.diagnostic");
+ } catch (CoreException e) {
+ return false;
+ }
+ }
+
+ protected Session getSession(IMarker marker) {
+ try {
+ IEditorPart editor = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), marker);
+
+ if (editor != null) {
+ IEditorInput editorInput = editor.getEditorInput();
+ if (editorInput instanceof SessionEditorInput) {
+ Session editorInputSession = ((SessionEditorInput) editorInput).getSession();
+ if (editorInputSession != null && editorInputSession.isOpen()) {
+ return editorInputSession;
+ }
+ }
+ }
+ }
+ catch (Exception ex) {
+ LogUtil.log(ex);
+ }
+ return null;
+ }
+
+ @Override
+ public EObject resolve(IMarker marker) {
+ return getSemanticElement(getMarkedView(getSession(marker), marker));
+ }
+
+ @Override
+ public EditingDomain getEditingDomain(IMarker marker) {
+ return getSession(marker).getTransactionalEditingDomain();
+ }
+
+ private View getMarkedView(Session session, IMarker marker) {
+ String elementID = marker.getAttribute(org.eclipse.gmf.runtime.common.ui.resources.IMarker.ELEMENT_ID, null);
+ String diagramURI = marker.getAttribute(NavigationMarkerConstants.DIAGRAM_URI, null);
+
+ if (diagramURI == null || elementID == null) {
+ return null;
+ }
+
+ ResourceSet set = session.getTransactionalEditingDomain().getResourceSet();
+ if (set != null) {
+ EObject markedDiagram = set.getEObject(URI.createURI(diagramURI), true);
+ EObject markerTarget = markedDiagram instanceof Diagram ? markedDiagram.eResource().getEObject(elementID) : null;
+ if (markerTarget instanceof View) {
+ return (View) markerTarget;
+ }
+ }
+ return null;
+
+ }
+
+ private EObject getSemanticElement(View markedView) {
+ EObject fixTarget = markedView.getElement();
+ if (fixTarget instanceof DSemanticDecorator) {
+ fixTarget = ((DSemanticDecorator) fixTarget).getTarget();
+ }
+ return fixTarget;
+ }
+
+ @Override
+ public String getAbsoluteElementId(IMarker marker) {
+ return marker.getAttribute(NavigationMarkerConstants.SEMANTIC_URI, "");
+ }
+
+}