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
.TmfUiPlugin
;
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();
73 IWorkbenchPage page
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getActivePage();
74 IWorkbenchPart part
= page
.getActivePart();
75 ISelectionProvider selectionProvider
= part
.getSite().getSelectionProvider();
76 if (selectionProvider
== null)
78 ISelection selection
= selectionProvider
.getSelection();
80 // Make sure selection contains only traces
82 if (selection
instanceof TreeSelection
) {
83 fSelection
= (TreeSelection
) selection
;
84 @SuppressWarnings("unchecked")
85 Iterator
<Object
> iterator
= fSelection
.iterator();
86 while (iterator
.hasNext()) {
87 Object element
= iterator
.next();
88 if (!(element
instanceof TmfTraceElement
)) {
94 // If we get here, either nothing is selected or everything is a trace
95 return !selection
.isEmpty();
98 // ------------------------------------------------------------------------
100 // ------------------------------------------------------------------------
103 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
105 // Check if we are closing down
106 IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
111 for (Object element
: fSelection
.toList()) {
112 TmfTraceElement trace
= (TmfTraceElement
) element
;
113 trace
= trace
.getElementUnderTraceFolder();
114 IResource resource
= trace
.getResource();
115 if (resource
!= null) {
117 // Set the properties for this resource
118 String bundleName
= event
.getParameter(BUNDLE_PARAMETER
);
119 String traceType
= event
.getParameter(TYPE_PARAMETER
);
120 String iconUrl
= event
.getParameter(ICON_PARAMETER
);
121 ok
&= propagateProperties(trace
, bundleName
, traceType
, iconUrl
);
122 } catch (CoreException e
) {
123 TmfUiPlugin
.getDefault().logError("Error selecting trace type for trace" + trace
.getName(), e
); //$NON-NLS-1$
127 ((ITmfProjectModelElement
) fSelection
.getFirstElement()).getProject().refresh();
130 MessageBox mb
= new MessageBox(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT
.ICON_ERROR
);
131 mb
.setText(Messages
.SelectTraceTypeHandler_Title
);
132 mb
.setMessage(Messages
.SelectTraceTypeHandler_InvalidTraceType
);
139 private boolean propagateProperties(TmfTraceElement trace
, String bundleName
, String traceType
, String iconUrl
) throws CoreException
{
141 IResource svResource
= trace
.getResource();
142 String svBundleName
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACEBUNDLE
);
143 String svTraceType
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACETYPE
);
144 String svIconUrl
= svResource
.getPersistentProperty(TmfCommonConstants
.TRACEICON
);
146 setProperties(trace
.getResource(), bundleName
, traceType
, iconUrl
);
147 trace
.refreshTraceType();
148 if (!validateTraceType(trace
)) {
149 setProperties(trace
.getResource(), svBundleName
, svTraceType
, svIconUrl
);
150 trace
.refreshTraceType();
154 trace
.refreshTraceType();
156 if (trace
.getParent() instanceof TmfTraceFolder
) {
157 TmfExperimentFolder experimentFolder
= trace
.getProject().getExperimentsFolder();
158 for (final ITmfProjectModelElement experiment
: experimentFolder
.getChildren()) {
159 for (final ITmfProjectModelElement child
: experiment
.getChildren()) {
160 if (child
instanceof TmfTraceElement
) {
161 TmfTraceElement linkedTrace
= (TmfTraceElement
) child
;
162 if (linkedTrace
.equals(trace
)) {
163 IResource resource
= linkedTrace
.getResource();
164 setProperties(resource
, bundleName
, traceType
, iconUrl
);
165 linkedTrace
.refreshTraceType();
175 private void setProperties(IResource resource
, String bundleName
, String traceType
, String iconUrl
) throws CoreException
{
176 resource
.setPersistentProperty(TmfCommonConstants
.TRACEBUNDLE
, bundleName
);
177 resource
.setPersistentProperty(TmfCommonConstants
.TRACETYPE
, traceType
);
178 resource
.setPersistentProperty(TmfCommonConstants
.TRACEICON
, iconUrl
);
181 private boolean validateTraceType(TmfTraceElement trace
) {
182 IProject project
= trace
.getProject().getResource();
183 ITmfTrace
<?
> tmfTrace
= null;
185 tmfTrace
= trace
.instantiateTrace();
186 return (tmfTrace
!= null && tmfTrace
.validate(project
, trace
.getLocation().getPath()));
188 if (tmfTrace
!= null)