Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / src / net / sf / openrocket / gui / dialogs / preset / ComponentPresetRowFilter.java
diff --git a/core/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java b/core/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java
new file mode 100644 (file)
index 0000000..7c66aa1
--- /dev/null
@@ -0,0 +1,38 @@
+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;
+       }
+       
+}