summaryrefslogtreecommitdiff
path: root/src/org/unitConverter/converterGUI/UnitConverterGUI.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/unitConverter/converterGUI/UnitConverterGUI.java')
-rw-r--r--src/org/unitConverter/converterGUI/UnitConverterGUI.java35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/org/unitConverter/converterGUI/UnitConverterGUI.java b/src/org/unitConverter/converterGUI/UnitConverterGUI.java
index 75ab16d..38a9de1 100644
--- a/src/org/unitConverter/converterGUI/UnitConverterGUI.java
+++ b/src/org/unitConverter/converterGUI/UnitConverterGUI.java
@@ -21,7 +21,10 @@ import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
+import java.io.BufferedReader;
import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
@@ -128,6 +131,9 @@ final class UnitConverterGUI {
/** The names of all of the dimensions */
private final List<String> dimensionNames;
+ /** Unit names that are ignored by the metric-only/imperial-only filter */
+ private final Set<String> metricExceptions;
+
private final Comparator<String> prefixNameComparator;
// conditions for existence of From and To entries
@@ -164,6 +170,29 @@ final class UnitConverterGUI {
this.database.loadUnitsFile(new File("unitsfile.txt"));
this.database.loadDimensionFile(new File("dimensionfile.txt"));
+ // load metric exceptions
+ final File exceptions = new File("metric_exceptions.txt");
+ this.metricExceptions = new HashSet<>();
+ try (FileReader fileReader = new FileReader(exceptions);
+ BufferedReader reader = new BufferedReader(fileReader)) {
+ while (reader.ready()) {
+ String line = reader.readLine();
+
+ // # can be used for comments
+ if (line.contains("#")) {
+ line = line.substring(line.indexOf("#"));
+ }
+
+ // don't read black lines
+ if (!line.isBlank()) {
+ this.metricExceptions.add(line.strip());
+ }
+ }
+ } catch (final IOException e) {
+ throw new AssertionError("Loading of metric_exceptions.txt failed.",
+ e);
+ }
+
// a comparator that can be used to compare prefix names
// any name that does not exist is less than a name that does.
// otherwise, they are compared by value
@@ -464,9 +493,11 @@ final class UnitConverterGUI {
public final void setOneWay(boolean oneWay) {
if (oneWay) {
this.fromExistenceCondition.setPredicate(
- unitName -> !this.database.getUnit(unitName).isMetric());
+ unitName -> this.metricExceptions.contains(unitName)
+ || !this.database.getUnit(unitName).isMetric());
this.toExistenceCondition.setPredicate(
- unitName -> this.database.getUnit(unitName).isMetric());
+ unitName -> this.metricExceptions.contains(unitName)
+ || this.database.getUnit(unitName).isMetric());
} else {
this.fromExistenceCondition.setPredicate(unitName -> true);
this.toExistenceCondition.setPredicate(unitName -> true);