summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Hopkins <ahopk127@my.yorku.ca>2021-03-27 18:00:14 -0500
committerAdrien Hopkins <ahopk127@my.yorku.ca>2021-03-27 18:00:14 -0500
commit3e6fee9561a00e5d9958c5685336c9d68c8629e1 (patch)
tree61ce842d1e982f41c32a87adfcabe2b2a4c1bde2
parentc767cfda66e22f6e6b2f87b3a4ded850352e909d (diff)
Used resources instead of Paths to make the generated jar work
-rw-r--r--bin/main/.gitignore3
-rw-r--r--build.gradle16
-rw-r--r--src/main/java/org/unitConverter/converterGUI/UnitConverterGUI.java97
-rw-r--r--src/main/java/org/unitConverter/unit/UnitDatabase.java34
-rw-r--r--src/main/resources/dimensionfile.txt (renamed from dimensionfile.txt)0
-rw-r--r--src/main/resources/metric_exceptions.txt (renamed from metric_exceptions.txt)0
-rw-r--r--src/main/resources/unitsfile.txt (renamed from unitsfile.txt)0
7 files changed, 122 insertions, 28 deletions
diff --git a/bin/main/.gitignore b/bin/main/.gitignore
index b2d0b77..e5fcaae 100644
--- a/bin/main/.gitignore
+++ b/bin/main/.gitignore
@@ -1,2 +1,5 @@
/about.txt
/org/
+/dimensionfile.txt
+/metric_exceptions.txt
+/unitsfile.txt
diff --git a/build.gradle b/build.gradle
index 11bf07b..1a2ef44 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,12 +20,18 @@ dependencies {
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
+jar {
+ manifest {
+ attributes 'Main-Class': "org.unitConverter.converterGUI.UnitConverterGUI"
+ }
+}
+
test {
- useJUnitPlatform()
- testLogging {
- events 'passed', 'skipped', 'failed'
- }
- finalizedBy jacocoTestReport
+ useJUnitPlatform()
+ testLogging {
+ events 'passed', 'skipped', 'failed'
+ }
+ finalizedBy jacocoTestReport
}
jacoco {
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);
}
diff --git a/src/main/java/org/unitConverter/unit/UnitDatabase.java b/src/main/java/org/unitConverter/unit/UnitDatabase.java
index 000acf5..6322fef 100644
--- a/src/main/java/org/unitConverter/unit/UnitDatabase.java
+++ b/src/main/java/org/unitConverter/unit/UnitDatabase.java
@@ -18,6 +18,7 @@ package org.unitConverter.unit;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.InputStream;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -34,6 +35,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.NoSuchElementException;
import java.util.Objects;
+import java.util.Scanner;
import java.util.Set;
import java.util.function.BiFunction;
import java.util.function.Function;
@@ -1880,6 +1882,22 @@ public final class UnitDatabase {
}
/**
+ * Adds all dimensions from a {@code InputStream}. Otherwise, works like
+ * {@link #loadDimensionFile}.
+ *
+ * @param stream stream to load from
+ * @since 2021-03-27
+ */
+ public void loadDimensionsFromStream(final InputStream stream) {
+ try (final Scanner scanner = new Scanner(stream)) {
+ long lineCounter = 0;
+ while (scanner.hasNextLine()) {
+ this.addDimensionFromLine(scanner.nextLine(), ++lineCounter);
+ }
+ }
+ }
+
+ /**
* Adds all units from a file, using data from the database to parse them.
* <p>
* Each line in the file should consist of a name and an expression (parsed
@@ -1919,6 +1937,22 @@ public final class UnitDatabase {
}
/**
+ * Adds all units from a {@code InputStream}. Otherwise, works like
+ * {@link #loadUnitsFile}.
+ *
+ * @param stream stream to load from
+ * @since 2021-03-27
+ */
+ public void loadUnitsFromStream(InputStream stream) {
+ try (final Scanner scanner = new Scanner(stream)) {
+ long lineCounter = 0;
+ while (scanner.hasNextLine()) {
+ this.addUnitOrPrefixFromLine(scanner.nextLine(), ++lineCounter);
+ }
+ }
+ }
+
+ /**
* @return a map mapping prefix names to prefixes
* @since 2019-04-13
* @since v0.2.0
diff --git a/dimensionfile.txt b/src/main/resources/dimensionfile.txt
index 3485de5..3485de5 100644
--- a/dimensionfile.txt
+++ b/src/main/resources/dimensionfile.txt
diff --git a/metric_exceptions.txt b/src/main/resources/metric_exceptions.txt
index 73748c0..73748c0 100644
--- a/metric_exceptions.txt
+++ b/src/main/resources/metric_exceptions.txt
diff --git a/unitsfile.txt b/src/main/resources/unitsfile.txt
index eafe885..eafe885 100644
--- a/unitsfile.txt
+++ b/src/main/resources/unitsfile.txt