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.geometry.model.Geometry; import com.revolsys.record.Record; import com.revolsys.record.schema.FieldDefinition; import com.revolsys.swing.map.layer.record.table.model.MergedRecordsTableModel; import com.revolsys.swing.table.record.RecordRowTable; public class MergedValuePredicate implements HighlightPredicate { public static void add(final RecordRowTable table) { final MergedRecordsTableModel model = table.getTableModel(); final MergedValuePredicate predicate = new MergedValuePredicate(model); table.addHighlighter(new ColorHighlighter(predicate, WebColors.Moccasin, WebColors.DarkOrange, WebColors.DarkOrange, WebColors.Moccasin)); } private final MergedRecordsTableModel model; public MergedValuePredicate(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 record = this.model.getRecord(rowIndex); final Record mergedRecord = this.model.getMergedRecord(); if (record == mergedRecord) { return false; } else { final String fieldName = this.model.getColumnFieldName(columnIndex); final FieldDefinition field = this.model.getColumnFieldDefinition(columnIndex); if (field != null) { final Object value = record.getValue(fieldName); final Object mergedValue = mergedRecord.getValue(fieldName); if (value instanceof Geometry) { return false; } else if (mergedValue instanceof Geometry) { return false; } else { return !field.equals(value, mergedValue); } } } } catch (final IndexOutOfBoundsException e) { } return false; } }