diff options
author | Adrien Hopkins <adrien.p.hopkins@gmail.com> | 2020-07-26 12:09:13 -0500 |
---|---|---|
committer | Adrien Hopkins <adrien.p.hopkins@gmail.com> | 2020-07-26 12:09:13 -0500 |
commit | 6cd11b76080a98b6f26416cb5954f430aad8d8e1 (patch) | |
tree | d468e11dcdab17ed48491bb71ea3ecf9487d5552 | |
parent | 7c3c6c21ce20eb48cc5c1caa150f3bb950c6a93b (diff) |
NameSymbol now picks a primary name when possible and not available.
-rw-r--r-- | src/org/unitConverter/unit/NameSymbol.java | 180 |
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); } |