otherNames = new HashSet<>();
otherNames.add(Objects.requireNonNull(name2, "name2 must not be null."));
otherNames.add(Objects.requireNonNull(name3, "name3 must not be null."));
otherNames.add(Objects.requireNonNull(name4, "name4 must not be null."));
return new NameSymbol(Optional.of(name), Optional.of(symbol), otherNames);
}
/**
* Gets a {@code NameSymbol} with a primary name, no symbol, and no other names.
*
* @param name
* name to use
* @return NameSymbol instance
* @since 2019-10-21
* @throws NullPointerException
* if name is null
*/
public static final NameSymbol ofName(final String name) {
return new NameSymbol(Optional.of(name), Optional.empty(), new HashSet<>());
}
/**
* Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
*
* If any argument is null, this static factory replaces it with an empty Optional or empty Set.
*
* @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 otherNames) {
return new NameSymbol(Optional.ofNullable(name), Optional.ofNullable(symbol),
otherNames == null ? new HashSet<>() : new HashSet<>(otherNames));
}
/**
* h * Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
*
* If any argument is null, this static factory replaces it with an empty Optional or empty Set.
*
* @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)));
}
/**
* Gets a {@code NameSymbol} with a symbol and no names.
*
* @param symbol
* symbol to use
* @return NameSymbol instance
* @since 2019-10-21
* @throws NullPointerException
* if symbol is null
*/
public static final NameSymbol ofSymbol(final String symbol) {
return new NameSymbol(Optional.empty(), Optional.of(symbol), new HashSet<>());
}
private final Optional primaryName;
private final Optional symbol;
private final Set otherNames;
/**
* Creates the {@code NameSymbol}.
*
* @param primaryName
* primary name of unit
* @param symbol
* symbol used to represent unit
* @param otherNames
* other names and/or spellings
* @since 2019-10-21
*/
private NameSymbol(final Optional primaryName, final Optional symbol,
final Set otherNames) {
this.primaryName = primaryName;
this.symbol = symbol;
this.otherNames = Collections.unmodifiableSet(otherNames);
}
/**
* @return otherNames
* @since 2019-10-21
*/
public final Set getOtherNames() {
return this.otherNames;
}
/**
* @return primaryName
* @since 2019-10-21
*/
public final Optional getPrimaryName() {
return this.primaryName;
}
/**
* @return symbol
* @since 2019-10-21
*/
public final Optional getSymbol() {
return this.symbol;
}
}