1 /*******************************************************************************
2 * Copyright (c) 2011 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 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.internal
.tmf
.ui
.project
.handlers
;
15 import java
.util
.Iterator
;
17 import org
.eclipse
.core
.commands
.AbstractHandler
;
18 import org
.eclipse
.core
.commands
.ExecutionEvent
;
19 import org
.eclipse
.core
.commands
.ExecutionException
;
20 import org
.eclipse
.core
.resources
.IProject
;
21 import org
.eclipse
.core
.resources
.IResource
;
22 import org
.eclipse
.core
.runtime
.CoreException
;
23 import org
.eclipse
.jface
.viewers
.ISelection
;
24 import org
.eclipse
.jface
.viewers
.ISelectionProvider
;
25 import org
.eclipse
.jface
.viewers
.TreeSelection
;
26 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.Activator
;
27 import org
.eclipse
.linuxtools
.tmf
.core
.TmfCommonConstants
;
28 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.ITmfTrace
;
29 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.ITmfProjectModelElement
;
30 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfExperimentFolder
;
31 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfTraceElement
;
32 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfTraceFolder
;
33 import org
.eclipse
.swt
.SWT
;
34 import org
.eclipse
.swt
.widgets
.MessageBox
;
35 import org
.eclipse
.ui
.IWorkbenchPage
;
36 import org
.eclipse
.ui
.IWorkbenchPart
;
37 import org
.eclipse
.ui
.IWorkbenchWindow
;
38 import org
.eclipse
.ui
.PlatformUI
;
41 * <b><u>SetTraceTypeHandler</u></b>
44 public class SelectTraceTypeHandler
extends AbstractHandler
{
46 // ------------------------------------------------------------------------
48 // ------------------------------------------------------------------------
50 private static final String BUNDLE_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.bundle"; //$NON-NLS-1$
51 private static final String TYPE_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.type"; //$NON-NLS-1$
52 private static final String ICON_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.icon"; //$NON-NLS-1$
54 // ------------------------------------------------------------------------
56 // ------------------------------------------------------------------------
58 private TreeSelection fSelection
= null;
60 // ------------------------------------------------------------------------
62 // ------------------------------------------------------------------------
65 public boolean isEnabled() {
67 // Check if we are closing down
68 IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
74 IWorkbenchPage page
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getActivePage();
75 IWorkbenchPart part
= page
.getActivePart();
76 ISelectionProvider selectionProvider
= part
.getSite().getSelectionProvider();
77 if (selectionProvider
== null) {
80 ISelection selection
= selectionProvider
.getSelection();
82 // Make sure selection contains only traces
84 if (selection
instanceof TreeSelection
) {
85 fSelection
= (TreeSelection
) selection
;
86 Iterator
<Object
> iterator
= fSelection
.iterator();
87 while (iterator
.hasNext()) {
88 Object element
= iterator
.next();
89 if (!(element
instanceof TmfTraceElement
)) {
95 // If we get here, either nothing is selected or everything is a trace
96 return !selection
.isEmpty();
99 // ------------------------------------------------------------------------
101 // ------------------------------------------------------------------------
104 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
106 // Check if we are closing down
107 IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
108 if (window
== null) {
113 for (Object element
: fSelection
.toList()) {
114 TmfTraceElement trace
= (TmfTraceElement
) element
;
115 trace
= trace
.getElementUnderTraceFolder();
116 IResource resource
= trace
.getResource();
117 if (resource
!= null) {
119 // Set the properties for this resource
120 String bundleName
= event
.getParameter(BUNDLE_PARAMETER
);
121 String traceType
= event
.getParameter(TYPE_PARAMETER
);
122 String iconUrl
= event
.getParameter(ICON_PARAMETER
);
123 ok
&= propagateProperties(trace
, bundleName
, traceType
, iconUrl
);
124 } catch (CoreException e
) {
125 Activator
.getDefault().logError("Error selecting trace type for trace" + trace
.getName(), e
); //$NON-NLS-1$
129 ((ITmfProjectModelElement
) fSelection
.getFirstElement()).getProject().refresh();
132 MessageBox mb
= new MessageBox(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT
.ICON_ERROR
);
133 mb
.setText(Messages
.SelectTraceTypeHandler_Title
);
134 mb
.setMessage(Messages
.SelectTraceTypeHandler_InvalidTraceType
);
141 private static boolean propagateProperties(TmfTraceElement trace
,
142 String bundleName
, String traceType
, String iconUrl
)
143 throws CoreException
{
145 IResource svResource
= trace
.getResource();
146 String svBundleName
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACEBUNDLE
);
147 String svTraceType
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACETYPE
);
148 String svIconUrl
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACEICON
);
150 setProperties(trace
.getResource(), bundleName
, traceType
, iconUrl
);
151 trace
.refreshTraceType();
152 if (!validateTraceType(trace
)) {
153 setProperties(trace
.getResource(), svBundleName
, svTraceType
, svIconUrl
);
154 trace
.refreshTraceType();
158 trace
.refreshTraceType();
160 if (trace
.getParent() instanceof TmfTraceFolder
) {
161 TmfExperimentFolder experimentFolder
= trace
.getProject().getExperimentsFolder();
162 for (final ITmfProjectModelElement experiment
: experimentFolder
.getChildren()) {
163 for (final ITmfProjectModelElement child
: experiment
.getChildren()) {
164 if (child
instanceof TmfTraceElement
) {
165 TmfTraceElement linkedTrace
= (TmfTraceElement
) child
;
166 if (linkedTrace
.equals(trace
)) {
167 IResource resource
= linkedTrace
.getResource();
168 setProperties(resource
, bundleName
, traceType
, iconUrl
);
169 linkedTrace
.refreshTraceType();
179 private static void setProperties(IResource resource
, String bundleName
,
180 String traceType
, String iconUrl
) throws CoreException
{
181 resource
.setPersistentProperty(TmfCommonConstants
.TRACEBUNDLE
, bundleName
);
182 resource
.setPersistentProperty(TmfCommonConstants
.TRACETYPE
, traceType
);
183 resource
.setPersistentProperty(TmfCommonConstants
.TRACEICON
, iconUrl
);
186 private static boolean validateTraceType(TmfTraceElement trace
) {
187 IProject project
= trace
.getProject().getResource();
188 ITmfTrace tmfTrace
= null;
190 tmfTrace
= trace
.instantiateTrace();
191 return (tmfTrace
!= null && tmfTrace
.validate(project
, trace
.getLocation().getPath()));
193 if (tmfTrace
!= null) {