1 /**********************************************************************
2 * Copyright (c) 2012, 2014 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 * Bernd Hufmann - Initial API and implementation
11 **********************************************************************/
12 package org
.eclipse
.linuxtools
.internal
.lttng2
.control
.ui
.views
.model
.impl
;
14 import java
.util
.ArrayList
;
15 import java
.util
.Iterator
;
16 import java
.util
.List
;
18 import org
.eclipse
.core
.runtime
.ListenerList
;
19 import org
.eclipse
.linuxtools
.internal
.lttng2
.control
.core
.model
.TargetNodeState
;
20 import org
.eclipse
.linuxtools
.internal
.lttng2
.control
.ui
.Activator
;
21 import org
.eclipse
.linuxtools
.internal
.lttng2
.control
.ui
.views
.model
.ITraceControlComponent
;
22 import org
.eclipse
.linuxtools
.internal
.lttng2
.control
.ui
.views
.model
.ITraceControlComponentChangedListener
;
23 import org
.eclipse
.linuxtools
.internal
.lttng2
.control
.ui
.views
.service
.ILttngControlService
;
24 import org
.eclipse
.swt
.graphics
.Image
;
28 * Base implementation for trace control component.
31 * @author Bernd Hufmann
33 public class TraceControlComponent
implements ITraceControlComponent
{
35 // ------------------------------------------------------------------------
37 // ------------------------------------------------------------------------
39 // ------------------------------------------------------------------------
41 // ------------------------------------------------------------------------
43 * The name of the component
45 private String fName
= ""; //$NON-NLS-1$
47 * The image to be displayed for the component.
49 private Image fImage
= null;
51 * The tool tip to be displayed for the component.
53 private String fToolTip
= null;
55 * The parent component.
57 private ITraceControlComponent fParent
= null;
59 * The list if children components.
61 private final List
<ITraceControlComponent
> fChildren
= new ArrayList
<>();
63 * The list of listeners to be notified about changes.
65 private final ListenerList fListeners
= new ListenerList();
67 // ------------------------------------------------------------------------
69 // ------------------------------------------------------------------------
73 * @param name - the name of the component.
75 public TraceControlComponent(String name
) {
81 * @param name - the name of the component.
82 * @param parent - the parent component.
84 public TraceControlComponent(String name
, ITraceControlComponent parent
) {
89 // ------------------------------------------------------------------------
91 // ------------------------------------------------------------------------
94 public String
getName() {
99 public void setName(String name
) {
104 public Image
getImage() {
109 public void setImage(String path
) {
110 fImage
= Activator
.getDefault().loadIcon(path
);
114 public void setImage(Image image
) {
119 public String
getToolTip() {
124 public void setToolTip(String toolTip
) {
129 public TargetNodeState
getTargetNodeState() {
130 if (getParent() != null) {
131 return getParent().getTargetNodeState();
133 return TargetNodeState
.DISCONNECTED
;
137 public void setTargetNodeState(TargetNodeState state
) {
138 if (getParent() != null) {
139 getParent().setTargetNodeState(state
);
144 public ITraceControlComponent
getParent() {
149 public void setParent(ITraceControlComponent parent
) {
154 public ITraceControlComponent
[] getChildren() {
155 return fChildren
.toArray(new ITraceControlComponent
[fChildren
.size()]);
159 public void setChildren(List
<ITraceControlComponent
> children
) {
160 for (Iterator
<ITraceControlComponent
> iterator
= children
.iterator(); iterator
.hasNext();) {
161 ITraceControlComponent traceControlComponent
= iterator
.next();
162 fChildren
.add(traceControlComponent
);
163 fireComponentChanged(this);
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
);
180 public List
<ITraceControlComponent
> getChildren(Class
<?
extends ITraceControlComponent
> clazz
) {
181 List
<ITraceControlComponent
> list
= new ArrayList
<>();
183 for (Iterator
<ITraceControlComponent
> iterator
= fChildren
.iterator(); iterator
.hasNext();) {
184 ITraceControlComponent child
= iterator
.next();
185 if (child
.getClass() == clazz
) {
193 public ILttngControlService
getControlService() {
194 if (getParent() != null) {
195 return getParent().getControlService();
201 public void setControlService(ILttngControlService service
) {
202 if (getParent() != null) {
203 getParent().setControlService(service
);
207 // ------------------------------------------------------------------------
209 // ------------------------------------------------------------------------
212 public void dispose() {
213 // default implementation
217 public void addChild(ITraceControlComponent component
) {
218 if (component
!= null) {
219 fChildren
.add(component
);
221 fireComponentAdded(this, component
);
225 public void removeChild(ITraceControlComponent component
) {
226 if (component
!= null) {
227 fChildren
.remove(component
);
230 fireComponentRemoved(this, component
);
234 public void removeAllChildren() {
235 for (Iterator
<ITraceControlComponent
> iterator
= fChildren
.iterator(); iterator
.hasNext();) {
236 ITraceControlComponent child
= iterator
.next();
237 child
.removeAllChildren();
240 // fireCompenentChanged(this);
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
)) {
256 public boolean hasChildren() {
257 return !fChildren
.isEmpty();
261 public void addComponentListener(ITraceControlComponentChangedListener listener
) {
262 if (fParent
!= null) {
263 fParent
.addComponentListener(listener
);
265 fListeners
.add(listener
);
270 public void removeComponentListener(ITraceControlComponentChangedListener listener
) {
271 if (fParent
!= null) {
272 fParent
.removeComponentListener(listener
);
274 fListeners
.remove(listener
);
279 public void fireComponentAdded(ITraceControlComponent parent
, ITraceControlComponent component
) {
280 if (component
== null) {
284 if (fParent
!= null) {
285 fParent
.fireComponentAdded(parent
, component
);
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
);
296 public void fireComponentRemoved(ITraceControlComponent parent
, ITraceControlComponent component
) {
297 if (component
== null) {
301 if (fParent
!= null) {
302 fParent
.fireComponentRemoved(parent
, component
);
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
);
313 public void fireComponentChanged(ITraceControlComponent component
) {
314 if (component
== null) {
318 if (fParent
!= null) {
319 fParent
.fireComponentChanged(component
);
321 Object
[] listeners
= fListeners
.getListeners();
322 for (int i
= 0; i
< listeners
.length
; i
++) {
323 ITraceControlComponentChangedListener listener
= (ITraceControlComponentChangedListener
) listeners
[i
];
324 listener
.componentChanged(component
);
330 public Object
getAdapter(Class adapter
) {