Bug 547081: Use correct handler to get display name

There are several places where the display name
of a selection is needed. This change makes sure
that in each of these places, the getDisplayName()
method from the right handler is used.
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java b/bundles/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java
index f33ccac..ef20f50 100644
--- a/bundles/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java
@@ -17,11 +17,12 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.Optional;
 
 import org.eclipse.capra.core.adapters.AbstractMetaModelAdapter;
 import org.eclipse.capra.core.adapters.Connection;
 import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.generic.tracemodel.GenericTraceModel;
 import org.eclipse.capra.generic.tracemodel.RelatedTo;
@@ -71,18 +72,19 @@
 		EObject trace = TracemodelFactory.eINSTANCE.create(traceType);
 		RelatedTo relatedToTrace = (RelatedTo) trace;
 		relatedToTrace.getItem().addAll(selection);
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
 
 		// String builder to build the name of the trace link so by adding the
 		// elements it connects so as to make it easy for a user to visually
 		// differentiate trace links
 		StringBuilder name = new StringBuilder();
 		for (Object obj : selection) {
-				name.append(" ").append(ExtensionPointHelper.getArtifactHandlers().stream()
-						.map(handler -> handler.withCastedHandler(obj, (h, e) -> h.getDisplayName(e)))
-						.filter(Optional::isPresent)
-						.map(Optional::get)
-						.findFirst()
-						.orElseGet(obj::toString));
+			name.append(" ")
+					.append(artifactHelper.getHandler(artifactHelper.unwrapWrapper(obj)).get()
+							.withCastedHandler(artifactHelper.unwrapWrapper(obj), (h, e) -> h.getDisplayName(e))
+							.orElseGet(obj::toString));
 		}
 		relatedToTrace.setName(name.toString());
 		tm.getTraces().add(relatedToTrace);
diff --git a/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeLabelProvider.java b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeLabelProvider.java
index f8d2eac..a6a6790 100644
--- a/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeLabelProvider.java
+++ b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeLabelProvider.java
@@ -13,9 +13,12 @@
  *******************************************************************************/
 package org.eclipse.capra.ui.zest;
 
-import java.util.Optional;
-
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.jface.viewers.LabelProvider;
 
 /**
@@ -28,12 +31,11 @@
 
 	@Override
 	public String getText(Object element) {
-		return ExtensionPointHelper.getArtifactHandlers().stream()
-			.map(handler -> handler.withCastedHandler(element, (h, e) -> h.getDisplayName(e)))
-			.filter(Optional::isPresent)
-			.map(Optional::get)
-			.findFirst()
-			.orElseGet(element::toString);
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		IArtifactHandler<?> handler = artifactHelper.getHandler(element).get();
+		return handler.withCastedHandler(element, (h, o) -> h.getDisplayName(o)).orElseGet(element::toString);
 	}
 
 	// TODO Add labels for the edges
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java
index 8f8ec67..c6fc374 100644
--- a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java
@@ -21,6 +21,7 @@
 
 import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
 import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
 import org.eclipse.capra.core.helpers.ArtifactHelper;
 import org.eclipse.capra.core.helpers.EMFHelper;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
@@ -97,7 +98,9 @@
 		});
 		dialog.setTitle("Select the trace type you want to create");
 		dialog.setElements(traceTypes.toArray());
-		dialog.setMessage("Selection: " + wrappers.stream().map(EMFHelper::getIdentifier).collect(Collectors.toList()));
+
+		dialog.setMessage(
+				"Selection: " + wrappers.stream().map(this::getSelectionDisplayName).collect(Collectors.toList()));
 
 		if (dialog.open() == Window.OK) {
 			return Optional.of((EClass) dialog.getFirstResult());
@@ -106,4 +109,15 @@
 		return Optional.empty();
 	}
 
+	private String getSelectionDisplayName(EObject element) {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		IArtifactHandler<?> handler = artifactHelper.getHandler(artifactHelper.unwrapWrapper(element)).get();
+
+		return handler.withCastedHandler(artifactHelper.unwrapWrapper(element), (h, o) -> h.getDisplayName(o))
+				.orElse(EMFHelper.getIdentifier(element));
+
+	}
+
 }
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
index d01c427..5228867 100644
--- a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
@@ -24,9 +24,13 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
 import org.eclipse.capra.core.handlers.IArtifactHandler;
 import org.eclipse.capra.core.handlers.PriorityHandler;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
@@ -97,9 +101,11 @@
 
 		@Override
 		public String getText(Object element) {
-			return ExtensionPointHelper.getArtifactHandlers().stream()
-					.map(handler -> handler.withCastedHandler(element, (h, e) -> h.getDisplayName(e)))
-					.filter(Optional::isPresent).map(Optional::get).findFirst().orElseGet(element::toString);
+			TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+			EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+			ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+			IArtifactHandler<?> handler = artifactHelper.getHandler(element).get();
+			return handler.withCastedHandler(element, (h, o) -> h.getDisplayName(o)).orElseGet(element::toString);
 		}
 
 		@Override
@@ -228,9 +234,8 @@
 		} else if (availableHandlers.size() > 1 && !priorityHandler.isPresent()) {
 			MessageDialog.openWarning(getSite().getShell(), "Multiple handlers for selected item",
 					"There are multiple handlers for " + target + " so it will be ignored.");
-		} else if (availableHandlers.size() > 1 && !priorityHandler.isPresent()) {
-			// TODO check if the priority handler can give exactly one artifact
-			// handler, if not flag for multiple selections
+		} else if (availableHandlers.size() > 1 && priorityHandler.isPresent()) {
+			return true;
 		} else {
 			return true;
 		}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
index 93e6568..6fc4109 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
@@ -82,7 +82,7 @@
 	private static final String EXPECTED_TEXT_FOR_GOTO_LINKS = "@startuml\n"
 			+ "object \"TestClass [[platform:/resource/TestProject_java/src/org/eclipse/capra/test/TestClass.java#org.eclipse.capra.test.TestClass (Go to)]]\" as o0 #pink\n"
 			+ "object \"CClass.c [[platform:/resource/TestProject_C/CClass.c#CClass.c (Go to)]]\" as o1\n"
-			+ "o0--o1: TestClass : ArtifactWrapper CClass.c : ArtifactWrapper : RelatedTo\n" + "@enduml\n";
+			+ "o0--o1: TestClass CClass.c : RelatedTo\n" + "@enduml\n";
 
 	@Before
 	public void init() throws CoreException {