tmf: log when an error message is displayed in a MessageBox
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / internal / tmf / ui / project / handlers / ClearTraceOffsetHandler.java
1 /*******************************************************************************
2 * Copyright (c) 2014, 2015 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.tracecompass.internal.tmf.ui.project.handlers;
14
15 import java.lang.reflect.InvocationTargetException;
16 import java.util.HashSet;
17 import java.util.Iterator;
18 import java.util.Set;
19
20 import org.eclipse.core.commands.AbstractHandler;
21 import org.eclipse.core.commands.ExecutionEvent;
22 import org.eclipse.core.commands.ExecutionException;
23 import org.eclipse.core.runtime.CoreException;
24 import org.eclipse.core.runtime.IProgressMonitor;
25 import org.eclipse.core.runtime.OperationCanceledException;
26 import org.eclipse.jface.viewers.ISelection;
27 import org.eclipse.jface.viewers.StructuredSelection;
28 import org.eclipse.swt.SWT;
29 import org.eclipse.swt.widgets.Display;
30 import org.eclipse.swt.widgets.MessageBox;
31 import org.eclipse.swt.widgets.Shell;
32 import org.eclipse.tracecompass.internal.tmf.ui.project.operations.TmfWorkspaceModifyOperation;
33 import org.eclipse.tracecompass.tmf.core.synchronization.TimestampTransformFactory;
34 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
35 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
36 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
37 import org.eclipse.tracecompass.tmf.ui.project.model.TraceUtils;
38 import org.eclipse.ui.PlatformUI;
39 import org.eclipse.ui.handlers.HandlerUtil;
40
41 /**
42 * Clear Trace Offset Handler
43 *
44 * @author Patrick Tasse
45 */
46 public class ClearTraceOffsetHandler extends AbstractHandler {
47
48 // ------------------------------------------------------------------------
49 // Execution
50 // ------------------------------------------------------------------------
51
52 @Override
53 public Object execute(final ExecutionEvent event) throws ExecutionException {
54
55 ISelection selection = HandlerUtil.getCurrentSelection(event);
56
57 // Get the set of selected trace elements
58 final Set<TmfTraceElement> traceElements = new HashSet<>();
59 if (selection instanceof StructuredSelection) {
60 Iterator<Object> iterator = ((StructuredSelection) selection).iterator();
61 while (iterator.hasNext()) {
62 Object element = iterator.next();
63 if (element instanceof TmfTraceElement) {
64 TmfTraceElement trace = (TmfTraceElement) element;
65 traceElements.add(trace.getElementUnderTraceFolder());
66 } else if (element instanceof TmfExperimentElement) {
67 TmfExperimentElement exp = (TmfExperimentElement) element;
68 for (TmfTraceElement trace : exp.getTraces()) {
69 traceElements.add(trace.getElementUnderTraceFolder());
70 }
71 } else if (element instanceof TmfTraceFolder) {
72 TmfTraceFolder folder = (TmfTraceFolder) element;
73 traceElements.addAll(folder.getTraces());
74 }
75 }
76 }
77
78 if (traceElements.isEmpty()) {
79 return null;
80 }
81
82 Shell shell = HandlerUtil.getActiveShellChecked(event);
83 MessageBox mb = new MessageBox(shell, SWT.ICON_QUESTION | SWT.CANCEL | SWT.OK);
84 mb.setText(Messages.ClearTraceOffsetHandler_Title);
85 mb.setMessage(Messages.ClearTraceOffsetHandler_ConfirmMessage);
86 if (mb.open() != SWT.OK) {
87 return null;
88 }
89
90 TmfWorkspaceModifyOperation operation = new TmfWorkspaceModifyOperation() {
91 @Override
92 public void execute(IProgressMonitor monitor) throws CoreException {
93 for (final TmfTraceElement trace : traceElements) {
94 if (monitor.isCanceled()) {
95 throw new OperationCanceledException();
96 }
97 if (!TimestampTransformFactory.getTimestampTransform(trace.getResource()).equals(TimestampTransformFactory.getDefaultTransform())) {
98 Display.getDefault().syncExec(new Runnable() {
99 @Override
100 public void run() {
101 trace.closeEditors();
102 }
103 });
104 trace.deleteSupplementaryResources();
105 TimestampTransformFactory.setTimestampTransform(trace.getResource(), null);
106 trace.refreshSupplementaryFolder();
107 }
108 }
109 }
110 };
111 try {
112 PlatformUI.getWorkbench().getProgressService().run(true, true, operation);
113 } catch (InterruptedException e) {
114 return null;
115 } catch (InvocationTargetException e) {
116 TraceUtils.displayErrorMsg(e.toString(), e.getTargetException().toString());
117 return null;
118 }
119
120 return null;
121 }
122 }
This page took 0.033831 seconds and 5 git commands to generate.