package com.revolsys.swing.table.filter; import javax.swing.RowFilter; public abstract class GeneralFilter extends RowFilter<Object, Object> { protected static void checkIndices(final int[] columns) { for (int i = columns.length - 1; i >= 0; i--) { if (columns[i] < 0) { throw new IllegalArgumentException("Index must be >= 0"); } } } private final int[] columns; public GeneralFilter(final int[] columns) { checkIndices(columns); this.columns = columns; } @Override public boolean include(final Entry<? extends Object, ? extends Object> value) { int count = value.getValueCount(); if (this.columns.length > 0) { for (int i = this.columns.length - 1; i >= 0; i--) { final int index = this.columns[i]; if (index < count) { if (include(value, index)) { return true; } } } } else { while (--count >= 0) { if (include(value, count)) { return true; } } } return false; } protected abstract boolean include(Entry<? extends Object, ? extends Object> value, int index); }