package jetbrains.mps.baseLanguage.unitTest.execution.tool;
/*Generated by MPS */
import javax.swing.table.TableCellRenderer;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.SwingConstants;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Component;
import javax.swing.JTable;
import org.jetbrains.annotations.Nullable;
import javax.swing.JComponent;
import javax.swing.UIManager;
import javax.swing.BorderFactory;
public class StatisticsRowRenderer implements TableCellRenderer {
private static final String INDENT = " ";
private final JPanel myTextPanel;
private final JLabel myText;
private final JLabel myAdvancedText;
private final JLabel mySimpleField;
private final JPanel myStatePanel;
private final JLabel mySuccess;
private final JLabel myError;
private final JLabel myFailure;
private final JLabel myAloneSuccess;
private final JLabel myAloneError;
private final JLabel myAloneFailure;
public StatisticsRowRenderer() {
myTextPanel = new JPanel(new BorderLayout());
myText = new JLabel();
myTextPanel.add(myText, BorderLayout.WEST);
myAdvancedText = new JLabel();
myAdvancedText.setForeground(Color.GRAY);
myTextPanel.add(myAdvancedText, BorderLayout.CENTER);
mySimpleField = new JLabel("", SwingConstants.RIGHT);
// container states
mySuccess = new JLabel("", SwingConstants.RIGHT);
Font font = mySuccess.getFont();
Font boldFont = new Font(font.getName(), Font.BOLD, font.getSize());
mySuccess.setForeground(new Color(0, 127, 0));
mySuccess.setFont(boldFont);
myFailure = new JLabel("", SwingConstants.RIGHT);
myFailure.setForeground(Color.RED);
myFailure.setFont(boldFont);
myError = new JLabel("", SwingConstants.RIGHT);
myError.setForeground(Color.RED);
myError.setFont(boldFont);
myStatePanel = new JPanel(new GridLayout(1, 3));
myStatePanel.add(mySuccess, BorderLayout.WEST);
myStatePanel.add(myFailure, BorderLayout.CENTER);
myStatePanel.add(myError, BorderLayout.EAST);
// single test states
myAloneSuccess = new JLabel("Passed", SwingConstants.RIGHT);
myAloneSuccess.setForeground(new Color(0, 127, 0));
myAloneSuccess.setFont(boldFont);
myAloneFailure = new JLabel("Failed", SwingConstants.RIGHT);
myAloneFailure.setForeground(Color.RED);
myAloneFailure.setFont(boldFont);
myAloneError = new JLabel("Error", SwingConstants.RIGHT);
myAloneError.setForeground(Color.RED);
myAloneError.setFont(boldFont);
}
@Override
public Component getTableCellRendererComponent(JTable table, @Nullable Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null) {
value = table.getModel().getValueAt(row, column);
}
TestStatisticsRow rowValue = (TestStatisticsRow) value;
JComponent result = null;
boolean keepForeground = false;
JComponent adjustFont = null;
boolean container = rowValue instanceof TestContainerRow;
switch (column) {
case 0:
// Test
String text = rowValue.getText();
if (!(container)) {
text = INDENT + text;
}
myText.setText(text);
String additionalText = rowValue.getAdditionalText();
if (additionalText != null) {
myAdvancedText.setText(" (" + additionalText + ")");
} else {
myAdvancedText.setText("");
}
result = myTextPanel;
adjustFont = myText;
break;
case 1:
// Time elapsed
result = setTime(rowValue.getElapsedTime());
adjustFont = result;
break;
case 2:
// Usage Delta
result = setMemoryUsage(rowValue.getUsageDelta());
adjustFont = result;
break;
case 3:
// Usage Before
result = setMemoryUsage(rowValue.getUsageBefore());
adjustFont = result;
break;
case 4:
// Usage After
result = setMemoryUsage(rowValue.getUsageAfter());
adjustFont = result;
break;
case 5:
// Results
int s = rowValue.getSuccessful();
int f = rowValue.getFailed();
int e = rowValue.getErrored();
if (container) {
mySuccess.setText((s > 0 ? ("P:" + s) : ""));
myFailure.setText((f > 0 ? ("F:" + f) : ""));
myError.setText((e > 0 ? ("E:" + e) : ""));
result = myStatePanel;
} else if ((s + f + e) >= 1) {
if (s > 0) {
result = myAloneSuccess;
}
if (f > 0) {
result = myAloneFailure;
}
if (e > 0) {
result = myAloneError;
}
} else {
mySimpleField.setText("");
result = mySimpleField;
}
keepForeground = true;
break;
default:
}
result.setOpaque(true);
if (isSelected) {
if (!(keepForeground)) {
result.setForeground(table.getSelectionForeground());
}
result.setBackground(table.getSelectionBackground());
} else {
if (!(keepForeground)) {
result.setForeground(table.getForeground());
}
result.setBackground(table.getBackground());
}
if (hasFocus) {
result.setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
} else {
result.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
}
result.setEnabled(table.isEnabled());
if (adjustFont != null) {
if (container) {
Font font = table.getFont();
adjustFont.setFont(new Font(font.getName(), Font.BOLD, font.getSize()));
} else {
adjustFont.setFont(table.getFont());
}
}
return result;
}
private JLabel setTime(long time) {
String text = "";
if (time >= 0) {
text = String.format("%.3f s", time / 1000.0);
}
mySimpleField.setText(text);
return mySimpleField;
}
private JLabel setMemoryUsage(long usage) {
String s = String.format("%d Kb", usage / 1024);
mySimpleField.setText(s);
return mySimpleField;
}
}