Fix pom:s for the next release (1.0.0)
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / project / handlers / SelectTraceTypeHandler.java
CommitLineData
12c155f5
FC
1/*******************************************************************************
2 * Copyright (c) 2011 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 *******************************************************************************/
12
13package org.eclipse.linuxtools.tmf.ui.project.handlers;
14
15import java.util.Iterator;
16
17import org.eclipse.core.commands.AbstractHandler;
18import org.eclipse.core.commands.ExecutionEvent;
19import org.eclipse.core.commands.ExecutionException;
20import org.eclipse.core.resources.IProject;
21import org.eclipse.core.resources.IResource;
22import org.eclipse.core.runtime.CoreException;
23import org.eclipse.jface.viewers.ISelection;
24import org.eclipse.jface.viewers.TreeSelection;
25import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
26import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
27import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentFolder;
28import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
29import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
30import org.eclipse.swt.SWT;
31import org.eclipse.swt.widgets.MessageBox;
32import org.eclipse.ui.IWorkbenchPage;
33import org.eclipse.ui.IWorkbenchPart;
34import org.eclipse.ui.IWorkbenchWindow;
35import org.eclipse.ui.PlatformUI;
36
37/**
38 * <b><u>SetTraceTypeHandler</u></b>
39 * <p>
40 */
41public class SelectTraceTypeHandler extends AbstractHandler {
42
43 // ------------------------------------------------------------------------
44 // Constants
45 // ------------------------------------------------------------------------
46
47 private final String BUNDLE_PARAMETER = "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.bundle"; //$NON-NLS-1$
48 private final String TYPE_PARAMETER = "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.type"; //$NON-NLS-1$
49 private final String ICON_PARAMETER = "org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.select_trace_type.icon"; //$NON-NLS-1$
50
51 // ------------------------------------------------------------------------
52 // Attributes
53 // ------------------------------------------------------------------------
54
55 private TreeSelection fSelection = null;
56
57 // ------------------------------------------------------------------------
58 // Validation
59 // ------------------------------------------------------------------------
60
61 @Override
62 public boolean isEnabled() {
63
64 // Check if we are closing down
65 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
66 if (window == null)
67 return false;
68
69 // Get the selection
70 IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
71 IWorkbenchPart part = page.getActivePart();
72 ISelection selection = part.getSite().getSelectionProvider().getSelection();
73
74 // Make sure selection contains only traces
75 fSelection = null;
76 if (selection instanceof TreeSelection) {
77 fSelection = (TreeSelection) selection;
78 @SuppressWarnings("unchecked")
79 Iterator<Object> iterator = fSelection.iterator();
80 while (iterator.hasNext()) {
81 Object element = iterator.next();
82 if (!(element instanceof TmfTraceElement)) {
83 return false;
84 }
85 }
86 }
87
88 // If we get here, either nothing is selected or everything is a trace
89 return !selection.isEmpty();
90 }
91
92 // ------------------------------------------------------------------------
93 // Execution
94 // ------------------------------------------------------------------------
95
96 @Override
97 public Object execute(ExecutionEvent event) throws ExecutionException {
98
99 // Check if we are closing down
100 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
101 if (window == null)
102 return null;
103
104 boolean ok = true;
105 for (Object element : fSelection.toList()) {
106 TmfTraceElement trace = (TmfTraceElement) element;
107 IResource resource = trace.getResource();
108 if (resource != null) {
109 try {
110 // Set the properties for this resource
111 String bundleName = event.getParameter(BUNDLE_PARAMETER);
112 String traceType = event.getParameter(TYPE_PARAMETER);
113 String iconUrl = event.getParameter(ICON_PARAMETER);
114 ok &= propagateProperties(trace, bundleName, traceType, iconUrl);
115 } catch (CoreException e) {
116 e.printStackTrace();
117 }
118 }
119 }
120 ((ITmfProjectModelElement) fSelection.getFirstElement()).getProject().refresh();
121
122 if (!ok) {
123 MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.ICON_ERROR);
124 mb.setText(Messages.SelectTraceTypeHandler_Title);
125 mb.setMessage(Messages.SelectTraceTypeHandler_InvalidTraceType);
126 mb.open();
127 }
128
129 return null;
130 }
131
132 private boolean propagateProperties(TmfTraceElement trace, String bundleName, String traceType, String iconUrl) throws CoreException {
133
134 IResource svResource = trace.getResource();
135 String svBundleName = svResource.getPersistentProperty(TmfTraceElement.TRACEBUNDLE);
136 String svTraceType = svResource.getPersistentProperty(TmfTraceElement.TRACETYPE);
137 String svIconUrl = svResource.getPersistentProperty(TmfTraceElement.TRACEICON);
138
139 setProperties(trace.getResource(), bundleName, traceType, iconUrl);
140 trace.refreshTraceType();
141 if (!validateTraceType(trace)) {
142 setProperties(trace.getResource(), svBundleName, svTraceType, svIconUrl);
143 trace.refreshTraceType();
144 return false;
145 }
146
147 trace.refreshTraceType();
148
149 if (trace.getParent() instanceof TmfTraceFolder) {
150 TmfExperimentFolder experimentFolder = trace.getProject().getExperimentsFolder();
151 for (final ITmfProjectModelElement experiment : experimentFolder.getChildren()) {
152 for (final ITmfProjectModelElement child : experiment.getChildren()) {
153 if (child instanceof TmfTraceElement) {
154 TmfTraceElement linkedTrace = (TmfTraceElement) child;
155 if (linkedTrace.equals(trace)) {
156 IResource resource = linkedTrace.getResource();
157 setProperties(resource, bundleName, traceType, iconUrl);
158 linkedTrace.refreshTraceType();
159 }
160 }
161 }
162 }
163 }
c50b1d3b 164
12c155f5
FC
165 return true;
166 }
167
168 private void setProperties(IResource resource, String bundleName, String traceType, String iconUrl) throws CoreException {
169 resource.setPersistentProperty(TmfTraceElement.TRACEBUNDLE, bundleName);
170 resource.setPersistentProperty(TmfTraceElement.TRACETYPE, traceType);
171 resource.setPersistentProperty(TmfTraceElement.TRACEICON, iconUrl);
172 }
173
174 private boolean validateTraceType(TmfTraceElement trace) {
175 IProject project = trace.getProject().getResource();
176 ITmfTrace<?> tmfTrace = null;
177 try {
178 tmfTrace = trace.instantiateTrace();
179 return (tmfTrace != null && tmfTrace.validate(project, trace.getLocation().getPath()));
180 } finally {
181 if (tmfTrace != null)
182 tmfTrace.dispose();
183 }
184 }
185
186}
This page took 0.031953 seconds and 5 git commands to generate.