summaryrefslogtreecommitdiff
path: root/src/main/java/org/unitConverter/converterGUI/UnitConverterGUI.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/unitConverter/converterGUI/UnitConverterGUI.java')
-rw-r--r--src/main/java/org/unitConverter/converterGUI/UnitConverterGUI.java97
1 files changed, 74 insertions, 23 deletions
diff --git a/src/main/java/org/unitConverter/converterGUI/UnitConverterGUI.java b/src/main/java/org/unitConverter/converterGUI/UnitConverterGUI.java
index c046846..ee1bcc3 100644
--- a/src/main/java/org/unitConverter/converterGUI/UnitConverterGUI.java
+++ b/src/main/java/org/unitConverter/converterGUI/UnitConverterGUI.java
@@ -23,6 +23,7 @@ import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.io.BufferedWriter;
import java.io.IOException;
+import java.io.InputStream;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
@@ -36,6 +37,7 @@ import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.NoSuchElementException;
+import java.util.Scanner;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -93,13 +95,11 @@ final class UnitConverterGUI {
/** The default place where settings are stored. */
private static final String DEFAULT_SETTINGS_FILEPATH = "settings.txt";
/** The default place where units are stored. */
- private static final Path DEFAULT_UNITS_FILE = Path.of("unitsfile.txt");
+ private static final String DEFAULT_UNITS_FILEPATH = "/unitsfile.txt";
/** The default place where dimensions are stored. */
- private static final Path DEFAULT_DIMENSION_FILE = Path
- .of("dimensionfile.txt");
+ private static final String DEFAULT_DIMENSIONS_FILEPATH = "/dimensionfile.txt";
/** The default place where exceptions are stored. */
- private static final Path DEFAULT_EXCEPTIONS_FILE = Path
- .of("metric_exceptions.txt");
+ private static final String DEFAULT_EXCEPTIONS_FILEPATH = "/metric_exceptions.txt";
/**
* Adds default units and dimensions to a database.
@@ -131,6 +131,41 @@ final class UnitConverterGUI {
}
/**
+ * Gets the text of a resource file as a set of strings (each one is one
+ * line of the text).
+ *
+ * @param filename filename to get resource from
+ * @return contents of file
+ * @since 2021-03-27
+ */
+ public static final List<String> getLinesFromResource(String filename) {
+ final List<String> lines = new ArrayList<>();
+
+ try (InputStream stream = inputStream(filename);
+ Scanner scanner = new Scanner(stream)) {
+ while (scanner.hasNextLine()) {
+ lines.add(scanner.nextLine());
+ }
+ } catch (final IOException e) {
+ throw new AssertionError(
+ "Error occurred while loading file " + filename, e);
+ }
+
+ return lines;
+ }
+
+ /**
+ * Gets an input stream for a resource file.
+ *
+ * @param filepath file to use as resource
+ * @return obtained Path
+ * @since 2021-03-27
+ */
+ private static final InputStream inputStream(String filepath) {
+ return UnitConverterGUI.class.getResourceAsStream(filepath);
+ }
+
+ /**
* @return {@code line} with any comments removed.
* @since 2021-03-13
*/
@@ -161,9 +196,9 @@ final class UnitConverterGUI {
/** A boolean remembering whether or not one-way conversion is on */
private boolean oneWay = true;
-
/** The prefix rule */
private DefaultPrefixRepetitionRule prefixRule = null;
+
// conditions for existence of From and To entries
// used for one-way conversion
private final MutablePredicate<String> fromExistenceCondition = new MutablePredicate<>(
@@ -196,21 +231,44 @@ final class UnitConverterGUI {
DefaultPrefixRepetitionRule.NO_RESTRICTION);
Presenter.addDefaults(this.database);
- this.database.loadUnitsFile(DEFAULT_UNITS_FILE);
- this.database.loadDimensionFile(DEFAULT_DIMENSION_FILE);
+ // load units and prefixes
+ try (final InputStream units = inputStream(DEFAULT_UNITS_FILEPATH)) {
+ this.database.loadUnitsFromStream(units);
+ } catch (final IOException e) {
+ throw new AssertionError("Loading of unitsfile.txt failed.", e);
+ }
+
+ // load dimensions
+ try (final InputStream dimensions = inputStream(
+ DEFAULT_DIMENSIONS_FILEPATH)) {
+ this.database.loadDimensionsFromStream(dimensions);
+ } catch (final IOException e) {
+ throw new AssertionError("Loading of dimensionfile.txt failed.", e);
+ }
// load metric exceptions
try {
- this.metricExceptions = Files.readAllLines(DEFAULT_EXCEPTIONS_FILE)
- .stream().map(Presenter::withoutComments)
- .filter(s -> !s.isBlank()).collect(Collectors.toSet());
+ this.metricExceptions = new HashSet<>();
+ try (InputStream exceptions = inputStream(
+ DEFAULT_EXCEPTIONS_FILEPATH);
+ Scanner scanner = new Scanner(exceptions)) {
+ while (scanner.hasNextLine()) {
+ final String line = Presenter
+ .withoutComments(scanner.nextLine());
+ if (!line.isBlank()) {
+ this.metricExceptions.add(line);
+ }
+ }
+ }
} catch (final IOException e) {
throw new AssertionError("Loading of metric_exceptions.txt failed.",
e);
}
// load settings - requires database to exist
- this.loadSettings();
+ if (Files.exists(this.getSettingsFile())) {
+ this.loadSettings();
+ }
// a comparator that can be used to compare prefix names
// any name that does not exist is less than a name that does.
@@ -1139,17 +1197,10 @@ final class UnitConverterGUI {
infoPanel.add(infoTextArea);
// get info text
- final String infoText;
- try {
- final Path aboutFile = Path.of("src", "main", "resources",
- "about.txt");
- infoText = Files.readAllLines(aboutFile).stream()
- .map(Presenter::withoutComments)
- .collect(Collectors.joining("\n"));
- } catch (final IOException e) {
- throw new AssertionError("I/O exception loading about.txt",
- e);
- }
+ final String infoText = Presenter
+ .getLinesFromResource("/about.txt").stream()
+ .map(Presenter::withoutComments)
+ .collect(Collectors.joining("\n"));
infoTextArea.setText(infoText);
}