Search in sources :

Example 1 with RateType

use of javax.money.convert.RateType 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 2 with RateType

use of javax.money.convert.RateType in project jsr354-ri-bp by JavaMoney.

the class CompoundRateProvider method createContext.

private static ProviderContext createContext(Iterable<ExchangeRateProvider> providers) {
    Set<RateType> rateTypeSet = new HashSet<>();
    StringBuilder providerName = new StringBuilder("Compound: ");
    List<ProviderContext> childContextList = new ArrayList<>();
    for (ExchangeRateProvider exchangeRateProvider : providers) {
        childContextList.add(exchangeRateProvider.getContext());
        providerName.append(exchangeRateProvider.getContext().getProviderName());
        providerName.append(',');
        rateTypeSet.addAll(exchangeRateProvider.getContext().getRateTypes());
    }
    providerName.setLength(providerName.length() - 1);
    ProviderContextBuilder builder = ProviderContextBuilder.of(providerName.toString(), rateTypeSet);
    builder.set(CHILD_PROVIDER_CONTEXTS_KEY, childContextList);
    return builder.build();
}
Also used : ExchangeRateProvider(javax.money.convert.ExchangeRateProvider) ProviderContext(javax.money.convert.ProviderContext) RateType(javax.money.convert.RateType) ProviderContextBuilder(javax.money.convert.ProviderContextBuilder)

Example 3 with RateType

use of javax.money.convert.RateType 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)

Example 4 with RateType

use of javax.money.convert.RateType in project jsr354-ri by JavaMoney.

the class CompoundRateProvider method createContext.

private static ProviderContext createContext(Iterable<ExchangeRateProvider> providers) {
    Set<RateType> rateTypeSet = new HashSet<>();
    StringBuilder providerName = new StringBuilder("Compound: ");
    List<ProviderContext> childContextList = new ArrayList<>();
    for (ExchangeRateProvider exchangeRateProvider : providers) {
        childContextList.add(exchangeRateProvider.getContext());
        providerName.append(exchangeRateProvider.getContext().getProviderName());
        providerName.append(',');
        rateTypeSet.addAll(exchangeRateProvider.getContext().getRateTypes());
    }
    providerName.setLength(providerName.length() - 1);
    ProviderContextBuilder builder = ProviderContextBuilder.of(providerName.toString(), rateTypeSet);
    builder.set(CHILD_PROVIDER_CONTEXTS_KEY, childContextList);
    return builder.build();
}
Also used : ExchangeRateProvider(javax.money.convert.ExchangeRateProvider) ProviderContext(javax.money.convert.ProviderContext) ArrayList(java.util.ArrayList) RateType(javax.money.convert.RateType) ProviderContextBuilder(javax.money.convert.ProviderContextBuilder) HashSet(java.util.HashSet)

Example 5 with RateType

use of javax.money.convert.RateType in project jsr354-ri by JavaMoney.

the class IMFRateReadingHandler method saveExchangeRate.

private void saveExchangeRate(Map<CurrencyUnit, List<ExchangeRate>> currencyToSdr, Map<CurrencyUnit, List<ExchangeRate>> sdrToCurrency, boolean isCurrencyToSdr, List<LocalDate> timestamps, CurrencyUnit currency, Double[] values) {
    for (int index = 0; index < values.length; index++) {
        if (Objects.isNull(values[index]) || Objects.isNull(getLocalDateFromTS(timestamps, index))) {
            continue;
        }
        LocalDate fromTS = getLocalDateFromTS(timestamps, index);
        RateType rateType = getRateType(fromTS);
        if (isCurrencyToSdr) {
            ExchangeRate rate = new ExchangeRateBuilder(ConversionContextBuilder.create(context, rateType).set(fromTS).build()).setBase(currency).setTerm(IMFAbstractRateProvider.SDR).setFactor(new DefaultNumberValue(1D / values[index])).build();
            List<ExchangeRate> rates = currencyToSdr.computeIfAbsent(currency, c -> new ArrayList<>(5));
            rates.add(rate);
        } else {
            ExchangeRate rate = new ExchangeRateBuilder(ConversionContextBuilder.create(context, rateType).set(fromTS).build()).setBase(IMFAbstractRateProvider.SDR).setTerm(currency).setFactor(DefaultNumberValue.of(1D / values[index])).build();
            List<ExchangeRate> rates = sdrToCurrency.computeIfAbsent(currency, (c) -> new ArrayList<>(5));
            rates.add(rate);
        }
    }
}
Also used : ExchangeRateBuilder(org.javamoney.moneta.convert.ExchangeRateBuilder) DefaultNumberValue(org.javamoney.moneta.spi.DefaultNumberValue) ExchangeRate(javax.money.convert.ExchangeRate) RateType(javax.money.convert.RateType) LocalDate(java.time.LocalDate)

Aggregations

RateType (javax.money.convert.RateType)6 ExchangeRate (javax.money.convert.ExchangeRate)4 ExchangeRateBuilder (org.javamoney.moneta.convert.ExchangeRateBuilder)4 ArrayList (java.util.ArrayList)2 ExchangeRateProvider (javax.money.convert.ExchangeRateProvider)2 ProviderContext (javax.money.convert.ProviderContext)2 ProviderContextBuilder (javax.money.convert.ProviderContextBuilder)2 DefaultNumberValue (org.javamoney.moneta.spi.DefaultNumberValue)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 LocalDate (java.time.LocalDate)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 CurrencyUnit (javax.money.CurrencyUnit)1