summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2019-04-10 19:31:59 -0400
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2019-04-10 19:31:59 -0400
commit91ee53876aeeb52e980dd1fa976fae06d890ba19 (patch)
tree7efe3e7384464bbed2e29af21ccd4fb979525062
parentbfe1f266922bffd3c0c8d8906535be7621217e7a (diff)
Removed AbstractUnit's unit counting functionnality.
The startup unit count is now performed by the UnitDatabase.
-rwxr-xr-xsrc/org/unitConverter/UnitsDatabase.java15
-rwxr-xr-xsrc/org/unitConverter/converterGUI/UnitConverterGUI.java18
-rw-r--r--src/org/unitConverter/math/ExpressionParser.java3
-rw-r--r--src/org/unitConverter/unit/AbstractUnit.java54
-rwxr-xr-xsrc/org/unitConverter/unit/BaseUnit.java8
5 files changed, 35 insertions, 63 deletions
diff --git a/src/org/unitConverter/UnitsDatabase.java b/src/org/unitConverter/UnitsDatabase.java
index 481ce93..290a425 100755
--- a/src/org/unitConverter/UnitsDatabase.java
+++ b/src/org/unitConverter/UnitsDatabase.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -32,7 +33,6 @@ import java.util.Set;
import org.unitConverter.dimension.UnitDimension;
import org.unitConverter.math.DecimalComparison;
import org.unitConverter.math.ExpressionParser;
-import org.unitConverter.unit.AbstractUnit;
import org.unitConverter.unit.BaseUnit;
import org.unitConverter.unit.DefaultUnitPrefix;
import org.unitConverter.unit.LinearUnit;
@@ -186,10 +186,7 @@ public final class UnitsDatabase {
System.err.printf("Parsing error on line %d:%n", lineCounter);
throw e;
}
- AbstractUnit.incrementUnitCounter();
- if (unit instanceof BaseUnit) {
- AbstractUnit.incrementBaseUnitCounter();
- }
+
this.addUnit(name, unit);
}
}
@@ -564,6 +561,14 @@ public final class UnitsDatabase {
}
/**
+ * @return an immutable set of all of the units in this database, ignoring prefixes.
+ * @since 2019-04-10
+ */
+ public Set<Unit> prefixlessUnitSet() {
+ return Collections.unmodifiableSet(new HashSet<>(this.units.values()));
+ }
+
+ /**
* @return an immutable set of all of the prefix names in this database
* @since 2019-01-14
* @since v0.1.0
diff --git a/src/org/unitConverter/converterGUI/UnitConverterGUI.java b/src/org/unitConverter/converterGUI/UnitConverterGUI.java
index 867211c..fd40ff4 100755
--- a/src/org/unitConverter/converterGUI/UnitConverterGUI.java
+++ b/src/org/unitConverter/converterGUI/UnitConverterGUI.java
@@ -47,7 +47,7 @@ import javax.swing.ListSelectionModel;
import org.unitConverter.UnitsDatabase;
import org.unitConverter.dimension.StandardDimensions;
import org.unitConverter.dimension.UnitDimension;
-import org.unitConverter.unit.AbstractUnit;
+import org.unitConverter.unit.BaseUnit;
import org.unitConverter.unit.NonlinearUnits;
import org.unitConverter.unit.SI;
import org.unitConverter.unit.Unit;
@@ -143,8 +143,13 @@ final class UnitConverterGUI {
this.prefixNamesFiltered = new DelegateListModel<>(new ArrayList<>(this.units.prefixNameSet()));
this.prefixNamesFiltered.sort(this.prefixNameComparator); // sorts it using my comparator
- System.out.printf("Successfully loaded %d units (%d base units)", AbstractUnit.getUnitCount(),
- AbstractUnit.getBaseUnitCount());
+ // a Predicate that returns true iff the argument is a full base unit
+ final Predicate<Unit> isFullBase = unit -> unit instanceof BaseUnit && ((BaseUnit) unit).isFullBase();
+
+ // print out unit counts
+ System.out.printf("Successfully loaded %d units with %d unit names (%d base units).%n",
+ this.units.prefixlessUnitSet().size(), this.units.prefixlessUnitNameSet().size(),
+ this.units.prefixlessUnitSet().stream().filter(isFullBase).count());
}
/**
@@ -162,6 +167,11 @@ final class UnitConverterGUI {
final String fromUnitString = this.view.getFromText();
final String toUnitString = this.view.getToText();
+ if (fromUnitString.isEmpty()) {
+ this.view.showErrorDialog("Parse Error", "Please enter a unit expression in the From: box.");
+ return;
+ }
+
// try to parse from
final Unit from;
try {
@@ -175,8 +185,8 @@ final class UnitConverterGUI {
// try to parse to
final Unit to;
try {
- // if it's a unit, convert to that
if (this.units.containsUnitName(toUnitString)) {
+ // if it's a unit, convert to that
to = this.units.getUnit(toUnitString);
} else {
to = this.units.getUnitFromExpression(toUnitString);
diff --git a/src/org/unitConverter/math/ExpressionParser.java b/src/org/unitConverter/math/ExpressionParser.java
index f34a0c2..b56fa71 100644
--- a/src/org/unitConverter/math/ExpressionParser.java
+++ b/src/org/unitConverter/math/ExpressionParser.java
@@ -479,6 +479,9 @@ public final class ExpressionParser<T> {
break;
}
+ // swap components based on what kind of operator there is
+ // 1 + 2 becomes 2 1 +
+ // - 1 becomes 1 -
switch (this.getTokenType(components.get(highestPriorityOperatorPosition))) {
case UNARY_OPERATOR:
final String unaryOperator = components.remove(highestPriorityOperatorPosition);
diff --git a/src/org/unitConverter/unit/AbstractUnit.java b/src/org/unitConverter/unit/AbstractUnit.java
index 6088960..a0d6f7e 100644
--- a/src/org/unitConverter/unit/AbstractUnit.java
+++ b/src/org/unitConverter/unit/AbstractUnit.java
@@ -29,60 +29,6 @@ import org.unitConverter.dimension.UnitDimension;
*/
public abstract class AbstractUnit implements Unit {
/**
- * The number of units created, including base units.
- *
- * @since 2019-01-02
- * @since v0.1.0
- */
- private static long unitCount = 0;
-
- /**
- * The number of base units created.
- *
- * @since 2019-01-02
- * @since v0.1.0
- */
- private static long baseUnitCount = 0;
-
- /**
- * @return number of base units created
- * @since 2019-01-02
- * @since v0.1.0
- */
- public static final long getBaseUnitCount() {
- return baseUnitCount;
- }
-
- /**
- * @return number of units created
- * @since 2019-01-02
- * @since v0.1.0
- */
- public static final long getUnitCount() {
- return unitCount;
- }
-
- /**
- * Increments the number of base units.
- *
- * @since 2019-01-15
- * @since v0.1.0
- */
- public static final void incrementBaseUnitCounter() {
- baseUnitCount++;
- }
-
- /**
- * Increments the number of units.
- *
- * @since 2019-01-15
- * @since v0.1.0
- */
- public static final void incrementUnitCounter() {
- unitCount++;
- }
-
- /**
* The dimension, or what the unit measures.
*
* @since 2018-12-22
diff --git a/src/org/unitConverter/unit/BaseUnit.java b/src/org/unitConverter/unit/BaseUnit.java
index 2def48e..643272f 100755
--- a/src/org/unitConverter/unit/BaseUnit.java
+++ b/src/org/unitConverter/unit/BaseUnit.java
@@ -85,6 +85,14 @@ public final class BaseUnit extends LinearUnit {
}
/**
+ * @return true if the unit is a "full base" unit like the metre or second.
+ * @since 2019-04-10
+ */
+ public final boolean isFullBase() {
+ return this.isFullBase;
+ }
+
+ /**
* Returns the product of this unit and another.
* <p>
* Two units can be multiplied if they are part of the same unit system. If {@code multiplier} does not meet this