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;
- // FIXME - what should epsilon be?
- private final double epsilon = .0001;
+ private final double epsilon;
- ComponentPresetRowFilter( double value, int column ) {
+ 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) {
+ 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 Value) {
+ Value v = (Value) o;
+ return Math.abs(value - v.getValue()) < epsilon;
}
- if ( o instanceof Double ) {
+ if (o instanceof Double) {
Double d = (Double) o;
- return Math.abs( value - d ) < epsilon;
+ return Math.abs(value - d) < epsilon;
}
return true;
}
-
+
}