package com.revolsys.swing.map.layer.record.table.predicate; import java.awt.Color; import java.awt.Component; import org.jdesktop.swingx.decorator.ColorHighlighter; import org.jdesktop.swingx.decorator.ComponentAdapter; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; import com.revolsys.awt.WebColors; import com.revolsys.geometry.model.Geometry; import com.revolsys.record.Record; import com.revolsys.swing.table.record.RecordRowTable; import com.revolsys.swing.table.record.model.RecordRowTableModel; public class ErrorPredicate implements HighlightPredicate { public static void add(final RecordRowTable table) { final RecordRowTableModel model = table.getTableModel(); final Highlighter highlighter = getHighlighter(model); table.addHighlighter(highlighter); } public static Highlighter getHighlighter(final RecordRowTableModel model) { final ErrorPredicate predicate = new ErrorPredicate(model); return new ColorHighlighter(predicate, WebColors.newAlpha(Color.RED, 64), Color.RED, Color.RED, Color.YELLOW); } private final RecordRowTableModel model; public ErrorPredicate(final RecordRowTableModel model) { this.model = model; } @Override public boolean isHighlighted(final Component renderer, final ComponentAdapter adapter) { try { final int rowIndex = adapter.convertRowIndexToModel(adapter.row); final Record record = this.model.getRecord(rowIndex); if (record != null) { final int columnIndex = adapter.convertColumnIndexToModel(adapter.column); final Class<?> columnClass = this.model.getColumnClass(columnIndex); if (Geometry.class.isAssignableFrom(columnClass)) { return false; } else { final String fieldName = this.model.getColumnFieldName(columnIndex); if (!record.isValid(fieldName)) { return true; } } } } catch (final IndexOutOfBoundsException e) { } return false; } }