/** * Creates a rounding that can be added as {@link MonetaryOperator} to * chained calculations. The instance will lookup the concrete * {@link MonetaryOperator} instance from the {@link Monetary} * based on the input {@link MonetaryAmount}'s {@link CurrencyUnit}. * * @return the (shared) default rounding instance. */ public static MonetaryRounding getDefaultRounding() { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .getDefaultRounding(); }
/** * Allows to access the names of the current registered providers. * * @return the set of provider names, never {@code null}. */ public static Set<String> getRoundingProviderNames() { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .getProviderNames(); }
/** * Allows to access the default providers chain used if no provider chain was passed explicitly.. * * @return the chained list of provider names, never {@code null}. */ public static List<String> getDefaultRoundingProviderChain() { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .getDefaultProviderChain(); }
/** * Access multiple {@link MonetaryRounding} instances using a possibly complex query * * @param roundingQuery The {@link javax.money.RoundingQuery} that may contains arbitrary parameters to be * evaluated. * @return all {@link javax.money.MonetaryRounding} instances matching the query, never {@code null}. */ public static Collection<MonetaryRounding> getRoundings(RoundingQuery roundingQuery) { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .getRoundings(roundingQuery); }
/** * Allows to access the names of the current defined roundings. * * @param providers the providers and ordering to be used. By default providers and ordering as defined in * #getDefaultProviders is used. * @return the set of custom rounding ids, never {@code null}. */ public static Set<String> getRoundingNames(String... providers) { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .getRoundingNames(providers); }
/** * Checks if a {@link MonetaryRounding} matching the query is available. * * @param roundingQuery The {@link javax.money.RoundingQuery} that may contains arbitrary parameters to be * evaluated. * @return true, if a corresponding {@link javax.money.MonetaryRounding} is available. * @throws IllegalArgumentException if no such rounding is registered using a * {@link javax.money.spi.RoundingProviderSpi} instance. */ public static boolean isRoundingAvailable(RoundingQuery roundingQuery) { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .isRoundingAvailable(roundingQuery); }
/** * Access a {@link MonetaryRounding} using a possibly complex query. * * @param roundingQuery The {@link javax.money.RoundingQuery} that may contains arbitrary parameters to be * evaluated. * @return the corresponding {@link javax.money.MonetaryRounding}, never {@code null}. * @throws IllegalArgumentException if no such rounding is registered using a * {@link javax.money.spi.RoundingProviderSpi} instance. */ public static MonetaryRounding getRounding(RoundingQuery roundingQuery) { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .getRounding(roundingQuery); }
/** * Checks if a {@link MonetaryRounding} is available given a roundingId. * * @param roundingName The rounding identifier. * @param providers the providers and ordering to be used. By default providers and ordering as defined in * #getDefaultProviders is used. * @return true, if a corresponding {@link javax.money.MonetaryRounding} is available. * @throws IllegalArgumentException if no such rounding is registered using a * {@link javax.money.spi.RoundingProviderSpi} instance. */ public static boolean isRoundingAvailable(String roundingName, String... providers) { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .isRoundingAvailable(roundingName, providers); }
/** * Creates an {@link MonetaryOperator} for rounding {@link MonetaryAmount} * instances given a currency. * * @param currencyUnit The currency, which determines the required scale. As * {@link java.math.RoundingMode}, by default, {@link java.math.RoundingMode#HALF_UP} * is used. * @param providers the providers and ordering to be used. By default providers and ordering as defined in * #getDefaultProviders is used. * @return a new instance {@link MonetaryOperator} implementing the * rounding, never {@code null}. */ public static MonetaryRounding getRounding(CurrencyUnit currencyUnit, String... providers) { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .getRounding(currencyUnit, providers); }
/** * Checks if a {@link MonetaryRounding} is available given a roundingId. * * @param currencyUnit The currency, which determines the required scale. As {@link java.math.RoundingMode}, * by default, {@link java.math.RoundingMode#HALF_UP} is used. * @param providers the providers and ordering to be used. By default providers and ordering as defined in * #getDefaultProviders is used. * @return true, if a corresponding {@link javax.money.MonetaryRounding} is available. * @throws IllegalArgumentException if no such rounding is registered using a * {@link javax.money.spi.RoundingProviderSpi} instance. */ public static boolean isRoundingAvailable(CurrencyUnit currencyUnit, String... providers) { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .isRoundingAvailable(currencyUnit, providers); }
/** * Access an {@link MonetaryOperator} for custom rounding * {@link MonetaryAmount} instances. * * @param roundingName The rounding identifier. * @param providers the providers and ordering to be used. By default providers and ordering as defined in * #getDefaultProviders is used. * @return the corresponding {@link MonetaryOperator} implementing the * rounding, never {@code null}. * @throws IllegalArgumentException if no such rounding is registered using a * {@link javax.money.spi.RoundingProviderSpi} instance. */ public static MonetaryRounding getRounding(String roundingName, String... providers) { return Optional.ofNullable(monetaryRoundingsSingletonSpi()).orElseThrow( () -> new MonetaryException("No MonetaryRoundingsSpi loaded, query functionality is not available.")) .getRounding(roundingName, providers); }