Search in sources :

Example 1 with DefaultNumberValue

use of org.javamoney.moneta.spi.DefaultNumberValue 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 2 with DefaultNumberValue

use of org.javamoney.moneta.spi.DefaultNumberValue in project jsr354-ri by JavaMoney.

the class ExchangeRateBuilderTest method equalsTest.

@Test
public void equalsTest() {
    DefaultNumberValue factor = new DefaultNumberValue(1.1);
    DefaultNumberValue bigDecimalFactor = new DefaultNumberValue(new BigDecimal("1.1"));
    CurrencyUnit EUR = Monetary.getCurrency("EUR");
    CurrencyUnit GBP = Monetary.getCurrency("GBP");
    ExchangeRate rate1 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(factor).build();
    ExchangeRate rate2 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(factor).build();
    ExchangeRate rate3 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(bigDecimalFactor).build();
    assertEquals(rate1, rate2, "Rates with same factor");
    assertEquals(rate1, rate3, "Rates with numerically equal factor");
    assertEquals(rate1.hashCode(), rate2.hashCode(), "Hashes with same factor");
    assertEquals(rate1.hashCode(), rate3.hashCode(), "Hashes with numerically equal factor");
}
Also used : DefaultNumberValue(org.javamoney.moneta.spi.DefaultNumberValue) CurrencyUnit(javax.money.CurrencyUnit) ExchangeRate(javax.money.convert.ExchangeRate) BigDecimal(java.math.BigDecimal) Test(org.testng.annotations.Test)

Example 3 with DefaultNumberValue

use of org.javamoney.moneta.spi.DefaultNumberValue 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)

Example 4 with DefaultNumberValue

use of org.javamoney.moneta.spi.DefaultNumberValue in project jsr354-ri by JavaMoney.

the class ExchangeRateSimpleTest method equalsTest.

@Test
public void equalsTest() {
    DefaultNumberValue factor = new DefaultNumberValue(1.1);
    DefaultNumberValue bigDecimalFactor = new DefaultNumberValue(new BigDecimal("1.1"));
    ExchangeRate rate1 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(factor).build();
    ExchangeRate rate2 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(factor).build();
    ExchangeRate rate3 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(bigDecimalFactor).build();
    assertEquals(rate1, rate2, "Rates with same factor");
    assertEquals(rate1, rate3, "Rates with numerically equal factor");
    assertEquals(rate1.hashCode(), rate2.hashCode(), "Hashes with same factor");
    assertEquals(rate1.hashCode(), rate3.hashCode(), "Hashes with numerically equal factor");
}
Also used : DefaultNumberValue(org.javamoney.moneta.spi.DefaultNumberValue) ExchangeRateBuilder(org.javamoney.moneta.convert.ExchangeRateBuilder) ExchangeRate(javax.money.convert.ExchangeRate) BigDecimal(java.math.BigDecimal) Test(org.testng.annotations.Test)

Example 5 with DefaultNumberValue

use of org.javamoney.moneta.spi.DefaultNumberValue in project jsr354-ri-bp by JavaMoney.

the class ExchangeRateBuilderTest method equalsTest.

@Test
public void equalsTest() {
    DefaultNumberValue factor = new DefaultNumberValue(1.1);
    DefaultNumberValue bigDecimalFactor = new DefaultNumberValue(new BigDecimal("1.1"));
    CurrencyUnit EUR = Monetary.getCurrency("EUR");
    CurrencyUnit GBP = Monetary.getCurrency("GBP");
    ExchangeRate rate1 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(factor).build();
    ExchangeRate rate2 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(factor).build();
    ExchangeRate rate3 = new ExchangeRateBuilder("myprovider", RateType.ANY).setBase(EUR).setTerm(GBP).setFactor(bigDecimalFactor).build();
    assertEquals(rate1, rate2, "Rates with same factor");
    assertEquals(rate1, rate3, "Rates with numerically equal factor");
    assertEquals(rate1.hashCode(), rate2.hashCode(), "Hashes with same factor");
    assertEquals(rate1.hashCode(), rate3.hashCode(), "Hashes with numerically equal factor");
}
Also used : DefaultNumberValue(org.javamoney.moneta.spi.DefaultNumberValue) CurrencyUnit(javax.money.CurrencyUnit) ExchangeRate(javax.money.convert.ExchangeRate) BigDecimal(java.math.BigDecimal) Test(org.testng.annotations.Test)

Aggregations

ExchangeRate (javax.money.convert.ExchangeRate)6 DefaultNumberValue (org.javamoney.moneta.spi.DefaultNumberValue)6 BigDecimal (java.math.BigDecimal)4 ExchangeRateBuilder (org.javamoney.moneta.convert.ExchangeRateBuilder)4 Test (org.testng.annotations.Test)4 CurrencyUnit (javax.money.CurrencyUnit)3 RateType (javax.money.convert.RateType)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 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1