package com.ibm.nmon.gui.time;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import com.ibm.nmon.gui.Styles;
import com.ibm.nmon.interval.Interval;
import com.ibm.nmon.util.TimeFormatCache;
/**
* Renders system start and end times based on the current interval. If the interval overlaps a
* given time, it will be bold. If the interval exactly aligns with a time, it will be bold and
* italic. If an interval does not include a time, the text will be striken out.
*/
final class SystemTimeTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 4392809910722437137L;
private Interval toCompare;
public SystemTimeTableCellRenderer() {
super();
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// based on columns in SystemTimeTableModel
if (column == 0) {
setHorizontalAlignment(SwingConstants.TRAILING);
}
else if (column == 1) {
long start = (Long) value;
long intervalStart = toCompare.getStart();
if (start == intervalStart) {
setFont(Styles.BOLD_ITALIC);
}
else if (intervalStart < start) {
if (toCompare.getEnd() < start) {
setFont(Styles.STRIKETHROUGH);
}
else {
setFont(Styles.BOLD);
}
}
else {
long end = (Long) table.getValueAt(row, column + 1);
if (intervalStart > end) {
setFont(Styles.STRIKETHROUGH);
}
// else leave unformatted
}
setText(TimeFormatCache.formatDateTime(start));
}
else if (column == 2) {
long end = (Long) value;
long intervalEnd = toCompare.getEnd();
if (end == intervalEnd) {
setFont(Styles.BOLD_ITALIC);
}
else if (intervalEnd > end) {
if (toCompare.getStart() > end) {
setFont(Styles.STRIKETHROUGH);
}
else {
setFont(Styles.BOLD);
}
}
else {
long start = (Long) table.getValueAt(row, column - 1);
if (intervalEnd < start) {
setFont(Styles.STRIKETHROUGH);
}
// else leave unformatted
}
setText(TimeFormatCache.formatDateTime(end));
}
else if (column == 3) {
setHorizontalAlignment(SwingConstants.CENTER);
}
// else just return the value
return this;
}
public void setIntervalToCompare(Interval toCompare) {
this.toCompare = toCompare;
}
}