diff options
Diffstat (limited to 'src/org/unitConverter/converterGUI/UnitConverterGUI.java')
-rw-r--r-- | src/org/unitConverter/converterGUI/UnitConverterGUI.java | 35 |
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); |