summaryrefslogtreecommitdiff
path: root/src/org/unitConverter/unit/BaseUnit.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/unitConverter/unit/BaseUnit.java')
-rw-r--r--src/org/unitConverter/unit/BaseUnit.java63
1 files changed, 39 insertions, 24 deletions
diff --git a/src/org/unitConverter/unit/BaseUnit.java b/src/org/unitConverter/unit/BaseUnit.java
index 8f44861..e9ef3fa 100644
--- a/src/org/unitConverter/unit/BaseUnit.java
+++ b/src/org/unitConverter/unit/BaseUnit.java
@@ -16,10 +16,15 @@
*/
package org.unitConverter.unit;
+import java.util.HashSet;
import java.util.Objects;
+import java.util.Set;
/**
* A unit that other units are defined by.
+ * <p>
+ * Note that BaseUnits <b>must</b> have names and symbols. This is because they are used for toString code. Therefore,
+ * the Optionals provided by {@link #getPrimaryName} and {@link #getSymbol} will always contain a value.
*
* @author Adrien Hopkins
* @since 2019-10-16
@@ -38,19 +43,34 @@ public final class BaseUnit extends Unit {
* @since 2019-10-16
*/
public static BaseUnit valueOf(final BaseDimension dimension, final String name, final String symbol) {
- return new BaseUnit(dimension, name, symbol);
+ return new BaseUnit(dimension, name, symbol, new HashSet<>());
+ }
+
+ /**
+ * Gets a base unit from the dimension it measures, its name and its symbol.
+ *
+ * @param dimension
+ * dimension measured by this unit
+ * @param name
+ * name of unit
+ * @param symbol
+ * symbol of unit
+ * @return base unit
+ * @since 2019-10-21
+ */
+ public static BaseUnit valueOf(final BaseDimension dimension, final String name, final String symbol,
+ final Set<String> otherNames) {
+ return new BaseUnit(dimension, name, symbol, otherNames);
}
private final BaseDimension dimension;
- private final String name;
- private final String symbol;
/**
* Creates the {@code BaseUnit}.
*
* @param dimension
* dimension of unit
- * @param name
+ * @param primaryName
* name of unit
* @param symbol
* symbol of unit
@@ -58,11 +78,10 @@ public final class BaseUnit extends Unit {
* if any argument is null
* @since 2019-10-16
*/
- private BaseUnit(final BaseDimension dimension, final String name, final String symbol) {
- super();
+ private BaseUnit(final BaseDimension dimension, final String primaryName, final String symbol,
+ final Set<String> otherNames) {
+ super(primaryName, symbol, otherNames);
this.dimension = Objects.requireNonNull(dimension, "dimension must not be null.");
- this.name = Objects.requireNonNull(name, "name must not be null.");
- this.symbol = Objects.requireNonNull(symbol, "symbol must not be null.");
}
/**
@@ -94,24 +113,20 @@ public final class BaseUnit extends Unit {
return this.dimension;
}
- /**
- * @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 String toString() {
+ return this.getPrimaryName().orElse("Unnamed unit")
+ + (this.getSymbol().isPresent() ? String.format(" (%s)", this.getSymbol().get()) : "");
}
@Override
- public String toString() {
- return String.format("%s (%s)", this.getName(), this.getSymbol());
+ public BaseUnit withName(final NameSymbol ns) {
+ Objects.requireNonNull(ns, "ns must not be null.");
+ if (!ns.getPrimaryName().isPresent())
+ throw new IllegalArgumentException("BaseUnits must have primary names.");
+ if (!ns.getSymbol().isPresent())
+ throw new IllegalArgumentException("BaseUnits must have symbols.");
+ return BaseUnit.valueOf(this.getBaseDimension(), ns.getPrimaryName().get(), ns.getSymbol().get(),
+ ns.getOtherNames());
}
}