package org.jactr.eclipse.runtime.ui.log2;
/*
* default logging
*/
import javolution.util.FastList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.jactr.core.logging.Logger;
import org.jactr.eclipse.runtime.log2.LogData;
import org.jactr.eclipse.runtime.marker.OpenMarkerSessionDataStream;
import org.jactr.eclipse.runtime.marker.OpenMarkers;
import org.jactr.eclipse.runtime.ui.marker.MarkerUI;
public class TableLabelProvider extends LabelProvider implements
ITableLabelProvider, ITableColorProvider
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(TableLabelProvider.class);
private Table _table;
private LogData _lastBackgroundQuery;
private Color _lastBackgroundColor;
public TableLabelProvider(Table table)
{
_table = table;
}
public Image getColumnImage(Object element, int columnIndex)
{
return null;
}
public String getColumnText(Object element, int columnIndex)
{
LogData ld = (LogData) element;
TableColumn column = _table.getColumn(columnIndex);
String text = ld.get(column.getText());
if(column.getText().equals(Logger.Stream.PROCEDURAL.toString())) {
// Show only the last line of the procedural text (or the line
// before the last line, if the last line is empty).
int lastIndex = text.lastIndexOf("\n");
if(lastIndex != -1) {
String newText = text.substring(lastIndex + 1).trim();
if(newText.length() == 0 && lastIndex != -1) {
int secondLastIndex = text.lastIndexOf("\n", lastIndex-1);
newText = text.substring(secondLastIndex+1).trim();
}
text = newText;
}
}
return text;
}
public Color getForeground(Object element, int columnIndex)
{
// TODO Auto-generated method stub
return null;
}
public Color getBackground(Object element, int columnIndex)
{
LogData ld = (LogData) element;
/*
* we only color by row
*/
if (ld == _lastBackgroundQuery) return _lastBackgroundColor;
_lastBackgroundQuery = ld;
Color color = null;
/*
* do we support coloring?
*/
OpenMarkerSessionDataStream omds = (OpenMarkerSessionDataStream) ld
.getDataStream().getSessionData().getDataStream("openMarkers");
if (omds != null)
{
/*
* we may have marker data.
*/
FastList<OpenMarkers> openMarkers = FastList.newInstance();
FastList<Long> markerIds = FastList.newInstance();
try
{
double logTime = ld.getTime();
omds.getLatestData(logTime, openMarkers);
/*
* find the first one we want to render.
*/
if (openMarkers.size() > 0)
for (OpenMarkers open : openMarkers)
{
markerIds.clear();
open.getOpenMarkers(markerIds);
if (LOGGER.isDebugEnabled())
LOGGER.debug(String.format("[%.2f] Currently open markers : %s",
logTime,
markerIds));
for (Long markerId : markerIds)
if (isMarkerDisplayable(markerId))
{
String type = omds.getRawMarkerDataStream().getType(markerId);
if (type == null) continue;
color = MarkerUI.getInstance().getColor(type, true);
if (color != null) break;
}
}
}
finally
{
FastList.recycle(openMarkers);
FastList.recycle(markerIds);
}
}
_lastBackgroundColor = color;
return color;
}
private boolean isMarkerDisplayable(Long markerId)
{
return true;
}
}