package org.knowm.xchange.anx.v2.service;
import java.io.IOException;
import java.math.BigDecimal;
import org.knowm.xchange.Exchange;
import org.knowm.xchange.anx.ANXUtils;
import org.knowm.xchange.anx.v2.ANXV2;
import org.knowm.xchange.anx.v2.dto.ANXException;
import org.knowm.xchange.anx.v2.dto.trade.ANXGenericResponse;
import org.knowm.xchange.anx.v2.dto.trade.ANXOpenOrder;
import org.knowm.xchange.anx.v2.dto.trade.ANXOpenOrderWrapper;
import org.knowm.xchange.anx.v2.dto.trade.ANXOrderResultWrapper;
import org.knowm.xchange.anx.v2.dto.trade.ANXTradeResultWrapper;
import org.knowm.xchange.currency.CurrencyPair;
import org.knowm.xchange.dto.Order;
import org.knowm.xchange.dto.trade.MarketOrder;
import org.knowm.xchange.utils.Assert;
import si.mazi.rescu.HttpStatusIOException;
import si.mazi.rescu.RestProxyFactory;
public class ANXTradeServiceRaw extends ANXBaseService {
private final ANXV2 anxV2;
private final ANXV2Digest signatureCreator;
/**
* Constructor
*
* @param exchange
*/
protected ANXTradeServiceRaw(Exchange exchange) {
super(exchange);
Assert.notNull(exchange.getExchangeSpecification().getSslUri(), "Exchange specification URI cannot be null");
this.anxV2 = RestProxyFactory.createProxy(ANXV2.class, exchange.getExchangeSpecification().getSslUri());
this.signatureCreator = ANXV2Digest.createInstance(exchange.getExchangeSpecification().getSecretKey());
}
public ANXOpenOrder[] getANXOpenOrders(String baseCurrency, String counterCurrency) throws IOException {
try {
ANXOpenOrderWrapper anxOpenOrderWrapper = anxV2.getOpenOrders(ANXUtils.urlEncode(exchange.getExchangeSpecification().getApiKey()),
signatureCreator, exchange.getNonceFactory(), baseCurrency, counterCurrency);
return anxOpenOrderWrapper.getANXOpenOrders();
} catch (ANXException e) {
throw handleError(e);
} catch (HttpStatusIOException e) {
throw handleHttpError(e);
}
}
public ANXOpenOrder[] getANXOpenOrders() throws IOException {
try {
ANXOpenOrderWrapper anxOpenOrderWrapper = anxV2.getOpenOrders(ANXUtils.urlEncode(exchange.getExchangeSpecification().getApiKey()),
signatureCreator, exchange.getNonceFactory());
return anxOpenOrderWrapper.getANXOpenOrders();
} catch (ANXException e) {
throw handleError(e);
} catch (HttpStatusIOException e) {
throw handleHttpError(e);
}
}
public ANXGenericResponse placeANXMarketOrder(MarketOrder marketOrder) throws IOException {
try {
ANXGenericResponse anxGenericResponse = anxV2.placeOrder(exchange.getExchangeSpecification().getApiKey(), signatureCreator,
exchange.getNonceFactory(), marketOrder.getCurrencyPair().base.getCurrencyCode(), marketOrder.getCurrencyPair().counter.getCurrencyCode(),
marketOrder.getType().equals(Order.OrderType.BID) ? "bid" : "ask", marketOrder.getTradableAmount(), null);
return anxGenericResponse;
} catch (ANXException e) {
throw handleError(e);
} catch (HttpStatusIOException e) {
throw handleHttpError(e);
}
}
public ANXGenericResponse placeANXLimitOrder(CurrencyPair currencyPair, String type, BigDecimal amount, BigDecimal price) throws IOException {
try {
ANXGenericResponse anxGenericResponse = anxV2.placeOrder(exchange.getExchangeSpecification().getApiKey(), signatureCreator,
exchange.getNonceFactory(), currencyPair.base.getCurrencyCode(), currencyPair.counter.getCurrencyCode(), type, amount, price);
return anxGenericResponse;
} catch (ANXException e) {
throw handleError(e);
} catch (HttpStatusIOException e) {
throw handleHttpError(e);
}
}
public ANXGenericResponse cancelANXOrder(String orderId, String baseCurrency, String counterCurrency) throws IOException {
try {
ANXGenericResponse anxGenericResponse = anxV2.cancelOrder(exchange.getExchangeSpecification().getApiKey(), signatureCreator,
exchange.getNonceFactory(), orderId, baseCurrency, counterCurrency);
return anxGenericResponse;
} catch (ANXException e) {
throw handleError(e);
} catch (HttpStatusIOException e) {
throw handleHttpError(e);
}
}
public ANXTradeResultWrapper getExecutedANXTrades(Long from, Long to) throws IOException {
try {
ANXTradeResultWrapper anxTradeResultWrapper = anxV2.getExecutedTrades(exchange.getExchangeSpecification().getApiKey(), signatureCreator,
exchange.getNonceFactory(), from, to);
return anxTradeResultWrapper;
} catch (ANXException e) {
throw handleError(e);
} catch (HttpStatusIOException e) {
throw handleHttpError(e);
}
}
public ANXOrderResultWrapper getANXOrderResult(String orderId, String type, String baseCurrency, String counterCurrency) throws IOException {
try {
ANXOrderResultWrapper anxOrderResultWrapper = anxV2.getOrderResult(exchange.getExchangeSpecification().getApiKey(), signatureCreator,
exchange.getNonceFactory(), baseCurrency, counterCurrency, orderId, type);
return anxOrderResultWrapper;
} catch (ANXException e) {
throw handleError(e);
} catch (HttpStatusIOException e) {
throw handleHttpError(e);
}
}
}