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, "");
+	}
+	
+}