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 @SuppressWarnings("unchecked")
87 Iterator
<Object
> iterator
= fSelection
.iterator();
88 while (iterator
.hasNext()) {
89 Object element
= iterator
.next();
90 if (!(element
instanceof TmfTraceElement
)) {
96 // If we get here, either nothing is selected or everything is a trace
97 return !selection
.isEmpty();
100 // ------------------------------------------------------------------------
102 // ------------------------------------------------------------------------
105 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
107 // Check if we are closing down
108 IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
109 if (window
== null) {
114 for (Object element
: fSelection
.toList()) {
115 TmfTraceElement trace
= (TmfTraceElement
) element
;
116 trace
= trace
.getElementUnderTraceFolder();
117 IResource resource
= trace
.getResource();
118 if (resource
!= null) {
120 // Set the properties for this resource
121 String bundleName
= event
.getParameter(BUNDLE_PARAMETER
);
122 String traceType
= event
.getParameter(TYPE_PARAMETER
);
123 String iconUrl
= event
.getParameter(ICON_PARAMETER
);
124 ok
&= propagateProperties(trace
, bundleName
, traceType
, iconUrl
);
125 } catch (CoreException e
) {
126 Activator
.getDefault().logError("Error selecting trace type for trace" + trace
.getName(), e
); //$NON-NLS-1$
130 ((ITmfProjectModelElement
) fSelection
.getFirstElement()).getProject().refresh();
133 MessageBox mb
= new MessageBox(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT
.ICON_ERROR
);
134 mb
.setText(Messages
.SelectTraceTypeHandler_Title
);
135 mb
.setMessage(Messages
.SelectTraceTypeHandler_InvalidTraceType
);
142 private static boolean propagateProperties(TmfTraceElement trace
,
143 String bundleName
, String traceType
, String iconUrl
)
144 throws CoreException
{
146 IResource svResource
= trace
.getResource();
147 String svBundleName
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACEBUNDLE
);
148 String svTraceType
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACETYPE
);
149 String svIconUrl
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACEICON
);
151 setProperties(trace
.getResource(), bundleName
, traceType
, iconUrl
);
152 trace
.refreshTraceType();
153 if (!validateTraceType(trace
)) {
154 setProperties(trace
.getResource(), svBundleName
, svTraceType
, svIconUrl
);
155 trace
.refreshTraceType();
159 trace
.refreshTraceType();
161 if (trace
.getParent() instanceof TmfTraceFolder
) {
162 TmfExperimentFolder experimentFolder
= trace
.getProject().getExperimentsFolder();
163 for (final ITmfProjectModelElement experiment
: experimentFolder
.getChildren()) {
164 for (final ITmfProjectModelElement child
: experiment
.getChildren()) {
165 if (child
instanceof TmfTraceElement
) {
166 TmfTraceElement linkedTrace
= (TmfTraceElement
) child
;
167 if (linkedTrace
.equals(trace
)) {
168 IResource resource
= linkedTrace
.getResource();
169 setProperties(resource
, bundleName
, traceType
, iconUrl
);
170 linkedTrace
.refreshTraceType();
180 private static void setProperties(IResource resource
, String bundleName
,
181 String traceType
, String iconUrl
) throws CoreException
{
182 resource
.setPersistentProperty(TmfCommonConstants
.TRACEBUNDLE
, bundleName
);
183 resource
.setPersistentProperty(TmfCommonConstants
.TRACETYPE
, traceType
);
184 resource
.setPersistentProperty(TmfCommonConstants
.TRACEICON
, iconUrl
);
187 private static boolean validateTraceType(TmfTraceElement trace
) {
188 IProject project
= trace
.getProject().getResource();
189 ITmfTrace tmfTrace
= null;
191 tmfTrace
= trace
.instantiateTrace();
192 return (tmfTrace
!= null && tmfTrace
.validate(project
, trace
.getLocation().getPath()));
194 if (tmfTrace
!= null) {