tmf: Remove the TRACEBUNDLE and TRACEICON properties
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / internal / tmf / ui / project / handlers / SelectTraceTypeHandler.java
1 /*******************************************************************************
2 * Copyright (c) 2011, 2013 Ericsson
3 *
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
8 *
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 * Patrick Tasse - Fix propagation to experiment traces
12 *******************************************************************************/
13
14 package org.eclipse.linuxtools.internal.tmf.ui.project.handlers;
15
16 import java.util.ArrayList;
17 import java.util.HashSet;
18 import java.util.Iterator;
19 import java.util.List;
20 import java.util.Set;
21
22 import org.eclipse.core.commands.AbstractHandler;
23 import org.eclipse.core.commands.ExecutionEvent;
24 import org.eclipse.core.commands.ExecutionException;
25 import org.eclipse.core.resources.IProject;
26 import org.eclipse.core.resources.IResource;
27 import org.eclipse.core.runtime.CoreException;
28 import org.eclipse.core.runtime.IStatus;
29 import org.eclipse.core.runtime.MultiStatus;
30 import org.eclipse.core.runtime.Status;
31 import org.eclipse.jface.dialogs.ErrorDialog;
32 import org.eclipse.jface.viewers.ISelection;
33 import org.eclipse.jface.viewers.ISelectionProvider;
34 import org.eclipse.jface.viewers.TreeSelection;
35 import org.eclipse.linuxtools.internal.tmf.ui.Activator;
36 import org.eclipse.linuxtools.tmf.core.TmfCommonConstants;
37 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
38 import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
39 import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentFolder;
40 import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;
41 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
42 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
43 import org.eclipse.swt.widgets.Shell;
44 import org.eclipse.ui.IWorkbenchPage;
45 import org.eclipse.ui.IWorkbenchPart;
46 import org.eclipse.ui.IWorkbenchWindow;
47 import org.eclipse.ui.PlatformUI;
48
49 /**
50 * <b><u>SetTraceTypeHandler</u></b>
51 * <p>
52 */
53 public class SelectTraceTypeHandler extends AbstractHandler {
54
55 // ------------------------------------------------------------------------
56 // Constants
57 // ------------------------------------------------------------------------
58
59 private static final String TYPE_PARAMETER = "org.eclipse.linuxtools.tmf.ui.commandparameter.select_trace_type.type"; //$NON-NLS-1$
60
61 // ------------------------------------------------------------------------
62 // Attributes
63 // ------------------------------------------------------------------------
64
65 private TreeSelection fSelection = null;
66
67 // ------------------------------------------------------------------------
68 // Validation
69 // ------------------------------------------------------------------------
70
71 @Override
72 public boolean isEnabled() {
73
74 // Check if we are closing down
75 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
76 if (window == null) {
77 return false;
78 }
79
80 // Get the selection
81 IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
82 IWorkbenchPart part = page.getActivePart();
83 if (part == null) {
84 return false;
85 }
86 ISelectionProvider selectionProvider = part.getSite().getSelectionProvider();
87 if (selectionProvider == null) {
88 return false;
89 }
90 ISelection selection = selectionProvider.getSelection();
91
92 // Make sure selection contains only traces
93 fSelection = null;
94 if (selection instanceof TreeSelection) {
95 fSelection = (TreeSelection) selection;
96 Iterator<Object> iterator = fSelection.iterator();
97 while (iterator.hasNext()) {
98 Object element = iterator.next();
99 if (!(element instanceof TmfTraceElement)) {
100 return false;
101 }
102 }
103 }
104
105 // If we get here, either nothing is selected or everything is a trace
106 return !selection.isEmpty();
107 }
108
109 // ------------------------------------------------------------------------
110 // Execution
111 // ------------------------------------------------------------------------
112
113 @Override
114 public Object execute(ExecutionEvent event) throws ExecutionException {
115
116 // Check if we are closing down
117 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
118 if (window == null) {
119 return null;
120 }
121 List<IStatus> statuses = new ArrayList<>();
122 Set<TmfProjectElement> projects = new HashSet<>();
123 boolean ok = true;
124 for (Object element : fSelection.toList()) {
125 TmfTraceElement trace = (TmfTraceElement) element;
126 trace = trace.getElementUnderTraceFolder();
127 IResource resource = trace.getResource();
128 if (resource != null) {
129 try {
130 // Set the properties for this resource
131 String traceType = event.getParameter(TYPE_PARAMETER);
132 String previousTraceType = trace.getTraceType();
133 IStatus status = propagateProperties(trace, traceType);
134 ok &= status.isOK();
135
136 if (status.isOK()) {
137 if ((previousTraceType != null) && (!traceType.equals(previousTraceType))) {
138 // Close the trace if open
139 trace.closeEditors();
140 // Delete all supplementary resources
141 trace.deleteSupplementaryResources();
142 }
143 } else {
144 statuses.add(status);
145 }
146 projects.add(trace.getProject());
147 } catch (CoreException e) {
148 Activator.getDefault().logError(Messages.SelectTraceTypeHandler_ErrorSelectingTrace + trace.getName(), e);
149 }
150 }
151 trace.getProject();
152 }
153 for (TmfProjectElement project : projects) {
154 project.refresh();
155 }
156
157 if (!ok) {
158 final Shell shell = window.getShell();
159 MultiStatus info = new MultiStatus(Activator.PLUGIN_ID, 1, Messages.SelectTraceTypeHandler_TraceFailedValidation, null);
160 if (statuses.size() > 1)
161 {
162 info = new MultiStatus(Activator.PLUGIN_ID, 1, Messages.SelectTraceTypeHandler_TracesFailedValidation, null);
163 }
164 for (IStatus status : statuses) {
165 info.add(status);
166 }
167 ErrorDialog.openError(shell, Messages.SelectTraceTypeHandler_Title, Messages.SelectTraceTypeHandler_InvalidTraceType, info);
168 }
169 return null;
170 }
171
172 private static IStatus propagateProperties(TmfTraceElement trace, String traceType)
173 throws CoreException {
174
175 IResource svResource = trace.getResource();
176 String svTraceType = svResource.getPersistentProperty(TmfCommonConstants.TRACETYPE);
177
178 setProperties(trace.getResource(), traceType);
179 trace.refreshTraceType();
180 final IStatus validateTraceType = validateTraceType(trace);
181 if (!validateTraceType.isOK()) {
182 setProperties(trace.getResource(), svTraceType);
183 trace.refreshTraceType();
184 return validateTraceType;
185 }
186
187 trace.refreshTraceType();
188
189 if (trace.getParent() instanceof TmfTraceFolder) {
190 TmfExperimentFolder experimentFolder = trace.getProject().getExperimentsFolder();
191 for (final ITmfProjectModelElement experiment : experimentFolder.getChildren()) {
192 for (final ITmfProjectModelElement child : experiment.getChildren()) {
193 if (child instanceof TmfTraceElement) {
194 TmfTraceElement linkedTrace = (TmfTraceElement) child;
195 if (linkedTrace.getName().equals(trace.getName())) {
196 IResource resource = linkedTrace.getResource();
197 setProperties(resource, traceType);
198 linkedTrace.refreshTraceType();
199 }
200 }
201 }
202 }
203 }
204
205 return Status.OK_STATUS;
206 }
207
208 private static void setProperties(IResource resource, String traceType) throws CoreException {
209 resource.setPersistentProperty(TmfCommonConstants.TRACETYPE, traceType);
210 }
211
212 private static IStatus validateTraceType(TmfTraceElement trace) {
213 IProject project = trace.getProject().getResource();
214 ITmfTrace tmfTrace = null;
215 IStatus validate = null;
216 try {
217 tmfTrace = trace.instantiateTrace();
218 if (tmfTrace != null) {
219 validate = tmfTrace.validate(project, trace.getLocation().getPath());
220 }
221 else{
222 validate = new Status(IStatus.ERROR, trace.getName(), "File does not exist : " + trace.getLocation().getPath()); //$NON-NLS-1$
223 }
224 } finally {
225 if (tmfTrace != null) {
226 tmfTrace.dispose();
227 }
228 }
229 if (validate == null) {
230 validate = new Status(IStatus.ERROR, "unknown", "unknown"); //$NON-NLS-1$ //$NON-NLS-2$
231 }
232 return validate;
233 }
234
235 }
This page took 0.035849 seconds and 5 git commands to generate.