summaryrefslogtreecommitdiff
path: root/src/main/java/sevenUnits
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/sevenUnits')
-rw-r--r--src/main/java/sevenUnits/converterGUI/SevenUnitsGUI.java2
-rw-r--r--src/main/java/sevenUnits/unit/BaseDimension.java50
-rw-r--r--src/main/java/sevenUnits/unit/BaseUnit.java2
-rw-r--r--src/main/java/sevenUnits/unit/BritishImperial.java2
-rw-r--r--src/main/java/sevenUnits/unit/FunctionalUnit.java1
-rw-r--r--src/main/java/sevenUnits/unit/FunctionalUnitlike.java1
-rw-r--r--src/main/java/sevenUnits/unit/LinearUnit.java1
-rw-r--r--src/main/java/sevenUnits/unit/Metric.java1
-rw-r--r--src/main/java/sevenUnits/unit/MultiUnit.java1
-rw-r--r--src/main/java/sevenUnits/unit/Unit.java2
-rw-r--r--src/main/java/sevenUnits/unit/UnitDatabase.java23
-rw-r--r--src/main/java/sevenUnits/unit/UnitPrefix.java1
-rw-r--r--src/main/java/sevenUnits/unit/UnitValue.java2
-rw-r--r--src/main/java/sevenUnits/unit/Unitlike.java2
-rw-r--r--src/main/java/sevenUnits/unit/UnitlikeValue.java2
-rw-r--r--src/main/java/sevenUnits/utils/NameSymbol.java (renamed from src/main/java/sevenUnits/unit/NameSymbol.java)21
-rw-r--r--src/main/java/sevenUnits/utils/Nameable.java (renamed from src/main/java/sevenUnits/unit/Nameable.java)2
-rw-r--r--src/main/java/sevenUnits/utils/NamedObjectProduct.java7
-rw-r--r--src/main/java/sevenUnits/utils/ObjectProduct.java6
19 files changed, 82 insertions, 47 deletions
diff --git a/src/main/java/sevenUnits/converterGUI/SevenUnitsGUI.java b/src/main/java/sevenUnits/converterGUI/SevenUnitsGUI.java
index 9c6ae0a..55e1546 100644
--- a/src/main/java/sevenUnits/converterGUI/SevenUnitsGUI.java
+++ b/src/main/java/sevenUnits/converterGUI/SevenUnitsGUI.java
@@ -70,12 +70,12 @@ import sevenUnits.unit.BritishImperial;
import sevenUnits.unit.LinearUnit;
import sevenUnits.unit.LinearUnitValue;
import sevenUnits.unit.Metric;
-import sevenUnits.unit.NameSymbol;
import sevenUnits.unit.Unit;
import sevenUnits.unit.UnitDatabase;
import sevenUnits.unit.UnitPrefix;
import sevenUnits.unit.UnitValue;
import sevenUnits.utils.ConditionalExistenceCollections;
+import sevenUnits.utils.NameSymbol;
import sevenUnits.utils.ObjectProduct;
/**
diff --git a/src/main/java/sevenUnits/unit/BaseDimension.java b/src/main/java/sevenUnits/unit/BaseDimension.java
index d5e98ca..bcd57d9 100644
--- a/src/main/java/sevenUnits/unit/BaseDimension.java
+++ b/src/main/java/sevenUnits/unit/BaseDimension.java
@@ -18,70 +18,58 @@ package sevenUnits.unit;
import java.util.Objects;
+import sevenUnits.utils.NameSymbol;
+import sevenUnits.utils.Nameable;
+
/**
* A dimension that defines a {@code BaseUnit}
*
* @author Adrien Hopkins
* @since 2019-10-16
*/
-public final class BaseDimension {
+public final class BaseDimension implements Nameable {
/**
* Gets a {@code BaseDimension} with the provided name and symbol.
*
- * @param name
- * name of dimension
- * @param symbol
- * symbol used for dimension
+ * @param name name of dimension
+ * @param symbol symbol used for dimension
* @return dimension
* @since 2019-10-16
*/
public static BaseDimension valueOf(final String name, final String symbol) {
return new BaseDimension(name, symbol);
}
-
+
/**
* The name of the dimension.
*/
private final String name;
/**
- * The symbol used by the dimension. Symbols should be short, generally one or two characters.
+ * The symbol used by the dimension. Symbols should be short, generally one
+ * or two characters.
*/
private final String symbol;
-
+
/**
* Creates the {@code BaseDimension}.
*
- * @param name
- * name of unit
- * @param symbol
- * symbol of unit
- * @throws NullPointerException
- * if any argument is null
+ * @param name name of unit
+ * @param symbol symbol of unit
+ * @throws NullPointerException if any argument is null
* @since 2019-10-16
*/
private BaseDimension(final String name, final String symbol) {
this.name = Objects.requireNonNull(name, "name must not be null.");
this.symbol = Objects.requireNonNull(symbol, "symbol must not be null.");
}
-
- /**
- * @return name
- * @since 2019-10-16
- */
- public final String getName() {
- return this.name;
- }
-
- /**
- * @return symbol
- * @since 2019-10-16
- */
- public final String getSymbol() {
- return this.symbol;
+
+ @Override
+ public NameSymbol getNameSymbol() {
+ return NameSymbol.of(this.name, this.symbol);
}
-
+
@Override
public String toString() {
- return String.format("%s (%s)", this.getName(), this.getSymbol());
+ return String.format("%s (%s)", this.name, this.symbol);
}
}
diff --git a/src/main/java/sevenUnits/unit/BaseUnit.java b/src/main/java/sevenUnits/unit/BaseUnit.java
index ee2c277..dba7f52 100644
--- a/src/main/java/sevenUnits/unit/BaseUnit.java
+++ b/src/main/java/sevenUnits/unit/BaseUnit.java
@@ -20,6 +20,8 @@ import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
+import sevenUnits.utils.NameSymbol;
+
/**
* A unit that other units are defined by.
* <p>
diff --git a/src/main/java/sevenUnits/unit/BritishImperial.java b/src/main/java/sevenUnits/unit/BritishImperial.java
index 743beeb..c6e65fb 100644
--- a/src/main/java/sevenUnits/unit/BritishImperial.java
+++ b/src/main/java/sevenUnits/unit/BritishImperial.java
@@ -16,6 +16,8 @@
*/
package sevenUnits.unit;
+import sevenUnits.utils.NameSymbol;
+
/**
* A static utility class that contains units in the British Imperial system.
*
diff --git a/src/main/java/sevenUnits/unit/FunctionalUnit.java b/src/main/java/sevenUnits/unit/FunctionalUnit.java
index df457e4..720b0af 100644
--- a/src/main/java/sevenUnits/unit/FunctionalUnit.java
+++ b/src/main/java/sevenUnits/unit/FunctionalUnit.java
@@ -19,6 +19,7 @@ package sevenUnits.unit;
import java.util.Objects;
import java.util.function.DoubleUnaryOperator;
+import sevenUnits.utils.NameSymbol;
import sevenUnits.utils.ObjectProduct;
/**
diff --git a/src/main/java/sevenUnits/unit/FunctionalUnitlike.java b/src/main/java/sevenUnits/unit/FunctionalUnitlike.java
index 2ee9e19..d6046c0 100644
--- a/src/main/java/sevenUnits/unit/FunctionalUnitlike.java
+++ b/src/main/java/sevenUnits/unit/FunctionalUnitlike.java
@@ -19,6 +19,7 @@ package sevenUnits.unit;
import java.util.function.DoubleFunction;
import java.util.function.ToDoubleFunction;
+import sevenUnits.utils.NameSymbol;
import sevenUnits.utils.ObjectProduct;
/**
diff --git a/src/main/java/sevenUnits/unit/LinearUnit.java b/src/main/java/sevenUnits/unit/LinearUnit.java
index 25c2e2e..deefc9a 100644
--- a/src/main/java/sevenUnits/unit/LinearUnit.java
+++ b/src/main/java/sevenUnits/unit/LinearUnit.java
@@ -19,6 +19,7 @@ package sevenUnits.unit;
import java.util.Objects;
import sevenUnits.utils.DecimalComparison;
+import sevenUnits.utils.NameSymbol;
import sevenUnits.utils.ObjectProduct;
import sevenUnits.utils.UncertainDouble;
diff --git a/src/main/java/sevenUnits/unit/Metric.java b/src/main/java/sevenUnits/unit/Metric.java
index 3c4d291..78e3769 100644
--- a/src/main/java/sevenUnits/unit/Metric.java
+++ b/src/main/java/sevenUnits/unit/Metric.java
@@ -18,6 +18,7 @@ package sevenUnits.unit;
import java.util.Set;
+import sevenUnits.utils.NameSymbol;
import sevenUnits.utils.ObjectProduct;
/**
diff --git a/src/main/java/sevenUnits/unit/MultiUnit.java b/src/main/java/sevenUnits/unit/MultiUnit.java
index 83cdb03..bc240e3 100644
--- a/src/main/java/sevenUnits/unit/MultiUnit.java
+++ b/src/main/java/sevenUnits/unit/MultiUnit.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import sevenUnits.utils.NameSymbol;
import sevenUnits.utils.ObjectProduct;
/**
diff --git a/src/main/java/sevenUnits/unit/Unit.java b/src/main/java/sevenUnits/unit/Unit.java
index 005b6f7..9866e9c 100644
--- a/src/main/java/sevenUnits/unit/Unit.java
+++ b/src/main/java/sevenUnits/unit/Unit.java
@@ -22,6 +22,8 @@ import java.util.Objects;
import java.util.function.DoubleUnaryOperator;
import sevenUnits.utils.DecimalComparison;
+import sevenUnits.utils.NameSymbol;
+import sevenUnits.utils.Nameable;
import sevenUnits.utils.ObjectProduct;
/**
diff --git a/src/main/java/sevenUnits/unit/UnitDatabase.java b/src/main/java/sevenUnits/unit/UnitDatabase.java
index 18ac619..b029539 100644
--- a/src/main/java/sevenUnits/unit/UnitDatabase.java
+++ b/src/main/java/sevenUnits/unit/UnitDatabase.java
@@ -47,6 +47,8 @@ import java.util.regex.Pattern;
import sevenUnits.utils.ConditionalExistenceCollections;
import sevenUnits.utils.DecimalComparison;
import sevenUnits.utils.ExpressionParser;
+import sevenUnits.utils.NameSymbol;
+import sevenUnits.utils.NamedObjectProduct;
import sevenUnits.utils.ObjectProduct;
import sevenUnits.utils.UncertainDouble;
@@ -1197,7 +1199,7 @@ public final class UnitDatabase {
* @since 2019-03-14
* @since v0.2.0
*/
- private final Map<String, ObjectProduct<BaseDimension>> dimensions;
+ private final Map<String, NamedObjectProduct<BaseDimension>> dimensions;
/**
* A map mapping strings to units (including prefixes)
@@ -1313,9 +1315,16 @@ public final class UnitDatabase {
*/
public void addDimension(final String name,
final ObjectProduct<BaseDimension> dimension) {
- this.dimensions.put(
- Objects.requireNonNull(name, "name must not be null."),
- Objects.requireNonNull(dimension, "dimension must not be null."));
+ Objects.requireNonNull(name, "name may not be null");
+ Objects.requireNonNull(dimension, "dimension may not be null");
+ if (dimension instanceof NamedObjectProduct) {
+ this.dimensions.put(name,
+ (NamedObjectProduct<BaseDimension>) dimension);
+ } else {
+ final NamedObjectProduct<BaseDimension> namedDimension = dimension
+ .withName(NameSymbol.ofName(name));
+ this.dimensions.put(name, namedDimension);
+ }
}
/**
@@ -1367,7 +1376,7 @@ public final class UnitDatabase {
throw e;
}
- this.addDimension(name, dimension);
+ this.addDimension(name, dimension.withName(NameSymbol.ofName(name)));
}
}
@@ -1463,7 +1472,7 @@ public final class UnitDatabase {
throw e;
}
- this.addUnit(name, unit);
+ this.addUnit(name, unit.withName(NameSymbol.ofName(name)));
}
}
}
@@ -1510,7 +1519,7 @@ public final class UnitDatabase {
* @since 2019-04-13
* @since v0.2.0
*/
- public Map<String, ObjectProduct<BaseDimension>> dimensionMap() {
+ public Map<String, NamedObjectProduct<BaseDimension>> dimensionMap() {
return Collections.unmodifiableMap(this.dimensions);
}
diff --git a/src/main/java/sevenUnits/unit/UnitPrefix.java b/src/main/java/sevenUnits/unit/UnitPrefix.java
index 308f4b0..bf9d1fd 100644
--- a/src/main/java/sevenUnits/unit/UnitPrefix.java
+++ b/src/main/java/sevenUnits/unit/UnitPrefix.java
@@ -21,6 +21,7 @@ import java.util.Optional;
import java.util.Set;
import sevenUnits.utils.DecimalComparison;
+import sevenUnits.utils.NameSymbol;
/**
* A prefix that can be applied to a {@code LinearUnit} to multiply it by some value
diff --git a/src/main/java/sevenUnits/unit/UnitValue.java b/src/main/java/sevenUnits/unit/UnitValue.java
index f6d18f8..339263d 100644
--- a/src/main/java/sevenUnits/unit/UnitValue.java
+++ b/src/main/java/sevenUnits/unit/UnitValue.java
@@ -19,6 +19,8 @@ package sevenUnits.unit;
import java.util.Objects;
import java.util.Optional;
+import sevenUnits.utils.NameSymbol;
+
/**
* A value expressed in a unit.
*
diff --git a/src/main/java/sevenUnits/unit/Unitlike.java b/src/main/java/sevenUnits/unit/Unitlike.java
index d2dcbbb..68de2c2 100644
--- a/src/main/java/sevenUnits/unit/Unitlike.java
+++ b/src/main/java/sevenUnits/unit/Unitlike.java
@@ -22,6 +22,8 @@ import java.util.Objects;
import java.util.function.DoubleFunction;
import java.util.function.ToDoubleFunction;
+import sevenUnits.utils.NameSymbol;
+import sevenUnits.utils.Nameable;
import sevenUnits.utils.ObjectProduct;
/**
diff --git a/src/main/java/sevenUnits/unit/UnitlikeValue.java b/src/main/java/sevenUnits/unit/UnitlikeValue.java
index edc13ca..26354b1 100644
--- a/src/main/java/sevenUnits/unit/UnitlikeValue.java
+++ b/src/main/java/sevenUnits/unit/UnitlikeValue.java
@@ -18,6 +18,8 @@ package sevenUnits.unit;
import java.util.Optional;
+import sevenUnits.utils.NameSymbol;
+
/**
*
* @since 2020-09-07
diff --git a/src/main/java/sevenUnits/unit/NameSymbol.java b/src/main/java/sevenUnits/utils/NameSymbol.java
index 3e26138..aea274b 100644
--- a/src/main/java/sevenUnits/unit/NameSymbol.java
+++ b/src/main/java/sevenUnits/utils/NameSymbol.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package sevenUnits.unit;
+package sevenUnits.utils;
import java.util.Arrays;
import java.util.Collections;
@@ -277,4 +277,23 @@ public final class NameSymbol {
// if primaryName is empty, otherNames must also be empty
return this.primaryName.isEmpty() && this.symbol.isEmpty();
}
+
+ /**
+ * @return a short version of this NameSymbol (defaults to symbol instead of
+ * primary name)
+ * @since 2022-02-26
+ */
+ public String shortName() {
+ return this.symbol.or(this::getPrimaryName).orElse("EMPTY");
+ }
+
+ @Override
+ public String toString() {
+ if (this.isEmpty())
+ return "NameSymbol.EMPTY";
+ else if (this.primaryName.isPresent() && this.symbol.isPresent())
+ return this.primaryName + " (" + this.symbol + ")";
+ else
+ return this.primaryName.orElseGet(this.symbol::orElseThrow);
+ }
} \ No newline at end of file
diff --git a/src/main/java/sevenUnits/unit/Nameable.java b/src/main/java/sevenUnits/utils/Nameable.java
index ed23687..3cfc05a 100644
--- a/src/main/java/sevenUnits/unit/Nameable.java
+++ b/src/main/java/sevenUnits/utils/Nameable.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package sevenUnits.unit;
+package sevenUnits.utils;
import java.util.Optional;
import java.util.Set;
diff --git a/src/main/java/sevenUnits/utils/NamedObjectProduct.java b/src/main/java/sevenUnits/utils/NamedObjectProduct.java
index 514f0b1..9c3079c 100644
--- a/src/main/java/sevenUnits/utils/NamedObjectProduct.java
+++ b/src/main/java/sevenUnits/utils/NamedObjectProduct.java
@@ -18,9 +18,6 @@ package sevenUnits.utils;
import java.util.Map;
-import sevenUnits.unit.NameSymbol;
-import sevenUnits.unit.Nameable;
-
/**
* An ObjectProduct with name(s) and/or a symbol. Can be created with the
* {@link ObjectProduct#withName} method.
@@ -43,4 +40,8 @@ public class NamedObjectProduct<T> extends ObjectProduct<T>
return this.nameSymbol;
}
+ @Override
+ public String toString() {
+ return this.nameSymbol.toString() + ", " + super.toString();
+ }
}
diff --git a/src/main/java/sevenUnits/utils/ObjectProduct.java b/src/main/java/sevenUnits/utils/ObjectProduct.java
index d4f88b9..926ce10 100644
--- a/src/main/java/sevenUnits/utils/ObjectProduct.java
+++ b/src/main/java/sevenUnits/utils/ObjectProduct.java
@@ -26,8 +26,6 @@ import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
-import sevenUnits.unit.NameSymbol;
-
/**
* An immutable product of multiple objects of a type, such as base units. The
* objects can be multiplied and exponentiated.
@@ -246,7 +244,9 @@ public class ObjectProduct<T> {
*/
@Override
public String toString() {
- return this.toString(Object::toString);
+ return this.toString(o -> o instanceof Nameable
+ ? ((Nameable) o).getNameSymbol().shortName()
+ : o.toString());
}
/**