1 /*******************************************************************************
2 * Copyright (c) 2010, 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 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.core
.parsers
.custom
;
15 import java
.text
.ParseException
;
16 import java
.util
.HashMap
;
19 import org
.eclipse
.linuxtools
.tmf
.core
.event
.ITmfEventField
;
20 import org
.eclipse
.linuxtools
.tmf
.core
.event
.ITmfEventType
;
21 import org
.eclipse
.linuxtools
.tmf
.core
.event
.TmfEvent
;
22 import org
.eclipse
.linuxtools
.tmf
.core
.event
.TmfEventField
;
23 import org
.eclipse
.linuxtools
.tmf
.core
.event
.TmfEventType
;
24 import org
.eclipse
.linuxtools
.tmf
.core
.parsers
.custom
.CustomTraceDefinition
.OutputColumn
;
25 import org
.eclipse
.linuxtools
.tmf
.core
.timestamp
.ITmfTimestamp
;
26 import org
.eclipse
.linuxtools
.tmf
.core
.timestamp
.TmfNanoTimestamp
;
27 import org
.eclipse
.linuxtools
.tmf
.core
.timestamp
.TmfTimestamp
;
28 import org
.eclipse
.linuxtools
.tmf
.core
.timestamp
.TmfTimestampFormat
;
29 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.ITmfTrace
;
32 * Base event for custom text parsers.
34 * @author Patrick Tassé
37 public class CustomEvent
extends TmfEvent
{
39 /** Input format key */
40 protected static final String TIMESTAMP_INPUT_FORMAT_KEY
= "CE_TS_I_F"; //$NON-NLS-1$
43 protected static final String NO_MESSAGE
= ""; //$NON-NLS-1$
45 /** Replacement for the super-class' timestamp field */
46 private ITmfTimestamp customEventTimestamp
;
48 /** Replacement for the super-class' content field */
49 private ITmfEventField customEventContent
;
51 /** Replacement for the super-class' type field */
52 private ITmfEventType customEventType
;
54 /** The trace to which this event belongs */
55 protected CustomTraceDefinition fDefinition
;
57 /** The payload data of this event, <field name, value> */
58 protected Map
<String
, String
> fData
;
60 private TmfEventField
[] fColumnData
;
66 * The trace definition to which this event belongs
68 public CustomEvent(CustomTraceDefinition definition
) {
69 fDefinition
= definition
;
70 fData
= new HashMap
<>();
74 * Build a new CustomEvent from an existing TmfEvent.
77 * The trace definition to which this event belongs
79 * The TmfEvent to copy
81 public CustomEvent(CustomTraceDefinition definition
, TmfEvent other
) {
83 fDefinition
= definition
;
84 fData
= new HashMap
<>();
86 /* Set our overridden fields */
87 customEventTimestamp
= other
.getTimestamp();
88 customEventContent
= other
.getContent();
89 customEventType
= other
.getType();
96 * Trace definition of this event
100 * Timestamp of this event
102 * Source of the event
108 public CustomEvent(CustomTraceDefinition definition
, ITmfTrace parentTrace
,
109 ITmfTimestamp timestamp
, String source
, TmfEventType type
,
111 /* Do not use upstream's fields for stuff we override */
112 super(parentTrace
, null, source
, null, null, reference
);
113 fDefinition
= definition
;
114 fData
= new HashMap
<>();
116 /* Set our overridden fields */
117 customEventTimestamp
= timestamp
;
118 customEventContent
= null;
119 customEventType
= type
;
122 // ------------------------------------------------------------------------
123 // Overridden getters
124 // ------------------------------------------------------------------------
127 public ITmfTimestamp
getTimestamp() {
131 return customEventTimestamp
;
135 public ITmfEventField
getContent() {
136 return customEventContent
;
140 public ITmfEventType
getType() {
141 return customEventType
;
144 // ------------------------------------------------------------------------
146 // ------------------------------------------------------------------------
149 * Set this event's timestamp
154 protected void setTimestamp(ITmfTimestamp timestamp
) {
155 customEventTimestamp
= timestamp
;
159 * Set this event's content
164 protected void setContent(ITmfEventField content
) {
165 customEventContent
= content
;
169 * Set this event's type
174 protected void setType(ITmfEventType type
) {
175 customEventType
= type
;
178 // ------------------------------------------------------------------------
180 // ------------------------------------------------------------------------
183 * Get the contents of an event table cell for this event's row.
186 * The ID/index of the field to display. This corresponds to the
187 * index in the event content.
188 * @return The String to display in the cell
191 public String
getEventString(int index
) {
195 if (index
< 0 || index
>= fColumnData
.length
) {
196 return ""; //$NON-NLS-1$
199 return fColumnData
[index
].getValue().toString();
203 * Get the contents of the row in the events table corresponding to this
204 * event. The order of the elements corresponds to the order of the columns.
206 * @return The event row entries
207 * @deprecated This should not be used, since this isn't related to the
208 * order of columns in the view anymore. You should use
209 * {@link #getEventString(int)}
212 public String
[] getEventStrings() {
216 String
[] entries
= new String
[fColumnData
.length
];
217 for (int i
= 0; i
< fColumnData
.length
; i
++) {
218 entries
[i
] = fColumnData
[i
].getValue().toString();
223 private void processData() {
224 String timestampString
= fData
.get(CustomTraceDefinition
.TAG_TIMESTAMP
);
225 String timestampInputFormat
= fData
.get(TIMESTAMP_INPUT_FORMAT_KEY
);
226 TmfTimestamp timestamp
= null;
227 if (timestampInputFormat
!= null && timestampString
!= null) {
228 TmfTimestampFormat timestampFormat
= new TmfTimestampFormat(timestampInputFormat
);
230 long time
= timestampFormat
.parseValue(timestampString
);
231 timestamp
= new TmfNanoTimestamp(getTrace().getTimestampTransform().transform(time
));
232 setTimestamp(timestamp
);
233 } catch (ParseException e
) {
234 setTimestamp(TmfTimestamp
.ZERO
);
237 setTimestamp(TmfTimestamp
.ZERO
);
241 fColumnData
= new TmfEventField
[fDefinition
.outputs
.size()];
242 for (OutputColumn outputColumn
: fDefinition
.outputs
) {
243 String value
= fData
.get(outputColumn
.name
);
244 if (outputColumn
.name
.equals(CustomTraceDefinition
.TAG_TIMESTAMP
) && timestamp
!= null) {
245 TmfTimestampFormat timestampFormat
= new TmfTimestampFormat(fDefinition
.timeStampOutputFormat
);
246 fColumnData
[i
++] = new TmfEventField(outputColumn
.name
, timestampFormat
.format(timestamp
.getValue()), null);
248 fColumnData
[i
++] = new TmfEventField(outputColumn
.name
, (value
!= null ? value
: ""), null); //$NON-NLS-1$
251 CustomEventContent curContent
= (CustomEventContent
) getContent();
252 setContent(new CustomEventContent(curContent
.getName(), curContent
.getValue(), fColumnData
));
257 public int hashCode() {
258 final int prime
= 31;
259 int result
= super.hashCode();
260 result
= prime
* result
+ ((fDefinition
== null) ?
0 : fDefinition
.hashCode());
261 result
= prime
* result
+ ((customEventTimestamp
== null) ?
0 : customEventTimestamp
.hashCode());
262 result
= prime
* result
+ ((customEventContent
== null) ?
0 : customEventContent
.hashCode());
263 result
= prime
* result
+ ((customEventType
== null) ?
0 : customEventType
.hashCode());
268 public boolean equals(Object obj
) {
272 if (!super.equals(obj
)) {
275 if (!(obj
instanceof CustomEvent
)) {
278 CustomEvent other
= (CustomEvent
) obj
;
279 if (fDefinition
== null) {
280 if (other
.fDefinition
!= null) {
283 } else if (!fDefinition
.equals(other
.fDefinition
)) {
287 if (customEventTimestamp
== null) {
288 if (other
.customEventTimestamp
!= null) {
291 } else if (!customEventTimestamp
.equals(other
.customEventTimestamp
)) {
295 if (customEventContent
== null) {
296 if (other
.customEventContent
!= null) {
299 } else if (!customEventContent
.equals(other
.customEventContent
)) {
303 if (customEventType
== null) {
304 if (other
.customEventType
!= null) {
307 } else if (!customEventType
.equals(other
.customEventType
)) {