package jdepend.client.ui.framework;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.ToolTipManager;
import javax.swing.table.TableCellRenderer;
import jdepend.framework.exception.JDependException;
import jdepend.client.report.util.ReportConstant;
import jdepend.util.refactor.AdjustHistory;
import jdepend.util.refactor.CompareInfo;
import jdepend.util.refactor.CompareObject;
public abstract class CompareTableCellRenderer extends JPanel implements TableCellRenderer {
private Object originality;
public CompareTableCellRenderer() {
super();
this.setLayout(new GridLayout());
ToolTipManager.sharedInstance().registerComponent(this);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
final int row, final int column) {
this.removeAll();
if (value != null) {
JLabel labelValue = new JLabel();
labelValue.setFont(table.getFont());
labelValue.setText(this.getValue(value, row, column));
this.add(labelValue);
String metrics = ReportConstant.toMetrics(table.getColumnName(column));
String id = this.getRowObjectId(table, row);
try {
CompareInfo info = AdjustHistory.getInstance().compare(this.getCompareObject(value, id, metrics));
if (info != null && info.isDiff()) {
CompareInfoWebWarpper warpper = new CompareInfoWebWarpper(info);
// 暂存原始数据
originality = this.getOriginality(info.getOriginality(), row, column);
JLabel labelDirection = new JLabel();
labelDirection.setFont(table.getFont());
labelDirection.setText(warpper.getCompare());
labelDirection.setForeground(warpper.getDirectionColor());
this.add(labelDirection);
}
} catch (JDependException e) {
e.printStackTrace();
}
}
if (isSelected) {
this.setBackground(table.getSelectionBackground());
} else {
this.setBackground(table.getBackground());
}
return this;
}
protected abstract CompareObject getCompareObject(Object value, String id, String metrics);
protected String getRowObjectId(JTable table, int row) {
return (String) table.getValueAt(row, 0);
}
protected String getValue(Object value, int row, int column) {
return String.valueOf(value);
}
protected Object getOriginality(Object originality, int row, int column) {
return originality;
}
@Override
public String getToolTipText(MouseEvent e) {
if (originality != null) {
return "Originality:" + originality;
} else {
return null;
}
}
}