Search in sources :

Example 1 with ExchangeRateBuilder

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;
}
Also used : ExchangeRateBuilder(org.javamoney.moneta.convert.ExchangeRateBuilder)

Example 2 with ExchangeRateBuilder

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;
}
Also used : ExchangeRateBuilder(org.javamoney.moneta.convert.ExchangeRateBuilder)

Example 3 with ExchangeRateBuilder

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);
}
Also used : ExchangeRateBuilder(org.javamoney.moneta.convert.ExchangeRateBuilder) ExchangeRate(javax.money.convert.ExchangeRate) RateType(javax.money.convert.RateType) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap)

Example 4 with ExchangeRateBuilder

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;
}
Also used : ExchangeRateBuilder(org.javamoney.moneta.convert.ExchangeRateBuilder)

Example 5 with ExchangeRateBuilder

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());
    }
}
Also used : DefaultNumberValue(org.javamoney.moneta.spi.DefaultNumberValue) ExchangeRate(javax.money.convert.ExchangeRate) HashMap(java.util.HashMap) DecimalFormat(java.text.DecimalFormat) ArrayList(java.util.ArrayList) List(java.util.List) RateType(javax.money.convert.RateType) CurrencyUnit(javax.money.CurrencyUnit) InputStreamReader(java.io.InputStreamReader) IOException(java.io.IOException) ExchangeRateBuilder(org.javamoney.moneta.convert.ExchangeRateBuilder) BufferedReader(java.io.BufferedReader) HashMap(java.util.HashMap) Map(java.util.Map) NumberFormat(java.text.NumberFormat)

Aggregations

ExchangeRateBuilder (org.javamoney.moneta.convert.ExchangeRateBuilder)14 ExchangeRate (javax.money.convert.ExchangeRate)10 MonetaryException (javax.money.MonetaryException)4 RateType (javax.money.convert.RateType)4 DefaultNumberValue (org.javamoney.moneta.spi.DefaultNumberValue)4 CurrencyUnit (javax.money.CurrencyUnit)3 BigDecimal (java.math.BigDecimal)2 LocalDate (java.time.LocalDate)2 Test (org.testng.annotations.Test)2 BufferedReader (java.io.BufferedReader)1 IOException (java.io.IOException)1 InputStreamReader (java.io.InputStreamReader)1 DecimalFormat (java.text.DecimalFormat)1 NumberFormat (java.text.NumberFormat)1 ArrayList (java.util.ArrayList)1 Calendar (java.util.Calendar)1 GregorianCalendar (java.util.GregorianCalendar)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1