/*******************************************************************************
* Copyright (c) 2012-2015 INRIA.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Generoso Pagano - initial API and implementation
******************************************************************************/
package fr.inria.soctrace.framesoc.ui.eventtable.model;
import fr.inria.soctrace.framesoc.ui.model.TableRow;
import fr.inria.soctrace.lib.model.Event;
import fr.inria.soctrace.lib.model.EventParam;
import fr.inria.soctrace.lib.model.Link;
import fr.inria.soctrace.lib.model.State;
import fr.inria.soctrace.lib.model.Variable;
import fr.inria.soctrace.lib.model.utils.ModelConstants.EventCategory;
/**
* Model element for a row in the Event table
*
* @author "Generoso Pagano <generoso.pagano@inria.fr>"
*
*/
public class EventTableRow extends TableRow {
private long timestamp;
public final static String PARAMETER_SEPARATOR = ",";
public final static String PARAMETER_VALUE_SEPARATOR = "=";
public final static String PARAMETER_VALUE_ESCAPE = "'";
/**
* Constructor used to create a table row related to a given event.
*
* @param event
* the event
*/
public EventTableRow(Event event) {
timestamp = event.getTimestamp();
fields.put(EventTableColumn.TIMESTAMP,
String.valueOf(event.getTimestamp()));
fields.put(EventTableColumn.CPU, String.valueOf(event.getCpu()));
fields.put(EventTableColumn.PRODUCER_NAME, event.getEventProducer()
.getName());
fields.put(EventTableColumn.CATEGORY,
EventCategory.categoryToString(event.getCategory()));
fields.put(EventTableColumn.TYPE_NAME, event.getType().getName());
StringBuilder tmp = new StringBuilder();
boolean first = true;
switch (event.getCategory()) {
case EventCategory.PUNCTUAL_EVENT:
break;
case EventCategory.STATE:
first = false;
State state = (State) event;
tmp.append("END_TIMESTAMP" + PARAMETER_VALUE_SEPARATOR
+ PARAMETER_VALUE_ESCAPE + state.getEndTimestamp()
+ PARAMETER_VALUE_ESCAPE);
tmp.append(PARAMETER_SEPARATOR + " ");
tmp.append("IMBRICATION" + PARAMETER_VALUE_SEPARATOR
+ PARAMETER_VALUE_ESCAPE + state.getImbricationLevel()
+ PARAMETER_VALUE_ESCAPE);
break;
case EventCategory.LINK:
first = false;
Link link = (Link) event;
tmp.append("END_TIMESTAMP" + PARAMETER_VALUE_SEPARATOR
+ PARAMETER_VALUE_ESCAPE + link.getEndTimestamp()
+ PARAMETER_VALUE_ESCAPE);
tmp.append(PARAMETER_SEPARATOR + " ");
tmp.append("END_PRODUCER" + PARAMETER_VALUE_SEPARATOR
+ PARAMETER_VALUE_ESCAPE + link.getEndProducer().getName()
+ PARAMETER_VALUE_ESCAPE);
break;
case EventCategory.VARIABLE:
first = false;
Variable var = (Variable) event;
tmp.append("ID" + PARAMETER_VALUE_SEPARATOR
+ PARAMETER_VALUE_ESCAPE + var.getId()
+ PARAMETER_VALUE_ESCAPE);
tmp.append(PARAMETER_SEPARATOR + " ");
tmp.append("VALUE" + PARAMETER_VALUE_SEPARATOR
+ PARAMETER_VALUE_ESCAPE + var.getValue()
+ PARAMETER_VALUE_ESCAPE);
break;
}
for (EventParam ep : event.getEventParams()) {
if (first) {
first = false;
} else {
tmp.append(PARAMETER_SEPARATOR + " ");
}
tmp.append(ep.getEventParamType().getName()
+ PARAMETER_VALUE_SEPARATOR + PARAMETER_VALUE_ESCAPE
+ ep.getValue() + PARAMETER_VALUE_ESCAPE);
}
fields.put(EventTableColumn.PARAMS, tmp.toString());
}
/**
* Empty table row, to be used for filters.
*/
public EventTableRow() {
fields.put(EventTableColumn.TIMESTAMP, "");
fields.put(EventTableColumn.CPU, "");
fields.put(EventTableColumn.PRODUCER_NAME, "");
fields.put(EventTableColumn.CATEGORY, "");
fields.put(EventTableColumn.TYPE_NAME, "");
fields.put(EventTableColumn.PARAMS, "");
}
/**
* @return the timestamp
*/
public long getTimestamp() {
return timestamp;
}
/**
*
* @param timestamp
* the timestamp to set
*/
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}