1 /**********************************************************************
2 * Copyright (c) 2012, 2015 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 * Simon Delisle - Updated for support of LTTng Tools 2.2
12 **********************************************************************/
14 package org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.impl
;
16 import java
.util
.ArrayList
;
17 import java
.util
.Iterator
;
18 import java
.util
.List
;
20 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.IChannelInfo
;
21 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.IEventInfo
;
22 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.TraceChannelOutputType
;
23 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.TraceEnablement
;
26 * Implementation of the trace channel interface (IChannelInfo) to store channel
29 * @author Bernd Hufmann
31 public class ChannelInfo
extends TraceInfo
implements IChannelInfo
{
33 // ------------------------------------------------------------------------
35 // ------------------------------------------------------------------------
37 * The overwrite mode of the channel.
39 private boolean fOverwriteMode
;
41 * The sub-buffer size of the channel.
43 private long fSubBufferSize
;
45 * The number of sub-buffers of the channel.
47 private int fNumberOfSubBuffers
;
49 * The switch timer interval of the channel.
51 private long fSwitchTimer
;
53 * The read timer interval of the channel.
55 private long fReadTimer
;
57 * The Output type of the channel.
59 private TraceChannelOutputType fOutputType
= TraceChannelOutputType
.UNKNOWN
;
61 * The channel enable state.
63 private TraceEnablement fState
= TraceEnablement
.DISABLED
;
65 * The events information of the channel.
67 private final List
<IEventInfo
> fEvents
= new ArrayList
<>();
69 * The maximum size of trace files
71 private long fMaxSizeTraceFiles
;
73 * The maximum number of trace files
75 private int fMaxNumberTraceFiles
;
77 * The value of buffer type
79 private BufferType fBufferType
= BufferType
.BUFFER_TYPE_UNKNOWN
;
81 // ------------------------------------------------------------------------
83 // ------------------------------------------------------------------------
90 public ChannelInfo(String name
) {
98 * - the instance to copy
100 public ChannelInfo(ChannelInfo other
) {
102 fOverwriteMode
= other
.fOverwriteMode
;
103 fSubBufferSize
= other
.fSubBufferSize
;
104 fNumberOfSubBuffers
= other
.fNumberOfSubBuffers
;
105 fSwitchTimer
= other
.fSwitchTimer
;
106 fReadTimer
= other
.fReadTimer
;
107 fMaxSizeTraceFiles
= other
.fMaxSizeTraceFiles
;
108 fMaxNumberTraceFiles
= other
.fMaxNumberTraceFiles
;
109 fBufferType
= other
.fBufferType
;
110 fOutputType
= (other
.fOutputType
== null ?
null : other
.fOutputType
);
111 fState
= other
.fState
;
112 for (Iterator
<IEventInfo
> iterator
= other
.fEvents
.iterator(); iterator
.hasNext();) {
113 IEventInfo event
= iterator
.next();
114 if (event
instanceof EventInfo
) {
115 fEvents
.add(new EventInfo((EventInfo
) event
));
122 // ------------------------------------------------------------------------
124 // ------------------------------------------------------------------------
127 public boolean isOverwriteMode() {
128 return fOverwriteMode
;
132 public void setOverwriteMode(boolean mode
) {
133 fOverwriteMode
= mode
;
137 public long getSubBufferSize() {
138 return fSubBufferSize
;
142 public void setSubBufferSize(long bufferSize
) {
143 fSubBufferSize
= bufferSize
;
147 public int getNumberOfSubBuffers() {
148 return fNumberOfSubBuffers
;
152 public void setNumberOfSubBuffers(int numberOfSubBuffers
) {
153 fNumberOfSubBuffers
= numberOfSubBuffers
;
157 public long getSwitchTimer() {
162 public void setSwitchTimer(long timer
) {
163 fSwitchTimer
= timer
;
167 public long getReadTimer() {
172 public void setReadTimer(long timer
) {
177 public TraceChannelOutputType
getOutputType() {
182 public void setOutputType(String type
) {
183 fOutputType
= TraceChannelOutputType
.valueOfString(type
);
187 public void setOutputType(TraceChannelOutputType type
) {
192 public TraceEnablement
getState() {
197 public void setState(TraceEnablement state
) {
202 public void setState(String stateName
) {
203 fState
= TraceEnablement
.valueOfString(stateName
);
207 public IEventInfo
[] getEvents() {
208 return fEvents
.toArray(new IEventInfo
[fEvents
.size()]);
212 public void setEvents(List
<IEventInfo
> events
) {
214 for (Iterator
<IEventInfo
> iterator
= events
.iterator(); iterator
.hasNext();) {
215 IEventInfo eventInfo
= iterator
.next();
216 fEvents
.add(eventInfo
);
221 public void addEvent(IEventInfo channel
) {
222 fEvents
.add(channel
);
226 public int hashCode() {
227 final int prime
= 31;
228 int result
= super.hashCode();
229 result
= prime
* result
+ fEvents
.hashCode();
230 result
= prime
* result
+ fNumberOfSubBuffers
;
231 result
= prime
* result
+ ((fOutputType
== null) ?
0 : fOutputType
.hashCode());
232 result
= prime
* result
+ (fOverwriteMode ?
1231 : 1237);
233 result
= prime
* result
+ (int) (fReadTimer ^
(fReadTimer
>>> 32));
234 result
= prime
* result
+ ((fState
== null) ?
0 : (fState
.ordinal() + 1));
235 result
= prime
* result
+ (int) (fSubBufferSize ^
(fSubBufferSize
>>> 32));
236 result
= prime
* result
+ (int) (fSwitchTimer ^
(fSwitchTimer
>>> 32));
237 result
= prime
* result
+ ((fBufferType
== null) ?
0 : (fBufferType
.ordinal() + 1));
242 public boolean equals(Object obj
) {
246 if (!super.equals(obj
)) {
249 if (getClass() != obj
.getClass()) {
252 ChannelInfo other
= (ChannelInfo
) obj
;
253 if (!fEvents
.equals(other
.fEvents
)) {
256 if (fNumberOfSubBuffers
!= other
.fNumberOfSubBuffers
) {
259 if (fOutputType
== null) {
260 if (other
.fOutputType
!= null) {
263 } else if (!fOutputType
.equals(other
.fOutputType
)) {
266 if (fOverwriteMode
!= other
.fOverwriteMode
) {
269 if (fReadTimer
!= other
.fReadTimer
) {
272 if (fState
!= other
.fState
) {
275 if (fSubBufferSize
!= other
.fSubBufferSize
) {
278 if (fSwitchTimer
!= other
.fSwitchTimer
) {
281 if (fBufferType
!= other
.fBufferType
) {
287 @SuppressWarnings("nls")
289 public String
toString() {
290 StringBuffer output
= new StringBuffer();
291 output
.append("[ChannelInfo(");
292 output
.append(super.toString());
293 output
.append(",State=");
294 output
.append(fState
);
295 output
.append(",OverwriteMode=");
296 output
.append(fOverwriteMode
);
297 output
.append(",SubBuffersSize=");
298 output
.append(fSubBufferSize
);
299 output
.append(",NumberOfSubBuffers=");
300 output
.append(fNumberOfSubBuffers
);
301 output
.append(",SwitchTimer=");
302 output
.append(fSwitchTimer
);
303 output
.append(",ReadTimer=");
304 output
.append(fReadTimer
);
305 output
.append(",output=");
306 output
.append(fOutputType
.getInName());
307 if ((fBufferType
!= null) && !fBufferType
.equals(BufferType
.BUFFER_TYPE_UNKNOWN
) && !fBufferType
.equals(BufferType
.BUFFER_SHARED
)) {
308 output
.append(",BufferType=");
309 output
.append(fBufferType
);
311 output
.append(",Events=");
312 if (fEvents
.isEmpty()) {
313 output
.append("None");
315 for (Iterator
<IEventInfo
> iterator
= fEvents
.iterator(); iterator
.hasNext();) {
316 IEventInfo event
= iterator
.next();
317 output
.append(event
.toString());
321 return output
.toString();
325 public void setMaxSizeTraceFiles(long maxSizeTraceFiles
) {
326 fMaxSizeTraceFiles
= maxSizeTraceFiles
;
330 public void setMaxNumberTraceFiles(int maxNumberTraceFiles
) {
331 fMaxNumberTraceFiles
= maxNumberTraceFiles
;
335 public long getMaxSizeTraceFiles() {
336 return fMaxSizeTraceFiles
;
340 public int getMaxNumberTraceFiles() {
341 return fMaxNumberTraceFiles
;
345 public void setBufferType(BufferType bufferType
) {
346 fBufferType
= bufferType
;
350 public BufferType
getBufferType() {