Remove unused sourceTemplateFeature folder from projects.
[deliverable/tracecompass.git] / org.eclipse.linuxtools.ctf.core / src / org / eclipse / linuxtools / ctf / core / trace / Stream.java
CommitLineData
866e5b51 1/*******************************************************************************
8e964be1 2 * Copyright (c) 2011-2013 Ericsson, Ecole Polytechnique de Montreal and others
866e5b51
FC
3 *
4 * All rights reserved. This program and the accompanying materials are made
5 * 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: Matthew Khouzam - Initial API and implementation
10 * Contributors: Simon Marchi - Initial API and implementation
11 *******************************************************************************/
12
486efb2e 13package org.eclipse.linuxtools.ctf.core.trace;
866e5b51
FC
14
15import java.util.HashMap;
16import java.util.HashSet;
0594c61c 17import java.util.Map;
866e5b51
FC
18import java.util.Set;
19
8e964be1 20import org.eclipse.linuxtools.ctf.core.event.IEventDeclaration;
866e5b51 21import org.eclipse.linuxtools.ctf.core.event.types.StructDeclaration;
ce2388e0 22import org.eclipse.linuxtools.internal.ctf.core.event.metadata.exceptions.ParseException;
866e5b51
FC
23
24/**
25 * <b><u>Stream</u></b>
26 * <p>
27 * Represents a stream in a trace.
486efb2e 28 * @since 2.0
866e5b51
FC
29 */
30public class Stream {
31
32 // ------------------------------------------------------------------------
33 // Attributes
34 // ------------------------------------------------------------------------
35
36
37 /**
38 * The numerical ID of the stream
39 */
40 private Long id = null;
41
42 /**
43 * Declarations of the stream-specific structures
44 */
45 private StructDeclaration packetContextDecl = null;
46 private StructDeclaration eventHeaderDecl = null;
47 private StructDeclaration eventContextDecl = null;
48
49 /**
50 * The trace to which the stream belongs
51 */
52 private CTFTrace trace = null;
53
54 /**
55 * Maps event ids to events
56 */
0594c61c 57 private Map<Long, IEventDeclaration> events = new HashMap<Long, IEventDeclaration>();
866e5b51
FC
58
59 /**
60 * The inputs associated to this stream
61 */
62 private final Set<StreamInput> inputs = new HashSet<StreamInput>();
63
64 // ------------------------------------------------------------------------
65 // Constructors
66 // ------------------------------------------------------------------------
67
68 /**
69 * Constructs a Stream that belongs to a Trace
70 *
71 * @param trace
72 * The trace to which belongs this stream.
73 */
74 public Stream(CTFTrace trace) {
75 this.trace = trace;
76 }
77
78 // ------------------------------------------------------------------------
79 // Getters/Setters/Predicates
80 // ------------------------------------------------------------------------
81
9ac2eb62
MK
82 /**
83 * Sets the id of a stream
84 * @param id the id of a stream
85 */
866e5b51
FC
86 public void setId(long id) {
87 this.id = id;
788ddcbc 88 this.events = trace.createEvents(this.id);
866e5b51
FC
89 }
90
9ac2eb62
MK
91 /**
92 * Gets the id of a stream
93 * @return id the id of a stream
94 */
866e5b51
FC
95 public Long getId() {
96 return id;
97 }
98
9ac2eb62
MK
99 /**
100 * Is the id of a stream set
be6df2d8
AM
101 *
102 * @return If the ID is set or not
9ac2eb62
MK
103 */
104 public boolean isIdSet() {
866e5b51
FC
105 return id != null;
106 }
107
9ac2eb62
MK
108 /**
109 *
110 * @return is the event header set (timestamp and stuff) (see Ctf Spec)
111 */
112 public boolean isEventHeaderSet() {
866e5b51
FC
113 return eventHeaderDecl != null;
114 }
115
9ac2eb62
MK
116 /**
117 *
118 * @return is the event context set (pid and stuff) (see Ctf Spec)
119 */
120 public boolean isEventContextSet() {
866e5b51
FC
121 return eventContextDecl != null;
122 }
123
9ac2eb62
MK
124 /**
125 *
126 * @return Is the packet context set (see Ctf Spec)
127 */
128 public boolean isPacketContextSet() {
866e5b51
FC
129 return packetContextDecl != null;
130 }
131
9ac2eb62
MK
132 /**
133 *
134 * @param eventHeader the current event header for all events in this stream
135 */
866e5b51
FC
136 public void setEventHeader(StructDeclaration eventHeader) {
137 this.eventHeaderDecl = eventHeader;
138 }
139
9ac2eb62
MK
140 /**
141 *
142 * @param eventContext the context for all events in this stream
143 */
866e5b51
FC
144 public void setEventContext(StructDeclaration eventContext) {
145 this.eventContextDecl = eventContext;
146 }
147
9ac2eb62
MK
148 /**
149 *
150 * @param packetContext the packet context for all packets in this stream
151 */
866e5b51
FC
152 public void setPacketContext(StructDeclaration packetContext) {
153 this.packetContextDecl = packetContext;
154 }
155
9ac2eb62
MK
156 /**
157 *
158 * @return the event header declaration in structdeclaration form
159 */
866e5b51
FC
160 public StructDeclaration getEventHeaderDecl() {
161 return eventHeaderDecl;
162 }
163
9ac2eb62
MK
164 /**
165 *
166 * @return the event context declaration in structdeclaration form
167 */
866e5b51
FC
168 public StructDeclaration getEventContextDecl() {
169 return eventContextDecl;
170 }
171
9ac2eb62
MK
172 /**
173 *
174 * @return the packet context declaration in structdeclaration form
175 */
866e5b51
FC
176 public StructDeclaration getPacketContextDecl() {
177 return packetContextDecl;
178 }
179
9ac2eb62
MK
180 /**
181 *
182 * @return the set of all stream inputs for this stream
183 */
866e5b51
FC
184 public Set<StreamInput> getStreamInputs() {
185 return inputs;
186 }
187
9ac2eb62
MK
188 /**
189 *
190 * @return the parent trace
191 */
866e5b51
FC
192 public CTFTrace getTrace() {
193 return trace;
194 }
195
9ac2eb62
MK
196 /**
197 *
198 * @return all the event declarations for this stream, using the id as a key for the hashmap.
199 */
0594c61c 200 public Map<Long, IEventDeclaration> getEvents() {
866e5b51
FC
201 return events;
202 }
203
204 // ------------------------------------------------------------------------
205 // Operations
206 // ------------------------------------------------------------------------
207
208 /**
209 * Adds an event to the event map.
210 *
211 * An event in a stream can omit its id if it is the only event in this
212 * stream. An event for which no id has been specified has a null id. It is
213 * thus not possible to add an event with the null key if the map is not
214 * empty. It is also not possible to add an event to the map if the null key
215 * is present in the map.
216 *
217 * @param event
be6df2d8 218 * The event to add
866e5b51 219 * @throws ParseException
be6df2d8
AM
220 * If there was a problem reading the event or adding it to the
221 * stream
866e5b51 222 */
8e964be1 223 public void addEvent(IEventDeclaration event) throws ParseException {
866e5b51
FC
224 /*
225 * If there is an event without id (the null key), it must be the only
226 * one
227 */
228 if (events.get(null) != null) {
229 throw new ParseException(
230 "Event without id with multiple events in a stream"); //$NON-NLS-1$
231 }
232
233 /*
234 * If there is an event without id (the null key), it must be the only
235 * one
236 */
237 if ((event.getId() == null) && (events.size() != 0)) {
238 throw new ParseException(
239 "Event without id with multiple events in a stream"); //$NON-NLS-1$
240 }
241
242 /* Check if an event with the same ID already exists */
243 if (events.get(event.getId()) != null) {
244 throw new ParseException("Event id already exists"); //$NON-NLS-1$
245 }
246
247 /* Put the event in the map */
248 events.put(event.getId(), event);
249 }
250
251 /**
252 * Add an input to this Stream
253 *
254 * @param input
255 * The StreamInput to add.
256 */
257 public void addInput(StreamInput input) {
258 inputs.add(input);
259 }
260
866e5b51
FC
261 @Override
262 public String toString() {
263 return "Stream [id=" + id + ", packetContextDecl=" + packetContextDecl //$NON-NLS-1$ //$NON-NLS-2$
264 + ", eventHeaderDecl=" + eventHeaderDecl //$NON-NLS-1$
265 + ", eventContextDecl=" + eventContextDecl + ", trace=" + trace //$NON-NLS-1$ //$NON-NLS-2$
266 + ", events=" + events + ", inputs=" + inputs + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
267 }
268}
This page took 0.045836 seconds and 5 git commands to generate.