use of javax.money.MonetaryException in project jsr354-ri by JavaMoney.
the class DefaultMonetaryConversionsSingletonSpi method getProvidersToUse.
private Collection<String> getProvidersToUse(ConversionQuery query) {
List<String> providersToUse = new ArrayList<>();
List<String> providerNames = query.getProviderNames();
if (providerNames.isEmpty()) {
providerNames = getDefaultProviderChain();
if (providerNames.isEmpty()) {
throw new IllegalStateException("No default provider chain available.");
}
}
for (String provider : providerNames) {
ExchangeRateProvider prov = this.conversionProviders.get(provider);
if (prov == null) {
throw new MonetaryException("Invalid ExchangeRateProvider (not found): " + provider);
}
providersToUse.add(provider);
}
return providersToUse;
}
use of javax.money.MonetaryException in project jsr354-ri by JavaMoney.
the class MoneyUtils method checkAmountParameter.
/**
* Method to check if a currency is compatible with this amount instance.
*
* @param amount The monetary amount to be compared to, never null.
* @param currencyUnit the currency unit to compare, never null.
* @throws MonetaryException If the amount is null, or the amount's {@link CurrencyUnit} is not
* compatible, meaning has a different value of
* {@link CurrencyUnit#getCurrencyCode()}).
*/
public static void checkAmountParameter(MonetaryAmount amount, CurrencyUnit currencyUnit) {
Objects.requireNonNull(amount, "Amount must not be null.");
final CurrencyUnit amountCurrency = amount.getCurrency();
if (!(currencyUnit.getCurrencyCode().equals(amountCurrency.getCurrencyCode()))) {
throw new MonetaryException("Currency mismatch: " + currencyUnit + '/' + amountCurrency);
}
}
use of javax.money.MonetaryException in project jsr354-ri-bp by JavaMoney.
the class CurrencyToken method parse.
/**
* Parses a currency from the given {@link ParseContext}. Depending on the
* current {@link CurrencyStyle} it interprets the next non empty token,
* either as
* <ul>
* <li>currency code
* <li>currency symbol
* </ul>
* Parsing of localized currency names or numeric code is not supported.
*
* @throws UnsupportedOperationException if the {@link CurrencyStyle} is configured to us currency
* names, or numeric codes for formatting.
*/
@Override
public void parse(ParseContext context) throws MonetaryParseException {
String token = context.lookupNextToken();
while (token != null) {
if (!token.trim().isEmpty()) {
break;
}
context.consume(token);
token = context.lookupNextToken();
}
if (token == null) {
throw new MonetaryException("Error parsing CurrencyUnit: token expected");
}
try {
CurrencyUnit cur;
switch(style) {
case CODE:
if (!Monetary.isCurrencyAvailable(token)) {
// Perhaps blank is missing between currency code and number...
String subCurrency = parseCurrencyCode(token);
cur = Monetary.getCurrency(subCurrency);
context.consume(subCurrency);
} else {
cur = Monetary.getCurrency(token);
context.consume(token);
}
break;
case SYMBOL:
if (token.startsWith("$")) {
throw new MonetaryParseException("$ is not a unique currency symbol.", token, context.getErrorIndex());
} else if (token.startsWith("€")) {
cur = Monetary.getCurrency("EUR");
context.consume("€");
} else if (token.startsWith("£")) {
cur = Monetary.getCurrency("GBP");
context.consume("£");
} else {
cur = Monetary.getCurrency(token);
context.consume(token);
}
context.setParsedCurrency(cur);
break;
case NAME:
case NUMERIC_CODE:
default:
throw new UnsupportedOperationException("Not yet implemented");
}
if (cur != null) {
context.setParsedCurrency(cur);
}
} catch (Exception e) {
throw new MonetaryException("Error parsing CurrencyUnit.", e);
}
}
use of javax.money.MonetaryException in project jsr354-ri-bp by JavaMoney.
the class DefaultMonetaryConversionsSingletonSpi method getExchangeRateProvider.
@Override
public ExchangeRateProvider getExchangeRateProvider(ConversionQuery query) {
Collection<String> providers = getProvidersToUse(query);
List<ExchangeRateProvider> provInstances = new ArrayList<>();
for (String provName : providers) {
ExchangeRateProvider prov = this.conversionProviders.get(provName);
if (prov == null) {
throw new MonetaryException("Unsupported conversion/rate provider: " + provName);
}
provInstances.add(prov);
}
if (provInstances.isEmpty()) {
throw new MonetaryException("No such providers: " + query);
}
if (provInstances.size() == 1) {
return provInstances.get(0);
}
return new CompoundRateProvider(provInstances);
}
use of javax.money.MonetaryException in project jsr354-ri-bp by JavaMoney.
the class DefaultMonetaryConversionsSingletonSpi method getExchangeRateProvider.
@Override
public ExchangeRateProvider getExchangeRateProvider(String... providers) {
List<ExchangeRateProvider> provInstances = new ArrayList<>();
for (String provName : providers) {
ExchangeRateProvider prov = this.conversionProviders.get(provName);
if (prov == null) {
throw new MonetaryException("Unsupported conversion/rate provider: " + provName);
}
provInstances.add(prov);
}
if (provInstances.size() == 1) {
return provInstances.get(0);
}
return new CompoundRateProvider(provInstances);
}
Aggregations