1 /*******************************************************************************
2 * Copyright (c) 2014, 2015 Ericsson
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
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.tracecompass
.internal
.tmf
.ui
.project
.handlers
;
15 import java
.lang
.reflect
.InvocationTargetException
;
16 import java
.util
.HashSet
;
17 import java
.util
.Iterator
;
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
.dialogs
.MessageDialog
;
27 import org
.eclipse
.jface
.viewers
.ISelection
;
28 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
29 import org
.eclipse
.swt
.SWT
;
30 import org
.eclipse
.swt
.widgets
.Display
;
31 import org
.eclipse
.swt
.widgets
.MessageBox
;
32 import org
.eclipse
.swt
.widgets
.Shell
;
33 import org
.eclipse
.tracecompass
.internal
.tmf
.ui
.project
.operations
.TmfWorkspaceModifyOperation
;
34 import org
.eclipse
.tracecompass
.tmf
.core
.synchronization
.TimestampTransformFactory
;
35 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfExperimentElement
;
36 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfTraceElement
;
37 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfTraceFolder
;
38 import org
.eclipse
.ui
.PlatformUI
;
39 import org
.eclipse
.ui
.handlers
.HandlerUtil
;
42 * Clear Trace Offset Handler
44 * @author Patrick Tasse
46 public class ClearTraceOffsetHandler
extends AbstractHandler
{
48 // ------------------------------------------------------------------------
50 // ------------------------------------------------------------------------
53 public Object
execute(final ExecutionEvent event
) throws ExecutionException
{
55 ISelection selection
= HandlerUtil
.getCurrentSelection(event
);
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());
71 } else if (element
instanceof TmfTraceFolder
) {
72 TmfTraceFolder folder
= (TmfTraceFolder
) element
;
73 traceElements
.addAll(folder
.getTraces());
78 if (traceElements
.isEmpty()) {
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
) {
90 TmfWorkspaceModifyOperation operation
= new TmfWorkspaceModifyOperation() {
92 public void execute(IProgressMonitor monitor
) throws CoreException
{
93 for (final TmfTraceElement trace
: traceElements
) {
94 if (monitor
.isCanceled()) {
95 throw new OperationCanceledException();
97 if (!TimestampTransformFactory
.getTimestampTransform(trace
.getResource()).equals(TimestampTransformFactory
.getDefaultTransform())) {
98 Display
.getDefault().syncExec(new Runnable() {
101 trace
.closeEditors();
104 trace
.deleteSupplementaryResources();
105 TimestampTransformFactory
.setTimestampTransform(trace
.getResource(), null);
106 trace
.refreshSupplementaryFolder();
112 PlatformUI
.getWorkbench().getProgressService().run(true, true, operation
);
113 } catch (InterruptedException e
) {
115 } catch (InvocationTargetException e
) {
116 MessageDialog
.openError(shell
, e
.toString(), e
.getTargetException().toString());