package org.knowm.xchange.independentreserve; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.knowm.xchange.currency.Currency; import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.Order; import org.knowm.xchange.dto.account.Balance; import org.knowm.xchange.dto.account.Wallet; import org.knowm.xchange.dto.marketdata.OrderBook; import org.knowm.xchange.dto.marketdata.Trades; import org.knowm.xchange.dto.trade.LimitOrder; import org.knowm.xchange.dto.trade.OpenOrders; import org.knowm.xchange.dto.trade.UserTrade; import org.knowm.xchange.dto.trade.UserTrades; import org.knowm.xchange.independentreserve.dto.account.IndependentReserveAccount; import org.knowm.xchange.independentreserve.dto.account.IndependentReserveBalance; import org.knowm.xchange.independentreserve.dto.marketdata.IndependentReserveOrderBook; import org.knowm.xchange.independentreserve.dto.marketdata.OrderBookOrder; import org.knowm.xchange.independentreserve.dto.trade.IndependentReserveOpenOrder; import org.knowm.xchange.independentreserve.dto.trade.IndependentReserveOpenOrdersResponse; import org.knowm.xchange.independentreserve.dto.trade.IndependentReserveTrade; import org.knowm.xchange.independentreserve.dto.trade.IndependentReserveTradeHistoryResponse; /** * Author: Kamil Zbikowski Date: 4/10/15 */ public class IndependentReserveAdapters { private IndependentReserveAdapters() { } public static OrderBook adaptOrderBook(IndependentReserveOrderBook independentReserveOrderBook) { // reverse mapping Xbt (Independent Reserve) to BTC (XChange) String base = independentReserveOrderBook.getPrimaryCurrencyCode(); if (base.equals("Xbt")) { base = "BTC"; } CurrencyPair currencyPair = new CurrencyPair(base, independentReserveOrderBook.getSecondaryCurrencyCode()); List<LimitOrder> bids = adaptOrders(independentReserveOrderBook.getBuyOrders(), Order.OrderType.BID, currencyPair); List<LimitOrder> asks = adaptOrders(independentReserveOrderBook.getSellOrders(), Order.OrderType.ASK, currencyPair); Date timestamp = independentReserveOrderBook.getCreatedTimestamp(); return new OrderBook(timestamp, asks, bids); } private static List<LimitOrder> adaptOrders(List<OrderBookOrder> buyOrders, Order.OrderType type, CurrencyPair currencyPair) { final List<LimitOrder> orders = new ArrayList<LimitOrder>(); for (OrderBookOrder obo : buyOrders) { LimitOrder limitOrder = new LimitOrder(type, obo.getVolume(), currencyPair, null, null, obo.getPrice()); orders.add(limitOrder); } return orders; } public static Wallet adaptWallet(IndependentReserveBalance independentReserveBalance) { List<Balance> balances = new ArrayList<Balance>(); for (IndependentReserveAccount balanceAccount : independentReserveBalance.getIndependentReserveAccounts()) { Currency currency = Currency.getInstance(balanceAccount.getCurrencyCode().toUpperCase()); balances.add(new Balance(currency.getCommonlyUsedCurrency(), balanceAccount.getTotalBalance(), balanceAccount.getAvailableBalance())); } return new Wallet(balances); } public static OpenOrders adaptOpenOrders(IndependentReserveOpenOrdersResponse independentReserveOrders) { List<LimitOrder> limitOrders = new ArrayList<LimitOrder>(); List<IndependentReserveOpenOrder> independentReserveOrdersList = independentReserveOrders.getIndependentReserveOrders(); for (IndependentReserveOpenOrder order : independentReserveOrdersList) { String orderType = order.getOrderType(); Order.OrderType type; if (orderType.equals("LimitOffer")) { type = Order.OrderType.ASK; } else if (orderType.equals("LimitBid")) { type = Order.OrderType.BID; } else { throw new IllegalStateException("Unknown order found in Independent Reserve"); } // getting valid order currency pair String primaryAlias = order.getPrimaryCurrencyCode(); if (primaryAlias.equals("Xbt")) { primaryAlias = "BTC"; } Currency primary = Currency.getInstanceNoCreate(primaryAlias); Currency secondary = Currency.getInstanceNoCreate(order.getSecondaryCurrencyCode()); CurrencyPair currencyPair = new CurrencyPair(primary, secondary); LimitOrder limitOrder = new LimitOrder(type, order.getOutstanding(), currencyPair, order.getOrderGuid(), order.getCreatedTimestamp(), order.getPrice()); limitOrders.add(limitOrder); } return new OpenOrders(limitOrders); } public static UserTrades adaptTradeHistory(IndependentReserveTradeHistoryResponse independentReserveTradeHistoryResponse) { List<UserTrade> userTrades = new ArrayList<UserTrade>(); for (IndependentReserveTrade trade : independentReserveTradeHistoryResponse.getIndependentReserveTrades()) { Order.OrderType type; String orderType = trade.getOrderType(); if (orderType.equals("LimitOffer") || orderType.equals("MarketOffer")) { type = Order.OrderType.ASK; } else if (orderType.equals("LimitBid") || orderType.equals("MarketBid")) { type = Order.OrderType.BID; } else { throw new IllegalStateException("Unknown order found in Independent Reserve"); } String primaryAlias = trade.getPrimaryCurrencyCode(); if (primaryAlias.equals("Xbt")) { primaryAlias = "BTC"; } Currency primary = Currency.getInstanceNoCreate(primaryAlias); Currency secondary = Currency.getInstanceNoCreate(trade.getSecondaryCurrencyCode()); if (primary == null || secondary == null) { throw new IllegalArgumentException("IndependentReserveTradeHistoryRequest - unknown value of currency code. Base was: " + trade.getPrimaryCurrencyCode() + " counter was " + trade.getSecondaryCurrencyCode()); } CurrencyPair currencyPair = new CurrencyPair(primary, secondary); UserTrade ut = new UserTrade(type, trade.getVolumeTraded(), currencyPair, trade.getPrice(), trade.getTradeTimestamp(), trade.getTradeGuid(), trade.getOrderGuid(), null, (Currency) null); userTrades.add(ut); } return new UserTrades(userTrades, Trades.TradeSortType.SortByTimestamp); } }