--- /dev/null
+package net.sf.openrocket.gui.dialogs.preset;
+
+import javax.swing.RowFilter;
+import javax.swing.table.TableModel;
+
+import net.sf.openrocket.unit.Value;
+import net.sf.openrocket.util.MathUtil;
+
+public class ComponentPresetRowFilter extends RowFilter<TableModel, Object> {
+
+ private final double value;
+ private final int column;
+ private final double epsilon;
+
+ ComponentPresetRowFilter(double value, int column) {
+ this.value = value;
+ this.column = column;
+ /*
+ * Accept 5% difference, but at least 1mm.
+ */
+ this.epsilon = MathUtil.max(value * 0.05, 0.001);
+ }
+
+ @Override
+ public boolean include(RowFilter.Entry<? extends TableModel, ? extends Object> entry) {
+ Object o = entry.getValue(column);
+ if (o instanceof Value) {
+ Value v = (Value) o;
+ return Math.abs(value - v.getValue()) < epsilon;
+ }
+ if (o instanceof Double) {
+ Double d = (Double) o;
+ return Math.abs(value - d) < epsilon;
+ }
+ return true;
+ }
+
+}