batm_public/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/dash/sources/coinmarketcap/CoinmarketcapRateSource.java

117 lines
3.7 KiB
Java
Raw Normal View History

package com.generalbytes.batm.server.extensions.extra.dash.sources.coinmarketcap;
import com.generalbytes.batm.server.extensions.Currencies;
import com.generalbytes.batm.server.extensions.IRateSource;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import java.util.HashMap;
2018-06-03 16:59:29 -07:00
import java.util.Map;
import si.mazi.rescu.RestProxyFactory;
/**
2018-06-07 07:03:11 -07:00
* Created by kkyovsky on 11/29/17.
*
* Modified by sidhujag on 6/3/2018
*/
public class CoinmarketcapRateSource implements IRateSource {
private ICoinmarketcapAPI api;
2018-05-18 22:39:03 -07:00
private static HashMap<String,Integer> coinIDs = new HashMap<String, Integer>();
private String preferredFiatCurrency = Currencies.USD;
2018-03-23 03:45:07 -07:00
public CoinmarketcapRateSource(String preferedFiatCurrency) {
this();
if (Currencies.EUR.equalsIgnoreCase(preferedFiatCurrency)) {
this.preferredFiatCurrency = Currencies.EUR;
2018-03-23 03:45:07 -07:00
}
if (Currencies.USD.equalsIgnoreCase(preferedFiatCurrency)) {
this.preferredFiatCurrency = Currencies.USD;
2018-03-23 03:45:07 -07:00
}
if (Currencies.CAD.equalsIgnoreCase(preferedFiatCurrency)) {
this.preferredFiatCurrency = Currencies.CAD;
}
2018-05-18 22:41:10 -07:00
coinIDs.put(Currencies.BTC, 1);
coinIDs.put(Currencies.SYS, 541);
coinIDs.put(Currencies.BCH, 1831);
coinIDs.put(Currencies.BTX, 1654);
coinIDs.put(Currencies.LTC, 2);
coinIDs.put(Currencies.ETH, 1027);
coinIDs.put(Currencies.DASH, 131);
coinIDs.put(Currencies.XMR, 328);
coinIDs.put(Currencies.POT, 122);
coinIDs.put(Currencies.FLASH, 1755);
2018-06-08 11:39:25 -07:00
coinIDs.put(Currencies.BTCP, 2575);
2018-06-07 11:58:38 -07:00
coinIDs.put(Currencies.EFL, 234);
2018-03-23 03:45:07 -07:00
}
public CoinmarketcapRateSource() {
api = RestProxyFactory.createProxy(ICoinmarketcapAPI.class, "https://api.coinmarketcap.com");
}
@Override
public Set<String> getCryptoCurrencies() {
Set<String> result = new HashSet<String>();
result.add(Currencies.BTC);
result.add(Currencies.SYS);
result.add(Currencies.BCH);
result.add(Currencies.BTX);
result.add(Currencies.LTC);
result.add(Currencies.ETH);
result.add(Currencies.DASH);
result.add(Currencies.XMR);
result.add(Currencies.POT);
result.add(Currencies.FLASH);
2018-06-08 11:39:25 -07:00
result.add(Currencies.BTCP);
2018-05-19 02:48:33 -07:00
result.add(Currencies.EFL);
return result;
}
@Override
public Set<String> getFiatCurrencies() {
Set<String> result = new HashSet<String>();
result.add(Currencies.USD);
result.add(Currencies.CAD);
result.add(Currencies.EUR);
return result;
}
@Override
public String getPreferredFiatCurrency() {
return Currencies.USD;
}
@Override
public BigDecimal getExchangeRateLast(String cryptoCurrency, String fiatCurrency) {
if (!getFiatCurrencies().contains(fiatCurrency)) {
return null;
}
2018-05-19 02:48:33 -07:00
2018-05-18 22:41:10 -07:00
Integer cryptoId = coinIDs.get(cryptoCurrency);
if(cryptoId == null){
2018-06-07 11:58:38 -07:00
return null;
2018-05-18 22:41:10 -07:00
}
2018-06-03 17:18:57 -07:00
Map<String, Object> ticker = api.getTickers(cryptoId, fiatCurrency);
2018-06-03 18:02:36 -07:00
if(ticker == null){
return null;
}
Map<String, Object> data = (Map<String, Object>) ticker.get("data");
if(data == null){
return null;
}
Map<String, Object> quotes = (Map<String, Object>) data.get("quotes");
2018-06-03 18:02:36 -07:00
if(quotes == null){
return null;
}
2018-06-03 17:51:45 -07:00
Map<String, Object> quote = (Map<String, Object>) quotes.get(fiatCurrency);
2018-06-03 18:02:36 -07:00
if(quote == null){
return null;
}
2018-06-03 18:11:57 -07:00
double price = (double) quote.get("price");
return new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN);
}
}