Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan-Philipp Steghöfer2019-06-25 11:49:09 +0000
committerSalome Maro2019-07-02 11:01:47 +0000
commitb1481e5301e470a5d5c14c255ed37234566ab094 (patch)
tree71bdf62909e0ec012755116db66fd0bf156decaa
parent0aa692b3f552e1d9d6cfa537b9f58ca29698f62a (diff)
downloadorg.eclipse.capra-b1481e5301e470a5d5c14c255ed37234566ab094.tar.gz
org.eclipse.capra-b1481e5301e470a5d5c14c255ed37234566ab094.tar.xz
org.eclipse.capra-b1481e5301e470a5d5c14c255ed37234566ab094.zip
Added ability to select trace type in SelectionView
The selection view has been extended with a combo box that contains the applicable trace type for any set of artifacts that is dropped into the view. The combo box is updated whenever the selection changes. If the user selects an applicable trace type from the combo box, the link is created immediately. If no trace type is selected, a dialog for selecting it pops up as before. This feature has been inspired by the AMASS version of Eclipse Capra.
-rw-r--r--bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java7
-rw-r--r--bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java4
-rw-r--r--bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java124
3 files changed, 110 insertions, 25 deletions
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 cf70018d..32e8207f 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
@@ -13,6 +13,8 @@
*******************************************************************************/
package org.eclipse.capra.ui.handlers;
+import java.util.Optional;
+
import org.eclipse.capra.ui.operations.CreateTraceOperation;
import org.eclipse.capra.ui.views.SelectionView;
import org.eclipse.core.commands.AbstractHandler;
@@ -36,6 +38,11 @@ public class TraceCreationHandler extends AbstractHandler {
CreateTraceOperation createTraceOperation = new CreateTraceOperation("Create trace link",
SelectionView.getOpenedView().getSelection());
createTraceOperation.addContext(undoContext);
+ if (SelectionView.getOpenedView().getSelectedTraceType() != null) {
+ createTraceOperation.setChooseTraceType((a, b) -> {
+ return Optional.of(SelectionView.getOpenedView().getSelectedTraceType());
+ });
+ }
operationHistory.execute(createTraceOperation, null, adapter);
return null;
}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
index d2641cf1..5373929f 100644
--- a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
@@ -31,7 +31,9 @@ public class RemoveSelectionHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
List<Object> selection = TraceCreationHelper.extractSelectedElements(event);
- SelectionView.getOpenedView().removeFromSelection(selection);
+ if (selection != null) {
+ SelectionView.getOpenedView().removeFromSelection(selection);
+ }
return null;
}
}
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 45d3aa00..8412102d 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,6 +24,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
+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.handlers.PriorityHandler;
@@ -31,12 +32,16 @@ import org.eclipse.capra.core.helpers.ArtifactHelper;
import org.eclipse.capra.core.helpers.ExtensionPointHelper;
import org.eclipse.core.commands.operations.IOperationHistory;
import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
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;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
@@ -51,6 +56,8 @@ import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars;
@@ -82,10 +89,19 @@ public class SelectionView extends ViewPart {
org.eclipse.jface.util.LocalSelectionTransfer.getTransfer(),
org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance() };
- /** The actual table containing selected elements */
- public TableViewer viewer;
+ /**
+ * The actual table containing selected elements.
+ */
+ public TableViewer artifactTable;
+
+ /**
+ * The combo box to select the trace type.
+ */
+ public ComboViewer traceTypeCombo;
- /** The maintained selection of EObjects */
+ /**
+ * The maintained selection of EObjects .
+ */
private Set<Object> selection = new LinkedHashSet<>();
/**
@@ -104,22 +120,45 @@ public class SelectionView extends ViewPart {
*/
private RedoActionHandler redoAction;
- class ViewContentProvider implements IStructuredContentProvider {
+ private Collection<EClass> traceTypes = new ArrayList<>();
+
+ /**
+ * Content provider for the viewer that lists the artifacts.
+ */
+ class ArtifactTableContentProvider implements IStructuredContentProvider {
+
@Override
- public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
}
@Override
- public void dispose() {
+ public Object[] getElements(Object parent) {
+ return selection.toArray();
}
+ }
+
+ class TraceTypeContentProvider implements IStructuredContentProvider {
@Override
public Object[] getElements(Object parent) {
- return selection.toArray();
+ return traceTypes.toArray();
}
}
- class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
+ class TraceTypeLabelProvider extends LabelProvider implements IBaseLabelProvider {
+
+ @Override
+ public String getText(Object element) {
+ return (element == null || !(element instanceof EClass)) ? "" : ((EClass) element).getName();//$NON-NLS-1$
+ }
+
+ }
+
+ /**
+ * Label provider for the viewer that lists the artifacts.
+ */
+ class ArtifactTableLabelProvider extends LabelProvider implements ITableLabelProvider {
@Override
public String getText(Object element) {
@@ -166,7 +205,7 @@ public class SelectionView extends ViewPart {
TableViewer view;
public SelectionDropAdapter(TableViewer view) {
- super(viewer);
+ super(artifactTable);
this.view = view;
}
@@ -185,13 +224,24 @@ public class SelectionView extends ViewPart {
@Override
public void createPartControl(Composite parent) {
- viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
- viewer.setContentProvider(new ViewContentProvider());
- viewer.setLabelProvider(new ViewLabelProvider());
- viewer.setComparator(new NoChangeComparator());
- viewer.setInput(getViewSite());
-
- getSite().setSelectionProvider(viewer);
+ Composite area = new Composite(parent, SWT.NONE);
+ area.setLayout(new GridLayout(1, false));
+ area.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ traceTypeCombo = new ComboViewer(area);
+ traceTypeCombo.setContentProvider(new TraceTypeContentProvider());
+ traceTypeCombo.setLabelProvider(new TraceTypeLabelProvider());
+ traceTypeCombo.setInput(getViewSite());
+ traceTypeCombo.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ artifactTable = new TableViewer(area, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ artifactTable.setContentProvider(new ArtifactTableContentProvider());
+ artifactTable.setLabelProvider(new ArtifactTableLabelProvider());
+ artifactTable.setComparator(new NoChangeComparator());
+ artifactTable.setInput(getViewSite());
+ artifactTable.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ getSite().setSelectionProvider(artifactTable);
hookContextMenu();
int ops = DND.DROP_COPY | DND.DROP_MOVE;
@@ -202,7 +252,8 @@ public class SelectionView extends ViewPart {
transfers.addAll(ExtensionPointHelper.getExtensions(TRANSFER_EXTENSION_POINT_ID, "class").stream()
.map(Transfer.class::cast).collect(Collectors.toList()));
- viewer.addDropSupport(ops, transfers.toArray(DEFAULT_TRANSFERS), new SelectionDropAdapter(viewer));
+ artifactTable.addDropSupport(ops, transfers.toArray(DEFAULT_TRANSFERS),
+ new SelectionDropAdapter(artifactTable));
createGlobalActionHandlers();
}
@@ -216,14 +267,14 @@ public class SelectionView extends ViewPart {
}
});
- Menu menu = menuMgr.createContextMenu(viewer.getControl());
- viewer.getControl().setMenu(menu);
- getSite().registerContextMenu(menuMgr, viewer);
+ Menu menu = menuMgr.createContextMenu(artifactTable.getControl());
+ artifactTable.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, artifactTable);
}
@Override
public void setFocus() {
- viewer.getControl().setFocus();
+ artifactTable.getControl().setFocus();
}
@SuppressWarnings("unchecked")
@@ -243,7 +294,26 @@ public class SelectionView extends ViewPart {
} else if (validateSelection(data))
selection.add(data);
- viewer.refresh();
+ artifactTable.refresh();
+ refreshAvailableTraceTypes();
+ }
+
+ private void refreshAvailableTraceTypes() {
+ TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+ TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+
+ ResourceSet resourceSet = new ResourceSetImpl();
+ // add artifact model to resource set
+ EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+
+ ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+
+ // Create the artifact wrappers
+ List<EObject> wrappers = artifactHelper.createWrappers(new ArrayList<Object>(selection));
+
+ // Get the type of trace to be created
+ traceTypes = traceAdapter.getAvailableTraceTypes(wrappers);
+ traceTypeCombo.refresh();
}
private boolean validateSelection(Object target) {
@@ -272,7 +342,8 @@ public class SelectionView extends ViewPart {
public void clearSelection() {
selection.clear();
- viewer.refresh();
+ artifactTable.refresh();
+ refreshAvailableTraceTypes();
}
public static SelectionView getOpenedView() {
@@ -287,7 +358,12 @@ public class SelectionView extends ViewPart {
public void removeFromSelection(List<Object> currentselection) {
selection.removeAll(currentselection);
- viewer.refresh();
+ artifactTable.refresh();
+ refreshAvailableTraceTypes();
+ }
+
+ public EClass getSelectedTraceType() {
+ return (EClass) traceTypeCombo.getStructuredSelection().getFirstElement();
}
private void createGlobalActionHandlers() {

Back to the top