/*******************************************************************************
* 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.gantt.provider;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.swt.graphics.RGB;
import fr.inria.linuxtools.tmf.ui.widgets.timegraph.StateItem;
import fr.inria.linuxtools.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider;
import fr.inria.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;
import fr.inria.linuxtools.tmf.ui.widgets.timegraph.model.TimeEvent;
import fr.inria.soctrace.framesoc.ui.colors.FramesocColor;
import fr.inria.soctrace.framesoc.ui.colors.FramesocColorManager;
import fr.inria.soctrace.framesoc.ui.gantt.view.GanttView;
import fr.inria.soctrace.lib.model.EventType;
/**
* Presentation provider for Gantt view.
*
* @author "Generoso Pagano <generoso.pagano@inria.fr>"
*/
public class GanttPresentationProvider extends TimeGraphPresentationProvider {
/** Map: type id -> index in the state table */
private Map<Integer, Integer> typeIndex = new HashMap<>();
private StateItem[] stateTable;
/** Set of ID of filtered types */
private Set<Integer> filteredTypes = new HashSet<>();
/**
* Default constructor
*/
public GanttPresentationProvider() {
super(GanttView.PRODUCER);
}
public void setTypes(Collection<EventType> types) {
filteredTypes = new HashSet<>();
typeIndex = new HashMap<Integer, Integer>();
stateTable = new StateItem[types.size()];
int i=0;
for (EventType type: types) {
FramesocColor color = FramesocColorManager.getInstance().getEventTypeColor(type.getName());
RGB rgb = new RGB(color.red, color.green, color.blue);
stateTable[i] = new StateItem(rgb, type.getName());
typeIndex.put(type.getId(), i);
i++;
}
}
public void setFilteredTypes(Collection<Integer> types) {
filteredTypes = new HashSet<>();
filteredTypes.addAll(types);
}
public List<Integer> getFilteredTypes() {
List<Integer> filtered = new ArrayList<>(filteredTypes.size());
for (Integer t : filteredTypes) {
filtered.add(t);
}
return filtered;
}
public void updateColors() {
for (StateItem item: stateTable) {
FramesocColor color = FramesocColorManager.getInstance().getEventTypeColor(item.getStateString());
RGB rgb = new RGB(color.red, color.green, color.blue);
item.setStateColor(rgb);
}
}
@Override
public StateItem[] getStateTable() {
return stateTable;
}
@Override
public int getStateTableIndex(ITimeEvent event) {
if (event instanceof TimeEvent && ((TimeEvent) event).hasValue()) {
int type = ((TimeEvent) event).getValue();
if (filteredTypes.contains(type)) {
return INVISIBLE;
}
if (typeIndex.containsKey(type)) {
return typeIndex.get(type);
}
}
return TRANSPARENT;
}
@Override
public String getEventName(ITimeEvent event) {
int index = getStateTableIndex(event);
if (index >= 0 && index < stateTable.length) {
return stateTable[index].getStateString();
}
return "unknown";
}
}