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 {