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
.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
.tmf
.core
.trace
.ITmfTrace
;
27 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.ITmfProjectModelElement
;
28 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfExperimentFolder
;
29 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfTraceElement
;
30 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfTraceFolder
;
31 import org
.eclipse
.swt
.SWT
;
32 import org
.eclipse
.swt
.widgets
.MessageBox
;
33 import org
.eclipse
.ui
.IWorkbenchPage
;
34 import org
.eclipse
.ui
.IWorkbenchPart
;
35 import org
.eclipse
.ui
.IWorkbenchWindow
;
36 import org
.eclipse
.ui
.PlatformUI
;
39 * <b><u>SetTraceTypeHandler</u></b>
42 public class SelectTraceTypeHandler
extends AbstractHandler
{
44 // ------------------------------------------------------------------------
46 // ------------------------------------------------------------------------
48 private final String BUNDLE_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.bundle"; //$NON-NLS-1$
49 private final String TYPE_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.type"; //$NON-NLS-1$
50 private final String ICON_PARAMETER
= "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.icon"; //$NON-NLS-1$
52 // ------------------------------------------------------------------------
54 // ------------------------------------------------------------------------
56 private TreeSelection fSelection
= null;
58 // ------------------------------------------------------------------------
60 // ------------------------------------------------------------------------
63 public boolean isEnabled() {
65 // Check if we are closing down
66 IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
71 IWorkbenchPage page
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getActivePage();
72 IWorkbenchPart part
= page
.getActivePart();
73 ISelectionProvider selectionProvider
= part
.getSite().getSelectionProvider();
74 if (selectionProvider
== null)
76 ISelection selection
= selectionProvider
.getSelection();
78 // Make sure selection contains only traces
80 if (selection
instanceof TreeSelection
) {
81 fSelection
= (TreeSelection
) selection
;
82 @SuppressWarnings("unchecked")
83 Iterator
<Object
> iterator
= fSelection
.iterator();
84 while (iterator
.hasNext()) {
85 Object element
= iterator
.next();
86 if (!(element
instanceof TmfTraceElement
)) {
92 // If we get here, either nothing is selected or everything is a trace
93 return !selection
.isEmpty();
96 // ------------------------------------------------------------------------
98 // ------------------------------------------------------------------------
101 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
103 // Check if we are closing down
104 IWorkbenchWindow window
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow();
109 for (Object element
: fSelection
.toList()) {
110 TmfTraceElement trace
= (TmfTraceElement
) element
;
111 IResource resource
= trace
.getResource();
112 if (resource
!= null) {
114 // Set the properties for this resource
115 String bundleName
= event
.getParameter(BUNDLE_PARAMETER
);
116 String traceType
= event
.getParameter(TYPE_PARAMETER
);
117 String iconUrl
= event
.getParameter(ICON_PARAMETER
);
118 ok
&= propagateProperties(trace
, bundleName
, traceType
, iconUrl
);
119 } catch (CoreException e
) {
124 ((ITmfProjectModelElement
) fSelection
.getFirstElement()).getProject().refresh();
127 MessageBox mb
= new MessageBox(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT
.ICON_ERROR
);
128 mb
.setText(Messages
.SelectTraceTypeHandler_Title
);
129 mb
.setMessage(Messages
.SelectTraceTypeHandler_InvalidTraceType
);
136 private boolean propagateProperties(TmfTraceElement trace
, String bundleName
, String traceType
, String iconUrl
) throws CoreException
{
138 IResource svResource
= trace
.getResource();
139 String svBundleName
= svResource
.getPersistentProperty(TmfTraceElement
.TRACEBUNDLE
);
140 String svTraceType
= svResource
.getPersistentProperty(TmfTraceElement
.TRACETYPE
);
141 String svIconUrl
= svResource
.getPersistentProperty(TmfTraceElement
.TRACEICON
);
143 setProperties(trace
.getResource(), bundleName
, traceType
, iconUrl
);
144 trace
.refreshTraceType();
145 if (!validateTraceType(trace
)) {
146 setProperties(trace
.getResource(), svBundleName
, svTraceType
, svIconUrl
);
147 trace
.refreshTraceType();
151 trace
.refreshTraceType();
153 if (trace
.getParent() instanceof TmfTraceFolder
) {
154 TmfExperimentFolder experimentFolder
= trace
.getProject().getExperimentsFolder();
155 for (final ITmfProjectModelElement experiment
: experimentFolder
.getChildren()) {
156 for (final ITmfProjectModelElement child
: experiment
.getChildren()) {
157 if (child
instanceof TmfTraceElement
) {
158 TmfTraceElement linkedTrace
= (TmfTraceElement
) child
;
159 if (linkedTrace
.equals(trace
)) {
160 IResource resource
= linkedTrace
.getResource();
161 setProperties(resource
, bundleName
, traceType
, iconUrl
);
162 linkedTrace
.refreshTraceType();
172 private void setProperties(IResource resource
, String bundleName
, String traceType
, String iconUrl
) throws CoreException
{
173 resource
.setPersistentProperty(TmfTraceElement
.TRACEBUNDLE
, bundleName
);
174 resource
.setPersistentProperty(TmfTraceElement
.TRACETYPE
, traceType
);
175 resource
.setPersistentProperty(TmfTraceElement
.TRACEICON
, iconUrl
);
178 private boolean validateTraceType(TmfTraceElement trace
) {
179 IProject project
= trace
.getProject().getResource();
180 ITmfTrace
<?
> tmfTrace
= null;
182 tmfTrace
= trace
.instantiateTrace();
183 return (tmfTrace
!= null && tmfTrace
.validate(project
, trace
.getLocation().getPath()));
185 if (tmfTrace
!= null)