summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2020-07-26 12:09:13 -0500
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2020-07-26 12:09:13 -0500
commit6cd11b76080a98b6f26416cb5954f430aad8d8e1 (patch)
treed468e11dcdab17ed48491bb71ea3ecf9487d5552
parent7c3c6c21ce20eb48cc5c1caa150f3bb950c6a93b (diff)
NameSymbol now picks a primary name when possible and not available.
-rw-r--r--src/org/unitConverter/unit/NameSymbol.java180
1 files changed, 87 insertions, 93 deletions
diff --git a/src/org/unitConverter/unit/NameSymbol.java b/src/org/unitConverter/unit/NameSymbol.java
index 96fab45..8d49c82 100644
--- a/src/org/unitConverter/unit/NameSymbol.java
+++ b/src/org/unitConverter/unit/NameSymbol.java
@@ -19,6 +19,7 @@ package org.unitConverter.unit;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -35,14 +36,11 @@ public final class NameSymbol {
/**
* Gets a {@code NameSymbol} with a primary name, a symbol and no other names.
*
- * @param name
- * name to use
- * @param symbol
- * symbol to use
+ * @param name name to use
+ * @param symbol symbol to use
* @return NameSymbol instance
* @since 2019-10-21
- * @throws NullPointerException
- * if name or symbol is null
+ * @throws NullPointerException if name or symbol is null
*/
public static final NameSymbol of(final String name, final String symbol) {
return new NameSymbol(Optional.of(name), Optional.of(symbol), new HashSet<>());
@@ -51,16 +49,12 @@ public final class NameSymbol {
/**
* Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
*
- * @param name
- * name to use
- * @param symbol
- * symbol to use
- * @param otherNames
- * other names to use
+ * @param name name to use
+ * @param symbol symbol to use
+ * @param otherNames other names to use
* @return NameSymbol instance
* @since 2019-10-21
- * @throws NullPointerException
- * if any argument is null
+ * @throws NullPointerException if any argument is null
*/
public static final NameSymbol of(final String name, final String symbol, final Set<String> otherNames) {
return new NameSymbol(Optional.of(name), Optional.of(symbol),
@@ -68,18 +62,15 @@ public final class NameSymbol {
}
/**
- * h * Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
+ * h * Gets a {@code NameSymbol} with a primary name, a symbol and additional
+ * names.
*
- * @param name
- * name to use
- * @param symbol
- * symbol to use
- * @param otherNames
- * other names to use
+ * @param name name to use
+ * @param symbol symbol to use
+ * @param otherNames other names to use
* @return NameSymbol instance
* @since 2019-10-21
- * @throws NullPointerException
- * if any argument is null
+ * @throws NullPointerException if any argument is null
*/
public static final NameSymbol of(final String name, final String symbol, final String... otherNames) {
return new NameSymbol(Optional.of(name), Optional.of(symbol),
@@ -87,20 +78,16 @@ public final class NameSymbol {
}
/**
- * Gets a {@code NameSymbol} with a primary name, a symbol and an additional name.
+ * Gets a {@code NameSymbol} with a primary name, a symbol and an additional
+ * name.
*
- * @param name
- * name to use
- * @param symbol
- * symbol to use
- * @param otherNames
- * other names to use
- * @param name2
- * alternate name
+ * @param name name to use
+ * @param symbol symbol to use
+ * @param otherNames other names to use
+ * @param name2 alternate name
* @return NameSymbol instance
* @since 2019-10-21
- * @throws NullPointerException
- * if any argument is null
+ * @throws NullPointerException if any argument is null
*/
public static final NameSymbol of(final String name, final String symbol, final String name2) {
final Set<String> otherNames = new HashSet<>();
@@ -111,20 +98,14 @@ public final class NameSymbol {
/**
* Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
*
- * @param name
- * name to use
- * @param symbol
- * symbol to use
- * @param otherNames
- * other names to use
- * @param name2
- * alternate name
- * @param name3
- * alternate name
+ * @param name name to use
+ * @param symbol symbol to use
+ * @param otherNames other names to use
+ * @param name2 alternate name
+ * @param name3 alternate name
* @return NameSymbol instance
* @since 2019-10-21
- * @throws NullPointerException
- * if any argument is null
+ * @throws NullPointerException if any argument is null
*/
public static final NameSymbol of(final String name, final String symbol, final String name2, final String name3) {
final Set<String> otherNames = new HashSet<>();
@@ -136,22 +117,15 @@ public final class NameSymbol {
/**
* Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
*
- * @param name
- * name to use
- * @param symbol
- * symbol to use
- * @param otherNames
- * other names to use
- * @param name2
- * alternate name
- * @param name3
- * alternate name
- * @param name4
- * alternate name
+ * @param name name to use
+ * @param symbol symbol to use
+ * @param otherNames other names to use
+ * @param name2 alternate name
+ * @param name3 alternate name
+ * @param name4 alternate name
* @return NameSymbol instance
* @since 2019-10-21
- * @throws NullPointerException
- * if any argument is null
+ * @throws NullPointerException if any argument is null
*/
public static final NameSymbol of(final String name, final String symbol, final String name2, final String name3,
final String name4) {
@@ -165,12 +139,10 @@ public final class NameSymbol {
/**
* Gets a {@code NameSymbol} with a primary name, no symbol, and no other names.
*
- * @param name
- * name to use
+ * @param name name to use
* @return NameSymbol instance
* @since 2019-10-21
- * @throws NullPointerException
- * if name is null
+ * @throws NullPointerException if name is null
*/
public static final NameSymbol ofName(final String name) {
return new NameSymbol(Optional.of(name), Optional.empty(), new HashSet<>());
@@ -179,50 +151,73 @@ public final class NameSymbol {
/**
* Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
* <p>
- * If any argument is null, this static factory replaces it with an empty Optional or empty Set.
+ * If any argument is null, this static factory replaces it with an empty
+ * Optional or empty Set.
+ * <p>
+ * If {@code name} is null and {@code otherNames} is not empty, a primary name
+ * will be picked from {@code otherNames}. This name will not appear in
+ * getOtherNames().
*
- * @param name
- * name to use
- * @param symbol
- * symbol to use
- * @param otherNames
- * other names to use
+ * @param name name to use
+ * @param symbol symbol to use
+ * @param otherNames other names to use
* @return NameSymbol instance
* @since 2019-11-26
*/
public static final NameSymbol ofNullable(final String name, final String symbol, final Set<String> otherNames) {
- return new NameSymbol(Optional.ofNullable(name), Optional.ofNullable(symbol),
- otherNames == null ? new HashSet<>() : new HashSet<>(otherNames));
+ return NameSymbol.create(name, symbol, otherNames == null ? new HashSet<>() : new HashSet<>(otherNames));
}
/**
- * h * Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
+ * Creates a {@code NameSymbol}, ensuring that if primaryName is null and
+ * otherNames is not empty, one name is moved from otherNames to primaryName
+ *
+ * Ensure that otherNames is a copy of the inputted argument.
+ */
+ private static final NameSymbol create(final String name, final String symbol, final Set<String> otherNames) {
+ final Optional<String> primaryName;
+
+ if (name == null && !otherNames.isEmpty()) {
+ // get primary name and remove it from savedNames
+ Iterator<String> it = otherNames.iterator();
+ assert it.hasNext();
+ primaryName = Optional.of(it.next());
+ otherNames.remove(primaryName.get());
+ } else {
+ primaryName = Optional.ofNullable(name);
+ }
+
+ return new NameSymbol(primaryName, Optional.ofNullable(symbol), otherNames);
+ }
+
+ /**
+ * h * Gets a {@code NameSymbol} with a primary name, a symbol and additional
+ * names.
+ * <p>
+ * If any argument is null, this static factory replaces it with an empty
+ * Optional or empty Set.
* <p>
- * If any argument is null, this static factory replaces it with an empty Optional or empty Set.
+ * If {@code name} is null and {@code otherNames} is not empty, a primary name
+ * will be picked from {@code otherNames}. This name will not appear in
+ * getOtherNames().
*
- * @param name
- * name to use
- * @param symbol
- * symbol to use
- * @param otherNames
- * other names to use
+ * @param name name to use
+ * @param symbol symbol to use
+ * @param otherNames other names to use
* @return NameSymbol instance
* @since 2019-11-26
*/
public static final NameSymbol ofNullable(final String name, final String symbol, final String... otherNames) {
- return new NameSymbol(Optional.ofNullable(name), Optional.ofNullable(symbol),
- otherNames == null ? new HashSet<>() : new HashSet<>(Arrays.asList(otherNames)));
+ return create(name, symbol, otherNames == null ? new HashSet<>() : new HashSet<>(Arrays.asList(otherNames)));
}
/**
* Gets a {@code NameSymbol} with a symbol and no names.
*
- * @param symbol
- * symbol to use
+ * @param symbol symbol to use
* @return NameSymbol instance
* @since 2019-10-21
- * @throws NullPointerException
- * if symbol is null
+ * @throws NullPointerException if symbol is null
*/
public static final NameSymbol ofSymbol(final String symbol) {
return new NameSymbol(Optional.empty(), Optional.of(symbol), new HashSet<>());
@@ -236,18 +231,17 @@ public final class NameSymbol {
/**
* Creates the {@code NameSymbol}.
*
- * @param primaryName
- * primary name of unit
- * @param symbol
- * symbol used to represent unit
- * @param otherNames
- * other names and/or spellings
+ * @param primaryName primary name of unit
+ * @param symbol symbol used to represent unit
+ * @param otherNames other names and/or spellings, should be a mutable copy of
+ * the argument
* @since 2019-10-21
*/
private NameSymbol(final Optional<String> primaryName, final Optional<String> symbol,
final Set<String> otherNames) {
this.primaryName = primaryName;
this.symbol = symbol;
+ otherNames.remove(null);
this.otherNames = Collections.unmodifiableSet(otherNames);
}