package com.revolsys.swing.map.layer.record.table.predicate;
import java.awt.Component;
import org.jdesktop.swingx.decorator.ColorHighlighter;
import org.jdesktop.swingx.decorator.ComponentAdapter;
import org.jdesktop.swingx.decorator.HighlightPredicate;
import com.revolsys.awt.WebColors;
import com.revolsys.record.Record;
import com.revolsys.swing.map.layer.record.table.model.MergedRecordsTableModel;
import com.revolsys.swing.table.record.RecordRowTable;
public class MergedNullValuePredicate implements HighlightPredicate {
public static void add(final RecordRowTable table) {
final MergedRecordsTableModel model = table.getTableModel();
final MergedNullValuePredicate predicate = new MergedNullValuePredicate(model);
table.addHighlighter(new ColorHighlighter(predicate, WebColors.Yellow, WebColors.Black,
WebColors.Orange, WebColors.Black));
}
private final MergedRecordsTableModel model;
public MergedNullValuePredicate(final MergedRecordsTableModel model) {
this.model = model;
}
@Override
public boolean isHighlighted(final Component renderer, final ComponentAdapter adapter) {
try {
final int rowIndex = adapter.convertRowIndexToView(adapter.row);
final int columnIndex = adapter.convertColumnIndexToView(adapter.column);
final Record object = this.model.getRecord(rowIndex);
final Record mergedObject = this.model.getMergedRecord();
if (object != mergedObject) {
final String fieldName = this.model.getColumnFieldName(columnIndex);
final Object value = object.getValue(fieldName);
final Object mergedValue = mergedObject.getValue(fieldName);
if (value == null && mergedValue != null) {
return true;
}
}
} catch (final IndexOutOfBoundsException e) {
}
return false;
}
}