use of org.javamoney.moneta.convert.ExchangeRateBuilder in project jsr354-ri by JavaMoney.
the class IdentityRateProvider method getExchangeRate.
@Override
public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) {
if (conversionQuery.getBaseCurrency().getCurrencyCode().equals(conversionQuery.getCurrency().getCurrencyCode())) {
ExchangeRateBuilder builder = new ExchangeRateBuilder(getContext().getProviderName(), RateType.OTHER).setBase(conversionQuery.getBaseCurrency());
builder.setTerm(conversionQuery.getCurrency());
builder.setFactor(DefaultNumberValue.of(BigDecimal.ONE));
return builder.build();
}
return null;
}
use of org.javamoney.moneta.convert.ExchangeRateBuilder in project jsr354-ri by JavaMoney.
the class ECBAbstractRateProvider method getBuilder.
private ExchangeRateBuilder getBuilder(ConversionQuery query, LocalDate localDate) {
ExchangeRateBuilder builder = new ExchangeRateBuilder(getExchangeContext("ecb.digit.fraction"));
builder.setBase(query.getBaseCurrency());
builder.setTerm(query.getCurrency());
return builder;
}
use of org.javamoney.moneta.convert.ExchangeRateBuilder in project jsr354-ri by JavaMoney.
the class ECBRateReadingHandler method addRate.
/**
* Method to add a currency exchange rate.
*
* @param term the term (target) currency, mapped from EUR.
* @param rate The rate.
*/
void addRate(CurrencyUnit term, LocalDate localDate, Number rate) {
RateType rateType = RateType.HISTORIC;
ExchangeRateBuilder builder;
if (Objects.nonNull(localDate)) {
// TODO check/test!
if (localDate.equals(LocalDate.now())) {
rateType = RateType.DEFERRED;
}
builder = new ExchangeRateBuilder(ConversionContextBuilder.create(context, rateType).set(localDate).build());
} else {
builder = new ExchangeRateBuilder(ConversionContextBuilder.create(context, rateType).build());
}
builder.setBase(ECBHistoricRateProvider.BASE_CURRENCY);
builder.setTerm(term);
builder.setFactor(DefaultNumberValue.of(rate));
ExchangeRate exchangeRate = builder.build();
Map<String, ExchangeRate> rateMap = this.historicRates.get(localDate);
if (Objects.isNull(rateMap)) {
synchronized (this.historicRates) {
rateMap = Optional.ofNullable(this.historicRates.get(localDate)).orElse(new ConcurrentHashMap<>());
this.historicRates.putIfAbsent(localDate, rateMap);
}
}
rateMap.put(term.getCurrencyCode(), exchangeRate);
}
use of org.javamoney.moneta.convert.ExchangeRateBuilder in project jsr354-ri-bp by JavaMoney.
the class ECBAbstractRateProvider method getBuilder.
private ExchangeRateBuilder getBuilder(ConversionQuery query, LocalDate localDate) {
ExchangeRateBuilder builder = new ExchangeRateBuilder(ConversionContextBuilder.create(getContext(), RateType.HISTORIC).set(localDate).set("LocalDate", localDate.toString()).build());
builder.setBase(query.getBaseCurrency());
builder.setTerm(query.getCurrency());
return builder;
}
use of org.javamoney.moneta.convert.ExchangeRateBuilder in project jsr354-ri-bp by JavaMoney.
the class IMFRateProvider method loadRatesTSV.
@SuppressWarnings("unchecked")
private void loadRatesTSV(InputStream inputStream) throws IOException, ParseException {
Map<CurrencyUnit, List<ExchangeRate>> newCurrencyToSdr = new HashMap<>();
Map<CurrencyUnit, List<ExchangeRate>> newSdrToCurrency = new HashMap<>();
NumberFormat f = new DecimalFormat("#0.0000000000");
f.setGroupingUsed(false);
BufferedReader pr = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String line = pr.readLine();
if (line.contains("Request Rejected")) {
throw new IOException("Request has been rejected by IMF server.");
}
// int lineType = 0;
boolean currencyToSdr = true;
// SDRs per Currency unit (2)
//
// Currency January 31, 2013 January 30, 2013 January 29, 2013
// January 28, 2013 January 25, 2013
// Euro 0.8791080000 0.8789170000 0.8742470000 0.8752180000
// 0.8768020000
// Currency units per SDR(3)
//
// Currency January 31, 2013 January 30, 2013 January 29, 2013
// January 28, 2013 January 25, 2013
// Euro 1.137520 1.137760 1.143840 1.142570 1.140510
List<LocalDate> timestamps = null;
while (line != null) {
if (line.trim().isEmpty()) {
line = pr.readLine();
continue;
}
if (line.startsWith("SDRs per Currency unit")) {
currencyToSdr = false;
line = pr.readLine();
continue;
} else if (line.startsWith("Currency units per SDR")) {
currencyToSdr = true;
line = pr.readLine();
continue;
} else if (line.startsWith("Currency")) {
timestamps = readTimestamps(line);
line = pr.readLine();
continue;
}
String[] parts = line.split("\\t");
CurrencyUnit currency = currenciesByName.get(parts[0]);
if (currency == null) {
LOGGER.finest("Uninterpretable data from IMF data feed: " + parts[0]);
line = pr.readLine();
continue;
}
Double[] values = parseValues(parts);
for (int i = 0; i < values.length; i++) {
if (values[i] == null) {
continue;
}
LocalDate fromTS = timestamps != null ? timestamps.get(i) : null;
if (fromTS == null) {
continue;
}
RateType rateType = RateType.HISTORIC;
if (fromTS.equals(LocalDate.now())) {
rateType = RateType.DEFERRED;
}
if (currencyToSdr) {
// Currency -> SDR
ExchangeRate rate = new ExchangeRateBuilder(ConversionContextBuilder.create(CONTEXT, rateType).set(fromTS).build()).setBase(currency).setTerm(SDR).setFactor(new DefaultNumberValue(1d / values[i])).build();
List<ExchangeRate> rates = newCurrencyToSdr.get(currency);
if (rates == null) {
rates = new ArrayList<>(5);
newCurrencyToSdr.put(currency, rates);
}
rates.add(rate);
} else {
// SDR -> Currency
ExchangeRate rate = new ExchangeRateBuilder(ConversionContextBuilder.create(CONTEXT, rateType).set(fromTS).set("LocalTime", fromTS.toString()).build()).setBase(SDR).setTerm(currency).setFactor(DefaultNumberValue.of(1d / values[i])).build();
List<ExchangeRate> rates = newSdrToCurrency.get(currency);
if (rates == null) {
rates = new ArrayList<>(5);
newSdrToCurrency.put(currency, rates);
}
rates.add(rate);
}
}
line = pr.readLine();
}
// Cast is save, since contained DefaultExchangeRate is Comparable!
for (List<ExchangeRate> list : newSdrToCurrency.values()) {
Collections.sort(List.class.cast(list));
}
for (List<ExchangeRate> list : newCurrencyToSdr.values()) {
Collections.sort(List.class.cast(list));
}
this.sdrToCurrency = newSdrToCurrency;
this.currencyToSdr = newCurrencyToSdr;
for (Map.Entry<CurrencyUnit, List<ExchangeRate>> entry : this.sdrToCurrency.entrySet()) {
LOGGER.finest("SDR -> " + entry.getKey().getCurrencyCode() + ": " + entry.getValue());
}
for (Map.Entry<CurrencyUnit, List<ExchangeRate>> entry : this.currencyToSdr.entrySet()) {
LOGGER.finest(entry.getKey().getCurrencyCode() + " -> SDR: " + entry.getValue());
}
}
Aggregations