package org.knowm.xchange.btcchina.service.rest;
import java.io.IOException;
import org.knowm.xchange.Exchange;
import org.knowm.xchange.btcchina.BTCChinaAdapters;
import org.knowm.xchange.btcchina.dto.marketdata.BTCChinaDepth;
import org.knowm.xchange.btcchina.dto.marketdata.BTCChinaTicker;
import org.knowm.xchange.btcchina.dto.marketdata.BTCChinaTrade;
import org.knowm.xchange.currency.CurrencyPair;
import org.knowm.xchange.dto.marketdata.OrderBook;
import org.knowm.xchange.dto.marketdata.Ticker;
import org.knowm.xchange.dto.marketdata.Trades;
import org.knowm.xchange.service.marketdata.MarketDataService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Implementation of the market data service for BTCChina.
*
* @author ObsessiveOrange
*/
public class BTCChinaMarketDataService extends BTCChinaMarketDataServiceRaw implements MarketDataService {
private final Logger log = LoggerFactory.getLogger(BTCChinaMarketDataService.class);
/**
* Constructor
*
* @param exchange
*/
public BTCChinaMarketDataService(Exchange exchange) {
super(exchange);
}
@Override
public Ticker getTicker(CurrencyPair currencyPair, Object... args) throws IOException {
// Request data
BTCChinaTicker btcChinaTicker = getBTCChinaTicker(BTCChinaAdapters.adaptMarket(currencyPair));
// Adapt to XChange DTOs
return BTCChinaAdapters.adaptTicker(btcChinaTicker, currencyPair);
}
@Override
public OrderBook getOrderBook(CurrencyPair currencyPair, Object... args) throws IOException {
// Request data
final BTCChinaDepth btcChinaDepth;
final String market = BTCChinaAdapters.adaptMarket(currencyPair);
if (args.length == 0) {
btcChinaDepth = getBTCChinaOrderBook(market);
} else {
int limit = ((Number) args[0]).intValue();
btcChinaDepth = getBTCChinaOrderBook(market, limit);
}
// Adapt to XChange DTOs
return BTCChinaAdapters.adaptOrderBook(btcChinaDepth, currencyPair);
}
/**
* Get the trades recently performed by the exchange.
*
* @param currencyPair market symbol.
* @param args 2 arguments:
* <ol>
* <li>the starting trade ID(exclusive), null means the latest trades;</li>
* <li>the limit(number of records fetched, the range is [0,5000]), default is 100.</li>
* <ol>
*/
@Override
public Trades getTrades(CurrencyPair currencyPair, Object... args) throws IOException {
final String market = BTCChinaAdapters.adaptMarket(currencyPair);
final Number since = args.length > 0 ? (Number) args[0] : null;
final Number limit = args.length > 1 ? (Number) args[1] : null;
final String sinceType = args.length > 2 ? (String) args[2] : null;
log.debug("market: {}, since: {}, limit: {}, sinceType: {}", market, since, limit, sinceType);
final BTCChinaTrade[] btcChinaTrades;
if (since != null && limit != null && sinceType != null) {
btcChinaTrades = getBTCChinaHistoryData(market, since.longValue(), limit.intValue(), sinceType);
} else if (since != null && limit != null) {
btcChinaTrades = getBTCChinaHistoryData(market, since.longValue(), limit.intValue());
} else if (since != null) {
btcChinaTrades = getBTCChinaHistoryData(market, since.longValue());
} else if (limit != null) {
btcChinaTrades = getBTCChinaHistoryData(market, limit.intValue());
} else {
btcChinaTrades = getBTCChinaHistoryData(market);
}
// Adapt to XChange DTOs
return BTCChinaAdapters.adaptTrades(btcChinaTrades, currencyPair);
}
}