Commit | Line | Data |
---|---|---|
eb1bab5b | 1 | /********************************************************************** |
11252342 | 2 | * Copyright (c) 2012, 2013 Ericsson |
cfdb727a | 3 | * |
eb1bab5b BH |
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 | |
cfdb727a AM |
8 | * |
9 | * Contributors: | |
eb1bab5b BH |
10 | * Bernd Hufmann - Initial API and implementation |
11 | **********************************************************************/ | |
115b4a01 | 12 | package org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl; |
eb1bab5b BH |
13 | |
14 | import java.util.ArrayList; | |
15 | import java.util.Iterator; | |
16 | import java.util.List; | |
17 | ||
18 | import org.eclipse.core.runtime.ListenerList; | |
9315aeee | 19 | import org.eclipse.linuxtools.internal.lttng2.core.control.model.TargetNodeState; |
115b4a01 BH |
20 | import org.eclipse.linuxtools.internal.lttng2.ui.Activator; |
21 | import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ITraceControlComponent; | |
22 | import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ITraceControlComponentChangedListener; | |
115b4a01 | 23 | import org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService; |
eb1bab5b BH |
24 | import org.eclipse.swt.graphics.Image; |
25 | ||
26 | /** | |
eb1bab5b BH |
27 | * <p> |
28 | * Base implementation for trace control component. | |
29 | * </p> | |
cfdb727a | 30 | * |
dbd4432d | 31 | * @author Bernd Hufmann |
eb1bab5b BH |
32 | */ |
33 | public class TraceControlComponent implements ITraceControlComponent { | |
34 | ||
35 | // ------------------------------------------------------------------------ | |
36 | // Constants | |
37 | // ------------------------------------------------------------------------ | |
38 | ||
39 | // ------------------------------------------------------------------------ | |
40 | // Attributes | |
41 | // ------------------------------------------------------------------------ | |
42 | /** | |
6503ae0f | 43 | * The name of the component |
eb1bab5b BH |
44 | */ |
45 | private String fName = ""; //$NON-NLS-1$ | |
46 | /** | |
47 | * The image to be displayed for the component. | |
48 | */ | |
49 | private Image fImage = null; | |
50 | /** | |
51 | * The tool tip to be displayed for the component. | |
52 | */ | |
53 | private String fToolTip = null; | |
54 | /** | |
55 | * The parent component. | |
56 | */ | |
57 | private ITraceControlComponent fParent = null; | |
58 | /** | |
59 | * The list if children components. | |
60 | */ | |
e0838ca1 | 61 | private final List<ITraceControlComponent> fChildren = new ArrayList<>(); |
eb1bab5b | 62 | /** |
6503ae0f | 63 | * The list of listeners to be notified about changes. |
eb1bab5b | 64 | */ |
cfdb727a | 65 | private final ListenerList fListeners = new ListenerList(); |
eb1bab5b BH |
66 | |
67 | // ------------------------------------------------------------------------ | |
68 | // Constructors | |
69 | // ------------------------------------------------------------------------ | |
cfdb727a | 70 | |
eb1bab5b BH |
71 | /** |
72 | * Constructor | |
73 | * @param name - the name of the component. | |
74 | */ | |
75 | public TraceControlComponent(String name) { | |
76 | this(name, null); | |
77 | } | |
cfdb727a | 78 | |
eb1bab5b BH |
79 | /** |
80 | * Constructor | |
81 | * @param name - the name of the component. | |
82 | * @param parent - the parent component. | |
83 | */ | |
84 | public TraceControlComponent(String name, ITraceControlComponent parent) { | |
85 | fName = name; | |
86 | fParent = parent; | |
87 | } | |
cfdb727a | 88 | |
eb1bab5b BH |
89 | // ------------------------------------------------------------------------ |
90 | // Accessors | |
91 | // ------------------------------------------------------------------------ | |
11252342 | 92 | |
eb1bab5b BH |
93 | @Override |
94 | public String getName() { | |
95 | return fName; | |
96 | } | |
97 | ||
eb1bab5b BH |
98 | @Override |
99 | public void setName(String name) { | |
100 | fName = name; | |
101 | } | |
102 | ||
eb1bab5b BH |
103 | @Override |
104 | public Image getImage() { | |
cfdb727a | 105 | return fImage; |
eb1bab5b BH |
106 | } |
107 | ||
eb1bab5b BH |
108 | @Override |
109 | public void setImage(String path) { | |
31a6a4e4 | 110 | fImage = Activator.getDefault().loadIcon(path); |
eb1bab5b BH |
111 | } |
112 | ||
eb1bab5b BH |
113 | @Override |
114 | public void setImage(Image image) { | |
115 | fImage = image; | |
116 | } | |
cfdb727a | 117 | |
eb1bab5b BH |
118 | @Override |
119 | public String getToolTip() { | |
120 | return fToolTip; | |
121 | } | |
122 | ||
eb1bab5b BH |
123 | @Override |
124 | public void setToolTip(String toolTip) { | |
125 | fToolTip = toolTip; | |
126 | } | |
cfdb727a | 127 | |
cfdb727a | 128 | @Override |
eb1bab5b BH |
129 | public TargetNodeState getTargetNodeState() { |
130 | if (getParent() != null) { | |
131 | return getParent().getTargetNodeState(); | |
132 | } | |
133 | return TargetNodeState.DISCONNECTED; | |
134 | } | |
cfdb727a | 135 | |
eb1bab5b BH |
136 | @Override |
137 | public void setTargetNodeState(TargetNodeState state) { | |
138 | if (getParent() != null) { | |
139 | getParent().setTargetNodeState(state); | |
140 | } | |
141 | } | |
142 | ||
eb1bab5b BH |
143 | @Override |
144 | public ITraceControlComponent getParent() { | |
145 | return fParent; | |
146 | } | |
147 | ||
eb1bab5b BH |
148 | @Override |
149 | public void setParent(ITraceControlComponent parent) { | |
150 | fParent = parent; | |
151 | } | |
152 | ||
eb1bab5b BH |
153 | @Override |
154 | public ITraceControlComponent[] getChildren() { | |
cfdb727a | 155 | return fChildren.toArray(new ITraceControlComponent[fChildren.size()]); |
eb1bab5b BH |
156 | } |
157 | ||
eb1bab5b BH |
158 | @Override |
159 | public void setChildren(List<ITraceControlComponent> children) { | |
160 | for (Iterator<ITraceControlComponent> iterator = children.iterator(); iterator.hasNext();) { | |
cfdb727a | 161 | ITraceControlComponent traceControlComponent = iterator.next(); |
eb1bab5b | 162 | fChildren.add(traceControlComponent); |
b957fb8c | 163 | fireComponentChanged(this); |
eb1bab5b BH |
164 | } |
165 | } | |
166 | ||
eb1bab5b BH |
167 | @Override |
168 | public ITraceControlComponent getChild(String name) { | |
169 | ITraceControlComponent child = null; | |
170 | for (int i = 0; i < fChildren.size(); i++) { | |
171 | if (fChildren.get(i).getName().equals(name)) { | |
172 | child = fChildren.get(i); | |
173 | break; | |
174 | } | |
175 | } | |
176 | return child; | |
177 | } | |
11252342 | 178 | |
6503ae0f BH |
179 | @Override |
180 | public List<ITraceControlComponent> getChildren(Class<? extends ITraceControlComponent> clazz) { | |
e0838ca1 | 181 | List<ITraceControlComponent> list = new ArrayList<>(); |
6503ae0f BH |
182 | |
183 | for (Iterator<ITraceControlComponent> iterator = fChildren.iterator(); iterator.hasNext();) { | |
cfdb727a | 184 | ITraceControlComponent child = iterator.next(); |
6503ae0f BH |
185 | if (child.getClass() == clazz) { |
186 | list.add(child); | |
187 | } | |
188 | } | |
189 | return list; | |
190 | } | |
191 | ||
6503ae0f BH |
192 | @Override |
193 | public ILttngControlService getControlService() { | |
194 | if (getParent() != null) { | |
195 | return getParent().getControlService(); | |
196 | } | |
197 | return null; | |
198 | } | |
199 | ||
6503ae0f BH |
200 | @Override |
201 | public void setControlService(ILttngControlService service) { | |
202 | if (getParent() != null) { | |
203 | getParent().setControlService(service); | |
204 | } | |
205 | } | |
eb1bab5b BH |
206 | |
207 | // ------------------------------------------------------------------------ | |
208 | // Operations | |
209 | // ------------------------------------------------------------------------ | |
11252342 | 210 | |
eb1bab5b BH |
211 | @Override |
212 | public void dispose() { | |
213 | // default implementation | |
214 | } | |
215 | ||
eb1bab5b BH |
216 | @Override |
217 | public void addChild(ITraceControlComponent component) { | |
218 | if (component != null) { | |
219 | fChildren.add(component); | |
220 | } | |
4775bcbf | 221 | fireComponentAdded(this, component); |
eb1bab5b BH |
222 | } |
223 | ||
eb1bab5b BH |
224 | @Override |
225 | public void removeChild(ITraceControlComponent component) { | |
226 | if (component != null) { | |
227 | fChildren.remove(component); | |
228 | component.dispose(); | |
229 | } | |
4775bcbf | 230 | fireComponentRemoved(this, component); |
eb1bab5b BH |
231 | } |
232 | ||
eb1bab5b BH |
233 | @Override |
234 | public void removeAllChildren() { | |
235 | for (Iterator<ITraceControlComponent> iterator = fChildren.iterator(); iterator.hasNext();) { | |
cfdb727a | 236 | ITraceControlComponent child = iterator.next(); |
eb1bab5b BH |
237 | child.removeAllChildren(); |
238 | } | |
239 | fChildren.clear(); | |
240 | // fireCompenentChanged(this); | |
241 | } | |
242 | ||
eb1bab5b BH |
243 | @Override |
244 | public boolean containsChild(String name) { | |
245 | boolean retValue = false; | |
246 | for (int i = 0; i < fChildren.size(); i++) { | |
247 | if (fChildren.get(i).getName().equals(name)) { | |
248 | retValue = true; | |
249 | break; | |
250 | } | |
251 | } | |
252 | return retValue; | |
253 | } | |
254 | ||
eb1bab5b BH |
255 | @Override |
256 | public boolean hasChildren() { | |
257 | return !fChildren.isEmpty(); | |
258 | } | |
259 | ||
eb1bab5b BH |
260 | @Override |
261 | public void addComponentListener(ITraceControlComponentChangedListener listener) { | |
cfdb727a | 262 | if (fParent != null) { |
eb1bab5b | 263 | fParent.addComponentListener(listener); |
cfdb727a | 264 | } else { |
eb1bab5b BH |
265 | fListeners.add(listener); |
266 | } | |
267 | } | |
268 | ||
eb1bab5b BH |
269 | @Override |
270 | public void removeComponentListener(ITraceControlComponentChangedListener listener) { | |
cfdb727a | 271 | if (fParent != null) { |
eb1bab5b | 272 | fParent.removeComponentListener(listener); |
cfdb727a | 273 | } else { |
eb1bab5b BH |
274 | fListeners.remove(listener); |
275 | } | |
276 | } | |
277 | ||
eb1bab5b | 278 | @Override |
4775bcbf | 279 | public void fireComponentAdded(ITraceControlComponent parent, ITraceControlComponent component) { |
eb1bab5b BH |
280 | if (component == null) { |
281 | return; | |
282 | } | |
283 | ||
284 | if (fParent != null) { | |
4775bcbf | 285 | fParent.fireComponentAdded(parent, component); |
eb1bab5b BH |
286 | } else { |
287 | Object[] listeners = fListeners.getListeners(); | |
288 | for (int i = 0; i < listeners.length; i++) { | |
289 | ITraceControlComponentChangedListener listener = (ITraceControlComponentChangedListener) listeners[i]; | |
290 | listener.componentAdded(parent, component); | |
291 | } | |
292 | } | |
293 | } | |
294 | ||
eb1bab5b | 295 | @Override |
4775bcbf | 296 | public void fireComponentRemoved(ITraceControlComponent parent, ITraceControlComponent component) { |
eb1bab5b BH |
297 | if (component == null) { |
298 | return; | |
299 | } | |
300 | ||
301 | if (fParent != null) { | |
4775bcbf | 302 | fParent.fireComponentRemoved(parent, component); |
eb1bab5b BH |
303 | } else { |
304 | Object[] listeners = fListeners.getListeners(); | |
305 | for (int i = 0; i < listeners.length; i++) { | |
306 | ITraceControlComponentChangedListener listener = (ITraceControlComponentChangedListener) listeners[i]; | |
307 | listener.componentRemoved(parent, component); | |
308 | } | |
309 | } | |
310 | } | |
cfdb727a | 311 | |
eb1bab5b | 312 | @Override |
4775bcbf | 313 | public void fireComponentChanged(ITraceControlComponent component) { |
eb1bab5b BH |
314 | if (component == null) { |
315 | return; | |
316 | } | |
317 | ||
318 | if (fParent != null) { | |
4775bcbf | 319 | fParent.fireComponentChanged(component); |
eb1bab5b BH |
320 | } else { |
321 | Object[] listeners = fListeners.getListeners(); | |
322 | for (int i = 0; i < listeners.length; i++) { | |
323 | ITraceControlComponentChangedListener listener = (ITraceControlComponentChangedListener) listeners[i]; | |
324 | listener.componentChanged(component); | |
325 | } | |
326 | } | |
327 | } | |
328 | ||
eb1bab5b BH |
329 | @Override |
330 | public Object getAdapter(Class adapter) { | |
331 | return null; | |
332 | } | |
333 | } |