Matrix view now uses operation to delete links This patch updates the matrix view to use the new operation to delete trace links and also adds a security question before deletion. Change-Id: I8bcfcf2028d44d8ebf8b957e4ec0c5208df7dd95
diff --git a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/views/TraceabilityMatrixView.java b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/views/TraceabilityMatrixView.java index be78530..936fca7 100644 --- a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/views/TraceabilityMatrixView.java +++ b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/views/TraceabilityMatrixView.java
@@ -38,6 +38,10 @@ import org.eclipse.capra.ui.matrix.TraceabilityMatrixHeaderToolTip; import org.eclipse.capra.ui.matrix.TraceabilityMatrixRowHeaderDataProvider; import org.eclipse.capra.ui.matrix.selection.TraceabilityMatrixSelectionProvider; +import org.eclipse.capra.ui.operations.DeleteTraceOperation; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.operations.IOperationHistory; +import org.eclipse.core.commands.operations.OperationHistoryFactory; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; @@ -48,6 +52,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.nebula.widgets.nattable.NatTable; import org.eclipse.nebula.widgets.nattable.config.AbstractRegistryConfiguration; @@ -86,6 +91,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchPage; @@ -115,6 +121,10 @@ */ public class TraceabilityMatrixView extends ViewPart { + private static final String CONFIRM_DELETION_QUESTION = "Are you sure you want to delete the trace link?"; + + private static final String CONFIRM_DELETION_TITLE = "Delete trace link"; + /** * The ID of the view as specified by the extension. */ @@ -133,7 +143,6 @@ private ResourceSet resourceSet = EditingDomainHelper.getResourceSet(); private final TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get(); - private TraceMetaModelAdapter metamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get(); private TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get(); private TraceabilityMatrixDataProvider bodyDataProvider; @@ -319,7 +328,7 @@ } else { // Without a selection, show a matrix of all traces if (traceModel != null) { - traces = metamodelAdapter.getAllTraceLinks(traceModel); + traces = traceAdapter.getAllTraceLinks(traceModel); } } // If the current selection does not contain elements from the trace model, it @@ -453,11 +462,24 @@ public void run() { if (selectedModels != null && !selectedModels.isEmpty() && selectedModels.get(0) instanceof ConnectionAdapter) { - ConnectionAdapter adapter = (ConnectionAdapter) selectedModels.get(0); - Connection connection = adapter.getConnection(); - EObject traceModel = persistenceAdapter.getTraceModel(resourceSet); - traceAdapter.deleteTrace(List.of(connection), traceModel); - showAllAction.run(); + Shell shell = TraceabilityMatrixView.this.getSite().getShell(); + if (MessageDialog.open(MessageDialog.QUESTION, shell, CONFIRM_DELETION_TITLE, + CONFIRM_DELETION_QUESTION, SWT.NONE)) { + ConnectionAdapter adapter = (ConnectionAdapter) selectedModels.get(0); + Connection connection = adapter.getConnection(); + + DeleteTraceOperation deleteTraceOperation = new DeleteTraceOperation(CONFIRM_DELETION_TITLE, + connection); + deleteTraceOperation.addContext(IOperationHistory.GLOBAL_UNDO_CONTEXT); + + IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory(); + try { + operationHistory.execute(deleteTraceOperation, null, TraceabilityMatrixView.this.getSite()); + } catch (ExecutionException e) { + // Deliberately do nothing. Errors should be caught by the operation. + } + showAllAction.run(); + } } } };