/**
*
*/
package org.signalml.plugin.loader;
import java.awt.Color;
import java.awt.Component;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.TableCellRenderer;
/**
* This class represents a renderer for cells containing
* labels in the {@link PluginTableModel table} of
* plug-in {@link PluginState states}.
* <p>
* If plug-in has some missing {@link PluginDependency dependencies} or loading
* of this plug-in failed the cell has red background and the tool-tip is set.
*
* @author Marcin Szumski
*/
public class PluginLabelCellRenderer extends JLabel implements TableCellRenderer {
private static final long serialVersionUID = 1L;
/**
* an array of plug-in {@link PluginState states}
*/
ArrayList<PluginState> descriptions;
/**
* Constructor.
* @param descriptions an array of plug-in {@link PluginState states}
*/
public PluginLabelCellRenderer(ArrayList<PluginState> descriptions) {
this.descriptions = descriptions;
setOpaque(true);
}
/* (non-Javadoc)
* @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
PluginState state = descriptions.get(row);
if (!state.getMissingDependencies().isEmpty() || state.isFailedToLoad()) {
setBackground(Color.RED);
String message = new String();
if (state.isFailedToLoad()) {
message += "failed to load";
} else {
message += "missing dependencies: ";
message += descriptions.get(row).missingDependenciesToString();
}
setToolTipText(message);
} else {
setBackground(Color.WHITE);
setToolTipText("");
}
if (column == 1) setHorizontalAlignment(SwingConstants.CENTER);
String text = (String) value;
setText(text);
return this;
}
}