Bug 519909: Added handler to allow linking to markers
diff --git a/org.eclipse.capra.handler.marker/.classpath b/org.eclipse.capra.handler.marker/.classpath
new file mode 100644
index 0000000..22f3064
--- /dev/null
+++ b/org.eclipse.capra.handler.marker/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.capra.handler.marker/.project b/org.eclipse.capra.handler.marker/.project
new file mode 100644
index 0000000..05584ad
--- /dev/null
+++ b/org.eclipse.capra.handler.marker/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.marker</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..24349cb
--- /dev/null
+++ b/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for Eclipse Markers
+Bundle-SymbolicName: org.eclipse.capra.handler.marker;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.ui.editors,
+ org.eclipse.ui.ide
+Import-Package: org.eclipse.capra.ui.helpers
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/org.eclipse.capra.handler.marker/build.properties b/org.eclipse.capra.handler.marker/build.properties
new file mode 100644
index 0000000..9fc85e9
--- /dev/null
+++ b/org.eclipse.capra.handler.marker/build.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2016 Chalmers | University of Gothenburg, rt-labs and others.
+# 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
+#  
+#   Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/org.eclipse.capra.handler.marker/plugin.xml b/org.eclipse.capra.handler.marker/plugin.xml
new file mode 100644
index 0000000..0ca44c2
--- /dev/null
+++ b/org.eclipse.capra.handler.marker/plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    Copyright (c) 2016 Chalmers | University of Gothenburg, rt-labs and others.
+    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
+     
+      Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.marker.MarkerHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.marker.MarkerHandler">
+      </artifactHandler>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.capra.handler.marker/pom.xml b/org.eclipse.capra.handler.marker/pom.xml
new file mode 100644
index 0000000..9ec3fb7
--- /dev/null
+++ b/org.eclipse.capra.handler.marker/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2016 Chalmers | University of Gothenburg, rt-labs and others.
+    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
+     
+      Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<relativePath>../pom.xml</relativePath>
+		<groupId>org.eclipse.capra</groupId>
+		<artifactId>parent</artifactId>
+		<version>0.7.0-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.marker</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java b/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java
new file mode 100644
index 0000000..374d06d
--- /dev/null
+++ b/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Chalmers | University of Gothenburg, rt-labs and others.
+ * 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
+ *  
+ *   Contributors:
+ *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.capra.handler.marker;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.handlers.IArtifactUnpacker;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ui.texteditor.MarkerUtilities;
+import org.eclipse.ui.views.markers.MarkerItem;
+
+/**
+ * Handler to allow tracing to and from IMarker instances as used by Eclipse to associate notes with resources.
+ */
+public class MarkerHandler extends AbstractArtifactHandler<IMarker> implements IArtifactUnpacker<MarkerItem, IMarker> {
+
+	@Override
+	public EObject createWrapper(IMarker artifact, EObject artifactModel) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+		IResource resource = artifact.getResource();
+
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(),
+				resource.getLocationURI().toString(), Long.toString(artifact.getId()), this.getDisplayName(artifact),
+				resource.getFullPath().toString());
+
+		return wrapper;
+	}
+
+	@Override
+	public IMarker resolveWrapper(EObject wrapper) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		IResource target = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot()
+				.findMember(adapter.getArtifactPath(wrapper));
+		Long id = new Long(adapter.getArtifactIdentifier(wrapper));
+		IMarker marker = target.getMarker(id);
+		return marker;
+	}
+
+	@Override
+	public String getDisplayName(IMarker artifact) {
+		return MarkerUtilities.getMarkerType(artifact) + ": " + MarkerUtilities.getMessage(artifact);
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public IMarker unpack(MarkerItem container) {
+		return container.getMarker();
+	}
+}