package com.msgilligan.bitcoinj.money; import org.javamoney.moneta.CurrencyUnitBuilder; import javax.money.CurrencyContext; import javax.money.CurrencyContextBuilder; import javax.money.CurrencyQuery; import javax.money.CurrencyUnit; import javax.money.spi.CurrencyProviderSpi; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * A BitcoinCurrencyProvider based on work in the javamoney-shelter. * * @author Sean Gilligan * @author Werner Keil */ public class BitcoinCurrencyProvider implements CurrencyProviderSpi { final static int bitcoinFractionDigits = 8; // Not sure what to do here... private final CurrencyContext CONTEXT = CurrencyContextBuilder.of("BitcoinCurrencyContextProvider") .build(); private Set<CurrencyUnit> bitcoinSet = new HashSet<>(); public BitcoinCurrencyProvider() { CurrencyUnit btcUnit = CurrencyUnitBuilder.of("BTC", CONTEXT) .setDefaultFractionDigits(bitcoinFractionDigits) .build(); bitcoinSet.add(btcUnit); bitcoinSet = Collections.unmodifiableSet(bitcoinSet); } @Override public String getProviderName(){ return "bitcoin"; } /** * Return a {@link CurrencyUnit} instances matching the given * {@link javax.money.CurrencyContext}. * * @param query the {@link javax.money.CurrencyQuery} containing the parameters determining the query. not null. * @return the corresponding {@link CurrencyUnit}s matching, never null. */ @Override public Set<CurrencyUnit> getCurrencies(CurrencyQuery query){ // only ensure BTC is the code, or it is a default query. if(query.getCurrencyCodes().contains("BTC") || query.getCurrencyCodes().isEmpty()){ return bitcoinSet; } return Collections.emptySet(); } @Override public boolean isCurrencyAvailable(CurrencyQuery query) { return !getCurrencies(query).isEmpty(); } }