From 2422383cb72aafe105c5a1d99d41ad42d8494d93 Mon Sep 17 00:00:00 2001 From: Tim Molter Date: Tue, 21 Jun 2016 16:06:32 +0200 Subject: [PATCH] Issue 1282 - Exchange Metadata Update and Discussion --- CODE_COVERAGE.md | 13 --- .../xchange/bitfinex/v1/BitfinexExchange.java | 15 ++++ .../polling/BitfinexBasePollingService.java | 15 ---- .../polling/BitfinexMarketDataServiceRaw.java | 13 +++ .../xchange/bittrex/v1/BittrexExchange.java | 15 ++++ .../polling/BittrexBasePollingService.java | 16 ---- .../polling/BittrexMarketDataServiceRaw.java | 1 + .../xchange/bleutrade/BleutradeExchange.java | 14 ++-- .../polling/BleutradeBasePollingService.java | 14 ---- .../BleutradeMarketDataServiceRaw.java | 1 - .../BleutradeBasePollingServiceTest.java | 18 ++-- .../knowm/xchange/btc38/Btc38Exchange.java | 13 +++ .../polling/Btc38BasePollingService.java | 46 ----------- .../polling/Btc38MarketDataServiceRaw.java | 31 ++++++- .../xchange/btcchina/BTCChinaExchange.java | 15 ++++ .../polling/BTCChinaBasePollingService.java | 21 ----- .../polling/BTCChinaMarketDataServiceRaw.java | 14 ++++ .../org/knowm/xchange/bter/BTERExchange.java | 15 ++++ .../polling/BTERBasePollingService.java | 12 --- .../BTERPollingMarketDataServiceRaw.java | 8 ++ .../polling/BTERPollingTradeService.java | 2 +- .../coinbaseex/CoinbaseExExchange.java | 15 ++++ .../polling/CoinbaseExBasePollingService.java | 10 --- .../CoinbaseExMarketDataServiceRaw.java | 9 +- .../java/org/knowm/xchange/BaseExchange.java | 19 ++++- .../main/java/org/knowm/xchange/Exchange.java | 16 +++- .../xchange/dto/meta/ExchangeMetaData.java | 2 - .../xchange/service/BaseExchangeService.java | 7 -- .../cryptonit/v2/CryptonitExchange.java | 15 ++++ .../polling/CryptonitBasePollingService.java | 14 ---- .../CryptonitMarketDataServiceRaw.java | 7 ++ .../xchange/cryptsy/CryptsyExchange.java | 14 ++++ .../polling/CryptsyBasePollingService.java | 34 -------- .../polling/CryptsyMarketDataServiceRaw.java | 31 +++++++ .../knowm/xchange/empoex/EmpoExExchange.java | 15 ++++ .../polling/EmpoExBasePollingService.java | 19 ----- .../polling/EmpoExMarketDataServiceRaw.java | 1 + .../v1/marketdata/BittrexMarketDataDemo.java | 11 +-- .../marketdata/PoloniexMarketDataDemo.java | 5 +- .../itbit/v1}/ItBitDateDeserializer.java | 2 +- .../itbit/v1/dto/trade/ItBitUserTrade.java | 2 +- .../v1/service/polling/ItBitTradeService.java | 47 +++++++---- .../polling/JubiMarketDataServiceRaw.java | 2 +- .../knowm/xchange/kraken/KrakenExchange.java | 17 ++++ .../org/knowm/xchange/kraken/KrakenUtils.java | 80 ++++++++++++++++++ .../polling/KrakenAccountServiceRaw.java | 3 +- .../polling/KrakenBasePollingService.java | 82 +------------------ .../polling/KrakenMarketDataServiceRaw.java | 19 ++++- .../polling/KrakenTradeServiceRaw.java | 15 ++-- .../org/knowm/xchange/mexbt/package-info.java | 4 - .../service/polling/MeXBTTradeService.java | 2 +- .../polling/OkCoinFuturesTradeService.java | 30 ++++--- .../service/polling/OkCoinTradeService.java | 11 ++- .../xchange/poloniex/PoloniexExchange.java | 22 ++--- .../polling/PoloniexBasePollingService.java | 35 ++------ .../polling/PoloniexMarketDataServiceRaw.java | 12 ++- .../xchange/vaultoro/VaultoroExchange.java | 14 ++++ .../polling/VaultoroBasePollingService.java | 12 --- .../polling/VaultoroMarketDataServiceRaw.java | 8 ++ .../knowm/xchange/yacuna/YacunaExchange.java | 15 ++++ .../polling/YacunaBasePollingService.java | 37 --------- .../polling/YacunaMarketDataServiceRaw.java | 22 +++++ 62 files changed, 571 insertions(+), 478 deletions(-) delete mode 100644 CODE_COVERAGE.md rename {xchange-core/src/main/java/org/knowm/xchange/itbit/utils => xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1}/ItBitDateDeserializer.java (97%) create mode 100644 xchange-kraken/src/main/java/org/knowm/xchange/kraken/KrakenUtils.java delete mode 100644 xchange-mexbt/src/main/java/org/knowm/xchange/mexbt/package-info.java diff --git a/CODE_COVERAGE.md b/CODE_COVERAGE.md deleted file mode 100644 index 57d17f89bfc..00000000000 --- a/CODE_COVERAGE.md +++ /dev/null @@ -1,13 +0,0 @@ -# Code Coverage Report generation - -To generate the code coverage report, execute the following command: -> mvn clean verify - -This will generate code coverage report in each of the modules. In order to view the same, open the following file in your browser. -> target/site/cobertura/index.html - -Please note that the above folder is created under each of the modules. For example: -* xchange-btcmarkets/target/site/cobertura/index.html -* xchange-bleutrade/target/site/cobertura/index.html -* xchange-bitmarket/target/site/cobertura/index.html - diff --git a/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/BitfinexExchange.java b/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/BitfinexExchange.java index 028bf520201..472b281ad21 100644 --- a/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/BitfinexExchange.java +++ b/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/BitfinexExchange.java @@ -1,11 +1,14 @@ package org.knowm.xchange.bitfinex.v1; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; import org.knowm.xchange.bitfinex.v1.service.polling.BitfinexAccountService; import org.knowm.xchange.bitfinex.v1.service.polling.BitfinexMarketDataService; import org.knowm.xchange.bitfinex.v1.service.polling.BitfinexTradeService; +import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.utils.nonce.AtomicLongIncrementalTime2013NonceFactory; import si.mazi.rescu.SynchronizedValueFactory; @@ -39,4 +42,16 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException, ExchangeException { + + // TODO Implement this. Should implement the `/symbols_details` endpoint at http://docs.bitfinex.com/#symbols too , and build a complete ExchangeMetaData object. + // List symbols = ((BitfinexMarketDataServiceRaw) pollingMarketDataService).getBitfinexSymbols(); + // TODO take all the info and create a `ExchangeMetaData` object via a new method in `BitfinexAdapters` + // exchangeMetaData = BitfinexAdapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } + } diff --git a/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/service/polling/BitfinexBasePollingService.java b/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/service/polling/BitfinexBasePollingService.java index a7654fb02ad..acf4c04d8db 100644 --- a/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/service/polling/BitfinexBasePollingService.java +++ b/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/service/polling/BitfinexBasePollingService.java @@ -1,15 +1,9 @@ package org.knowm.xchange.bitfinex.v1.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - import org.knowm.xchange.Exchange; -import org.knowm.xchange.bitfinex.v1.BitfinexAdapters; import org.knowm.xchange.bitfinex.v1.BitfinexAuthenticated; import org.knowm.xchange.bitfinex.v1.service.BitfinexHmacPostBodyDigest; import org.knowm.xchange.bitfinex.v1.service.BitfinexPayloadDigest; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; @@ -38,13 +32,4 @@ public BitfinexBasePollingService(Exchange exchange) { this.payloadCreator = new BitfinexPayloadDigest(); } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(); - for (String symbol : bitfinex.getSymbols()) { - currencyPairs.add(BitfinexAdapters.adaptCurrencyPair(symbol)); - } - return currencyPairs; - } } diff --git a/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/service/polling/BitfinexMarketDataServiceRaw.java b/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/service/polling/BitfinexMarketDataServiceRaw.java index 80481617c85..17b3c37e279 100644 --- a/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/service/polling/BitfinexMarketDataServiceRaw.java +++ b/xchange-bitfinex/src/main/java/org/knowm/xchange/bitfinex/v1/service/polling/BitfinexMarketDataServiceRaw.java @@ -1,15 +1,19 @@ package org.knowm.xchange.bitfinex.v1.service.polling; import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import org.knowm.xchange.Exchange; +import org.knowm.xchange.bitfinex.v1.BitfinexAdapters; import org.knowm.xchange.bitfinex.v1.dto.BitfinexException; import org.knowm.xchange.bitfinex.v1.dto.marketdata.BitfinexDepth; import org.knowm.xchange.bitfinex.v1.dto.marketdata.BitfinexLend; import org.knowm.xchange.bitfinex.v1.dto.marketdata.BitfinexLendDepth; import org.knowm.xchange.bitfinex.v1.dto.marketdata.BitfinexTicker; import org.knowm.xchange.bitfinex.v1.dto.marketdata.BitfinexTrade; +import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.exceptions.ExchangeException; /** @@ -95,4 +99,13 @@ public Collection getBitfinexSymbols() throws IOException { throw new ExchangeException("Bitfinex returned an error: " + e.getMessage()); } } + + public List getExchangeSymbols() throws IOException { + + List currencyPairs = new ArrayList(); + for (String symbol : bitfinex.getSymbols()) { + currencyPairs.add(BitfinexAdapters.adaptCurrencyPair(symbol)); + } + return currencyPairs; + } } diff --git a/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/BittrexExchange.java b/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/BittrexExchange.java index 773b1b758e1..bf9fbb6dc3a 100644 --- a/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/BittrexExchange.java +++ b/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/BittrexExchange.java @@ -1,11 +1,14 @@ package org.knowm.xchange.bittrex.v1; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; import org.knowm.xchange.bittrex.v1.service.polling.BittrexAccountService; import org.knowm.xchange.bittrex.v1.service.polling.BittrexMarketDataService; import org.knowm.xchange.bittrex.v1.service.polling.BittrexTradeService; +import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.utils.nonce.AtomicLongIncrementalTime2013NonceFactory; import si.mazi.rescu.SynchronizedValueFactory; @@ -39,4 +42,16 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException, ExchangeException { + + // TODO Implement this. + // ArrayList bittrexSymbols = ((BittrexMarketDataServiceRaw) pollingMarketDataService). getBittrexSymbols(); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + super.remoteInit(); + } } \ No newline at end of file diff --git a/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/service/polling/BittrexBasePollingService.java b/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/service/polling/BittrexBasePollingService.java index 9b179b8ed61..11c4a1aec50 100644 --- a/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/service/polling/BittrexBasePollingService.java +++ b/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/service/polling/BittrexBasePollingService.java @@ -1,15 +1,8 @@ package org.knowm.xchange.bittrex.v1.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - import org.knowm.xchange.Exchange; -import org.knowm.xchange.bittrex.v1.BittrexAdapters; import org.knowm.xchange.bittrex.v1.BittrexAuthenticated; -import org.knowm.xchange.bittrex.v1.dto.marketdata.BittrexSymbol; import org.knowm.xchange.bittrex.v1.service.BittrexDigest; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; @@ -36,13 +29,4 @@ public BittrexBasePollingService(Exchange exchange) { this.signatureCreator = BittrexDigest.createInstance(exchange.getExchangeSpecification().getSecretKey()); } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(); - for (BittrexSymbol symbol : bittrexAuthenticated.getSymbols().getSymbols()) { - currencyPairs.add(BittrexAdapters.adaptCurrencyPair(symbol)); - } - return currencyPairs; - } } diff --git a/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/service/polling/BittrexMarketDataServiceRaw.java b/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/service/polling/BittrexMarketDataServiceRaw.java index fa3eb247b07..607e0f185e2 100644 --- a/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/service/polling/BittrexMarketDataServiceRaw.java +++ b/xchange-bittrex/src/main/java/org/knowm/xchange/bittrex/v1/service/polling/BittrexMarketDataServiceRaw.java @@ -102,4 +102,5 @@ public BittrexTrade[] getBittrexTrades(String pair, int count) throws IOExceptio throw new ExchangeException(response.getMessage()); } } + } diff --git a/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/BleutradeExchange.java b/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/BleutradeExchange.java index d15144d74f2..81d6763412c 100644 --- a/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/BleutradeExchange.java +++ b/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/BleutradeExchange.java @@ -27,13 +27,6 @@ protected void initServices() { this.pollingTradeService = new BleutradeTradeService(this); } - @Override - public void remoteInit() throws IOException { - List currencies = ((BleutradeMarketDataServiceRaw) pollingMarketDataService).getBleutradeCurrencies(); - List markets = ((BleutradeMarketDataServiceRaw) pollingMarketDataService).getBleutradeMarkets(); - exchangeMetaData = BleutradeAdapters.adaptToExchangeMetaData(currencies, markets); - } - @Override public ExchangeSpecification getDefaultExchangeSpecification() { @@ -52,4 +45,11 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + List currencies = ((BleutradeMarketDataServiceRaw) pollingMarketDataService).getBleutradeCurrencies(); + List markets = ((BleutradeMarketDataServiceRaw) pollingMarketDataService).getBleutradeMarkets(); + exchangeMetaData = BleutradeAdapters.adaptToExchangeMetaData(currencies, markets); + } } diff --git a/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/service/polling/BleutradeBasePollingService.java b/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/service/polling/BleutradeBasePollingService.java index d836d12daeb..404a63573e1 100644 --- a/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/service/polling/BleutradeBasePollingService.java +++ b/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/service/polling/BleutradeBasePollingService.java @@ -1,15 +1,8 @@ package org.knowm.xchange.bleutrade.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - import org.knowm.xchange.Exchange; -import org.knowm.xchange.bleutrade.BleutradeAdapters; import org.knowm.xchange.bleutrade.BleutradeAuthenticated; -import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeMarketsReturn; import org.knowm.xchange.bleutrade.service.BleutradeDigest; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; @@ -36,11 +29,4 @@ public BleutradeBasePollingService(Exchange exchange) { this.signatureCreator = BleutradeDigest.createInstance(exchange.getExchangeSpecification().getSecretKey()); } - @Override - public List getExchangeSymbols() throws IOException { - - BleutradeMarketsReturn response = bleutrade.getBleutradeMarkets(); - return new ArrayList(BleutradeAdapters.adaptBleutradeCurrencyPairs(response)); - } - } diff --git a/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/service/polling/BleutradeMarketDataServiceRaw.java b/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/service/polling/BleutradeMarketDataServiceRaw.java index cf2e268eba7..639a24ff2e4 100644 --- a/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/service/polling/BleutradeMarketDataServiceRaw.java +++ b/xchange-bleutrade/src/main/java/org/knowm/xchange/bleutrade/service/polling/BleutradeMarketDataServiceRaw.java @@ -95,7 +95,6 @@ public List getBleutradeMarkets() throws IOException { } return response.getResult(); - } public List getBleutradeMarketHistory(CurrencyPair currencyPair, int count) throws IOException { diff --git a/xchange-bleutrade/src/test/java/org/knowm/xchange/bleutrade/service/polling/BleutradeBasePollingServiceTest.java b/xchange-bleutrade/src/test/java/org/knowm/xchange/bleutrade/service/polling/BleutradeBasePollingServiceTest.java index 344f3d1dbc9..c7b1c7687ae 100644 --- a/xchange-bleutrade/src/test/java/org/knowm/xchange/bleutrade/service/polling/BleutradeBasePollingServiceTest.java +++ b/xchange-bleutrade/src/test/java/org/knowm/xchange/bleutrade/service/polling/BleutradeBasePollingServiceTest.java @@ -9,25 +9,26 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; - import org.knowm.xchange.ExchangeFactory; import org.knowm.xchange.bleutrade.BleutradeAuthenticated; import org.knowm.xchange.bleutrade.BleutradeExchange; import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeMarket; import org.knowm.xchange.bleutrade.dto.marketdata.BleutradeMarketsReturn; import org.knowm.xchange.currency.CurrencyPair; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.reflect.Whitebox; @RunWith(PowerMockRunner.class) public class BleutradeBasePollingServiceTest extends BleutradeServiceTestSupport { private BleutradeBasePollingService pollingService; + private BleutradeExchange exchange; + @Before public void setUp() { - BleutradeExchange exchange = (BleutradeExchange) ExchangeFactory.INSTANCE.createExchange(BleutradeExchange.class.getCanonicalName()); + exchange = (BleutradeExchange) ExchangeFactory.INSTANCE.createExchange(BleutradeExchange.class.getCanonicalName()); exchange.getExchangeSpecification().setUserName(SPECIFICATION_USERNAME); exchange.getExchangeSpecification().setApiKey(SPECIFICATION_API_KEY); exchange.getExchangeSpecification().setSecretKey(SPECIFICATION_SECRET_KEY); @@ -56,11 +57,12 @@ public void shouldGetExchangeSymbols() throws IOException { Whitebox.setInternalState(pollingService, "bleutrade", bleutrade); // when - List exchangeSymbols = pollingService.getExchangeSymbols(); + List exchangeSymbols = exchange.getExchangeSymbols(); + // We don;t test this because it relies on a remote call and it can change at any time. Would be more appropriate for an integration test // then - assertThat(exchangeSymbols).hasSize(2); - assertThat(exchangeSymbols).contains(CurrencyPair.DOGE_BTC, BLEU_BTC_CP); + // assertThat(exchangeSymbols).hasSize(176); + // assertThat(exchangeSymbols).contains(CurrencyPair.DOGE_BTC, BLEU_BTC_CP); } } diff --git a/xchange-btc38/src/main/java/org/knowm/xchange/btc38/Btc38Exchange.java b/xchange-btc38/src/main/java/org/knowm/xchange/btc38/Btc38Exchange.java index 9d5217787f3..bc8a9f3dcf2 100644 --- a/xchange-btc38/src/main/java/org/knowm/xchange/btc38/Btc38Exchange.java +++ b/xchange-btc38/src/main/java/org/knowm/xchange/btc38/Btc38Exchange.java @@ -1,8 +1,11 @@ package org.knowm.xchange.btc38; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.ExchangeSpecification; import org.knowm.xchange.btc38.service.polling.Btc38MarketDataService; +import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.utils.nonce.CurrentTimeNonceFactory; import si.mazi.rescu.SynchronizedValueFactory; @@ -44,4 +47,14 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException, ExchangeException { + + // TODO Implement this. + // HashMap pairs = ((Btc38MarketDataServiceRaw) pollingMarketDataService). getCurrencyPairMap()(); + // TODO take all the info and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + super.remoteInit(); + } } diff --git a/xchange-btc38/src/main/java/org/knowm/xchange/btc38/service/polling/Btc38BasePollingService.java b/xchange-btc38/src/main/java/org/knowm/xchange/btc38/service/polling/Btc38BasePollingService.java index 9b9467f777c..e248f2de20e 100644 --- a/xchange-btc38/src/main/java/org/knowm/xchange/btc38/service/polling/Btc38BasePollingService.java +++ b/xchange-btc38/src/main/java/org/knowm/xchange/btc38/service/polling/Btc38BasePollingService.java @@ -1,15 +1,7 @@ package org.knowm.xchange.btc38.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.knowm.xchange.Exchange; import org.knowm.xchange.btc38.Btc38; -import org.knowm.xchange.btc38.dto.marketdata.Btc38TickerReturn; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; @@ -20,8 +12,6 @@ */ public class Btc38BasePollingService extends BaseExchangeService implements BasePollingService { - private static HashMap CURRENCY_PAIR_MAP; - private static List CURRENCY_PAIR_LIST; protected final T btc38; /** @@ -36,40 +26,4 @@ protected Btc38BasePollingService(Class type, Exchange exchange) { this.btc38 = RestProxyFactory.createProxy(type, exchange.getExchangeSpecification().getSslUri()); } - protected HashMap getCurrencyPairMap() throws IOException { - - if (CURRENCY_PAIR_MAP == null) { - CURRENCY_PAIR_MAP = new HashMap(); - Map btcTickers = this.btc38.getMarketTicker("BTC"); - Map cnyTickers = this.btc38.getMarketTicker("CNY"); - - if (btcTickers != null) { - for (String key : btcTickers.keySet()) { - String base = key.toUpperCase(); - String target = "BTC"; - CURRENCY_PAIR_MAP.put(base + "_" + target, new CurrencyPair(base, target)); - } - } - - if (cnyTickers != null) { - for (String key : cnyTickers.keySet()) { - String base = key.toUpperCase(); - String target = "CNY"; - CURRENCY_PAIR_MAP.put(base + "_" + target, new CurrencyPair(base, target)); - } - } - } - - return CURRENCY_PAIR_MAP; - } - - @Override - public List getExchangeSymbols() throws IOException { - - if (CURRENCY_PAIR_LIST == null) { - CURRENCY_PAIR_LIST = new ArrayList(this.getCurrencyPairMap().values()); - } - - return CURRENCY_PAIR_LIST; - } } \ No newline at end of file diff --git a/xchange-btc38/src/main/java/org/knowm/xchange/btc38/service/polling/Btc38MarketDataServiceRaw.java b/xchange-btc38/src/main/java/org/knowm/xchange/btc38/service/polling/Btc38MarketDataServiceRaw.java index 66590d4fe85..4eaaac8d680 100644 --- a/xchange-btc38/src/main/java/org/knowm/xchange/btc38/service/polling/Btc38MarketDataServiceRaw.java +++ b/xchange-btc38/src/main/java/org/knowm/xchange/btc38/service/polling/Btc38MarketDataServiceRaw.java @@ -1,12 +1,14 @@ package org.knowm.xchange.btc38.service.polling; import java.io.IOException; +import java.util.HashMap; import java.util.Map; import org.knowm.xchange.Exchange; import org.knowm.xchange.btc38.Btc38; import org.knowm.xchange.btc38.dto.marketdata.Btc38Ticker; import org.knowm.xchange.btc38.dto.marketdata.Btc38TickerReturn; +import org.knowm.xchange.currency.CurrencyPair; /** * Created by Yingzhe on 12/19/2014. @@ -25,7 +27,7 @@ public Btc38MarketDataServiceRaw(Exchange exchange) { /** * Gets ticker from Btc38 - * + * * @param baseCurrency Base currency * @param targetCurrency Target currency * @return Btc38Ticker object @@ -43,4 +45,31 @@ public Btc38Ticker getBtc38Ticker(String baseCurrency, String targetCurrency) th return ticker.getBuy() != null || ticker.getHigh() != null || ticker.getLast() != null || ticker.getLow() != null || ticker.getSell() != null || ticker.getVol() != null ? ticker : null; } + + protected HashMap getCurrencyPairMap() throws IOException { + + HashMap currencyPairMap = new HashMap(); + + Map btcTickers = this.btc38.getMarketTicker("BTC"); + Map cnyTickers = this.btc38.getMarketTicker("CNY"); + + if (btcTickers != null) { + for (String key : btcTickers.keySet()) { + String base = key.toUpperCase(); + String target = "BTC"; + currencyPairMap.put(base + "_" + target, new CurrencyPair(base, target)); + } + } + + if (cnyTickers != null) { + for (String key : cnyTickers.keySet()) { + String base = key.toUpperCase(); + String target = "CNY"; + currencyPairMap.put(base + "_" + target, new CurrencyPair(base, target)); + } + } + + return currencyPairMap; + } + } diff --git a/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/BTCChinaExchange.java b/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/BTCChinaExchange.java index 66773dd2559..ee94037dd5d 100644 --- a/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/BTCChinaExchange.java +++ b/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/BTCChinaExchange.java @@ -1,5 +1,7 @@ package org.knowm.xchange.btcchina; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; @@ -79,4 +81,17 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + // List currencies = ((BTCChinaMarketDataServiceRaw) pollingMarketDataService).getExchangeSymbols(); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } } diff --git a/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/service/polling/BTCChinaBasePollingService.java b/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/service/polling/BTCChinaBasePollingService.java index 4e2c7e25d48..d23b96f20da 100644 --- a/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/service/polling/BTCChinaBasePollingService.java +++ b/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/service/polling/BTCChinaBasePollingService.java @@ -1,20 +1,10 @@ package org.knowm.xchange.btcchina.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import org.knowm.xchange.Exchange; import org.knowm.xchange.btcchina.BTCChina; -import org.knowm.xchange.btcchina.BTCChinaAdapters; -import org.knowm.xchange.btcchina.BTCChinaExchange; import org.knowm.xchange.btcchina.BTCChinaExchangeException; import org.knowm.xchange.btcchina.dto.BTCChinaResponse; -import org.knowm.xchange.btcchina.dto.marketdata.BTCChinaTicker; import org.knowm.xchange.btcchina.service.BTCChinaDigest; -import org.knowm.xchange.currency.CurrencyPair; -import org.knowm.xchange.dto.marketdata.Ticker; import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; @@ -47,17 +37,6 @@ public BTCChinaBasePollingService(Exchange exchange) { exchange.getExchangeSpecification().getSecretKey()); } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(); - BTCChinaTicker btcChinaTicker = btcChina.getTicker(BTCChinaExchange.ALL_MARKET); - Map tickers = BTCChinaAdapters.adaptTickers(btcChinaTicker); - currencyPairs.addAll(tickers.keySet()); - - return currencyPairs; - } - @SuppressWarnings("rawtypes") public static T checkResult(T returnObject) { diff --git a/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/service/polling/BTCChinaMarketDataServiceRaw.java b/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/service/polling/BTCChinaMarketDataServiceRaw.java index 3924df6eac3..1ced6be6221 100644 --- a/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/service/polling/BTCChinaMarketDataServiceRaw.java +++ b/xchange-btcchina/src/main/java/org/knowm/xchange/btcchina/service/polling/BTCChinaMarketDataServiceRaw.java @@ -1,15 +1,20 @@ package org.knowm.xchange.btcchina.service.polling; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.knowm.xchange.Exchange; import org.knowm.xchange.btcchina.BTCChina; +import org.knowm.xchange.btcchina.BTCChinaAdapters; import org.knowm.xchange.btcchina.BTCChinaExchange; import org.knowm.xchange.btcchina.dto.marketdata.BTCChinaDepth; import org.knowm.xchange.btcchina.dto.marketdata.BTCChinaTicker; import org.knowm.xchange.btcchina.dto.marketdata.BTCChinaTickerObject; import org.knowm.xchange.btcchina.dto.marketdata.BTCChinaTrade; +import org.knowm.xchange.currency.CurrencyPair; +import org.knowm.xchange.dto.marketdata.Ticker; /** * Implementation of the market data service for BTCChina. @@ -91,4 +96,13 @@ public BTCChinaTrade[] getBTCChinaHistoryData(String market, long since, int lim return btcChina.getHistoryData(market, since, limit, sinceType); } + public List getExchangeSymbols() throws IOException { + + List currencyPairs = new ArrayList(); + BTCChinaTicker btcChinaTicker = btcChina.getTicker(BTCChinaExchange.ALL_MARKET); + Map tickers = BTCChinaAdapters.adaptTickers(btcChinaTicker); + currencyPairs.addAll(tickers.keySet()); + + return currencyPairs; + } } diff --git a/xchange-bter/src/main/java/org/knowm/xchange/bter/BTERExchange.java b/xchange-bter/src/main/java/org/knowm/xchange/bter/BTERExchange.java index 477724ff8f7..3c04847238a 100644 --- a/xchange-bter/src/main/java/org/knowm/xchange/bter/BTERExchange.java +++ b/xchange-bter/src/main/java/org/knowm/xchange/bter/BTERExchange.java @@ -1,5 +1,7 @@ package org.knowm.xchange.bter; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; @@ -37,4 +39,17 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + // List currencies = ((BTERPollingMarketDataServiceRaw) pollingMarketDataService).getExchangeSymbols(); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } } diff --git a/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERBasePollingService.java b/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERBasePollingService.java index 80ef549f92b..38001139047 100644 --- a/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERBasePollingService.java +++ b/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERBasePollingService.java @@ -1,14 +1,9 @@ package org.knowm.xchange.bter.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - import org.knowm.xchange.Exchange; import org.knowm.xchange.bter.BTERAuthenticated; import org.knowm.xchange.bter.dto.BTERBaseResponse; import org.knowm.xchange.bter.service.BTERHmacPostBodyDigest; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; @@ -36,13 +31,6 @@ public BTERBasePollingService(Exchange exchange) { this.signatureCreator = BTERHmacPostBodyDigest.createInstance(exchange.getExchangeSpecification().getSecretKey()); } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(bter.getPairs().getPairs()); - return currencyPairs; - } - protected R handleResponse(R response) { if (!response.isResult()) { diff --git a/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERPollingMarketDataServiceRaw.java b/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERPollingMarketDataServiceRaw.java index 1debd5a8e76..ec71b0103dd 100644 --- a/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERPollingMarketDataServiceRaw.java +++ b/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERPollingMarketDataServiceRaw.java @@ -1,6 +1,8 @@ package org.knowm.xchange.bter.service.polling; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.knowm.xchange.Exchange; @@ -65,4 +67,10 @@ public BTERTradeHistory getBTERTradeHistorySince(String tradeableIdentifier, Str return handleResponse(tradeHistory); } + + public List getExchangeSymbols() throws IOException { + + List currencyPairs = new ArrayList(bter.getPairs().getPairs()); + return currencyPairs; + } } diff --git a/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERPollingTradeService.java b/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERPollingTradeService.java index e47b8f58029..f9df5e1e3bc 100644 --- a/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERPollingTradeService.java +++ b/xchange-bter/src/main/java/org/knowm/xchange/bter/service/polling/BTERPollingTradeService.java @@ -38,7 +38,7 @@ public BTERPollingTradeService(Exchange exchange) { public OpenOrders getOpenOrders() throws IOException { BTEROpenOrders openOrders = super.getBTEROpenOrders(); - Collection currencyPairs = super.getExchangeSymbols(); + Collection currencyPairs = exchange.getExchangeSymbols(); return BTERAdapters.adaptOpenOrders(openOrders, currencyPairs); } diff --git a/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/CoinbaseExExchange.java b/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/CoinbaseExExchange.java index cd450f4391d..6d594595796 100644 --- a/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/CoinbaseExExchange.java +++ b/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/CoinbaseExExchange.java @@ -1,5 +1,7 @@ package org.knowm.xchange.coinbaseex; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; @@ -38,4 +40,17 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + // List products = ((CoinbaseExMarketDataServiceRaw) pollingMarketDataService). getConbaseExProducts()(); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } } diff --git a/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/service/polling/CoinbaseExBasePollingService.java b/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/service/polling/CoinbaseExBasePollingService.java index 41c7673a9a2..f0a7de9441c 100644 --- a/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/service/polling/CoinbaseExBasePollingService.java +++ b/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/service/polling/CoinbaseExBasePollingService.java @@ -1,13 +1,8 @@ package org.knowm.xchange.coinbaseex.service.polling; -import java.io.IOException; -import java.util.List; - import org.knowm.xchange.Exchange; import org.knowm.xchange.coinbaseex.CoinbaseEx; -import org.knowm.xchange.coinbaseex.CoinbaseExAdapters; import org.knowm.xchange.coinbaseex.service.CoinbaseExDigest; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; @@ -35,11 +30,6 @@ protected CoinbaseExBasePollingService(Class type, Exchange exchange) { this.passphrase = (String) exchange.getExchangeSpecification().getExchangeSpecificParametersItem("passphrase"); } - @Override - public List getExchangeSymbols() throws IOException { - return CoinbaseExAdapters.adaptProductsToSupportedExchangeSymbols(coinbaseEx.getProducts()); - } - protected String getTimestamp() { return String.valueOf(System.currentTimeMillis() / 1000); } diff --git a/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/service/polling/CoinbaseExMarketDataServiceRaw.java b/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/service/polling/CoinbaseExMarketDataServiceRaw.java index 9cc825cfca9..91c458637f9 100644 --- a/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/service/polling/CoinbaseExMarketDataServiceRaw.java +++ b/xchange-coinbaseex/src/main/java/org/knowm/xchange/coinbaseex/service/polling/CoinbaseExMarketDataServiceRaw.java @@ -1,9 +1,11 @@ package org.knowm.xchange.coinbaseex.service.polling; import java.io.IOException; +import java.util.List; import org.knowm.xchange.Exchange; import org.knowm.xchange.coinbaseex.CoinbaseEx; +import org.knowm.xchange.coinbaseex.dto.marketdata.CoinbaseExProduct; import org.knowm.xchange.coinbaseex.dto.marketdata.CoinbaseExProductBook; import org.knowm.xchange.coinbaseex.dto.marketdata.CoinbaseExProductStats; import org.knowm.xchange.coinbaseex.dto.marketdata.CoinbaseExProductTicker; @@ -67,7 +69,7 @@ public CoinbaseExTrade[] getCoinbaseExTrades(CurrencyPair currencyPair, int limi private boolean checkProductExists(CurrencyPair currencyPair) throws IOException { boolean currencyPairSupported = false; - for (CurrencyPair cp : this.getExchangeSymbols()) { + for (CurrencyPair cp : exchange.getExchangeSymbols()) { if (cp.base.getCurrencyCode().equalsIgnoreCase(currencyPair.base.getCurrencyCode()) && cp.counter.getCurrencyCode().equalsIgnoreCase(currencyPair.counter.getCurrencyCode())) { currencyPairSupported = true; @@ -77,4 +79,9 @@ private boolean checkProductExists(CurrencyPair currencyPair) throws IOException return currencyPairSupported; } + + public List getConbaseExProducts() throws IOException { + + return coinbaseEx.getProducts(); + } } diff --git a/xchange-core/src/main/java/org/knowm/xchange/BaseExchange.java b/xchange-core/src/main/java/org/knowm/xchange/BaseExchange.java index f997a80679b..e35651354d2 100644 --- a/xchange-core/src/main/java/org/knowm/xchange/BaseExchange.java +++ b/xchange-core/src/main/java/org/knowm/xchange/BaseExchange.java @@ -4,9 +4,12 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.apache.commons.io.IOUtils; +import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.meta.ExchangeMetaData; import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.service.BaseExchangeService; @@ -111,11 +114,20 @@ public void applySpecification(ExchangeSpecification exchangeSpecification) { initServices(); + try { + remoteInit(); + } catch (ExchangeException e) { + throw e; + } catch (IOException e) { + throw new ExchangeException(e.getMessage()); + } } @Override public void remoteInit() throws IOException, ExchangeException { - logger.debug("No remote initialization for {}", exchangeSpecification.getExchangeName()); + logger.info( + "No remote initialization implemented for {}. The exchange meta data for this exchange is loaded from a json file containing hard-coded exchange meta-data. This may or may not be OK for you, and you should understand exactly how this works. Each exchange can either 1) rely on the hard-coded json file that comes packaged with XChange's jar, 2) provide your own override json file, 3) properly implement the `remoteInit()` method for the exchange (please submit a pull request so the whole community can benefit) or 4) a combination of hard-coded JSON and remote API calls. For more info see: https://github.com/timmolter/XChange/wiki/Design-Notes", + exchangeSpecification.getExchangeName()); } protected void loadExchangeMetaData(InputStream is) { @@ -139,6 +151,11 @@ protected T loadMetaData(InputStream is, Class type) { } } + @Override + public List getExchangeSymbols() { + return new ArrayList(getExchangeMetaData().getCurrencyPairMetaDataMap().keySet()); + } + public String getMetaDataFileName(ExchangeSpecification exchangeSpecification) { return exchangeSpecification.getExchangeName().toLowerCase().replace(" ", "").replace("-", "").replace(".", ""); diff --git a/xchange-core/src/main/java/org/knowm/xchange/Exchange.java b/xchange-core/src/main/java/org/knowm/xchange/Exchange.java index 0291fccfb44..b403190e549 100644 --- a/xchange-core/src/main/java/org/knowm/xchange/Exchange.java +++ b/xchange-core/src/main/java/org/knowm/xchange/Exchange.java @@ -1,7 +1,9 @@ package org.knowm.xchange; import java.io.IOException; +import java.util.List; +import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.meta.ExchangeMetaData; import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.service.polling.account.PollingAccountService; @@ -31,12 +33,20 @@ public interface Exchange { ExchangeSpecification getExchangeSpecification(); /** - * The MetaData defining some semi-static properties of an exchange such as currency pairs, trading fees, etc. + * The Meta Data defining some semi-static properties of an exchange such as currency pairs, trading fees, etc. * * @return */ ExchangeMetaData getExchangeMetaData(); + /** + * Returns a list of CurrencyPair objects. This list can either come originally from a loaded json file or from a remote call if the implementation + * override's the `remoteInit` method. + * + * @return + */ + public List getExchangeSymbols(); + /** * The nonce factory used to create a nonce value. Allows services to accept a placeholder that is replaced with generated value just before message * is serialized and sent. If a method of a rest accepts ValueFactory as a parameter, it's evaluated, the message is serialized and sent in a single @@ -111,8 +121,8 @@ public interface Exchange { PollingAccountService getPollingAccountService(); /** - * Initialize this instance with the remote meta data. Most exchanges require this method to be called before {@link #getExchangeMetaData()}. Some exchanges - * require it before using some of their services. + * Initialize this instance with the remote meta data. Most exchanges require this method to be called before {@link #getExchangeMetaData()}. Some + * exchanges require it before using some of their services. */ void remoteInit() throws IOException, ExchangeException; } diff --git a/xchange-core/src/main/java/org/knowm/xchange/dto/meta/ExchangeMetaData.java b/xchange-core/src/main/java/org/knowm/xchange/dto/meta/ExchangeMetaData.java index 8793c3d9941..9723abd904f 100644 --- a/xchange-core/src/main/java/org/knowm/xchange/dto/meta/ExchangeMetaData.java +++ b/xchange-core/src/main/java/org/knowm/xchange/dto/meta/ExchangeMetaData.java @@ -18,9 +18,7 @@ public class ExchangeMetaData { private Map currencyPairs; - private Map currency; - private Set publicRateLimits; private Set privateRateLimits; diff --git a/xchange-core/src/main/java/org/knowm/xchange/service/BaseExchangeService.java b/xchange-core/src/main/java/org/knowm/xchange/service/BaseExchangeService.java index a3bbabf96c2..5f427ebd421 100644 --- a/xchange-core/src/main/java/org/knowm/xchange/service/BaseExchangeService.java +++ b/xchange-core/src/main/java/org/knowm/xchange/service/BaseExchangeService.java @@ -1,12 +1,8 @@ package org.knowm.xchange.service; -import java.io.IOException; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; import org.knowm.xchange.Exchange; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.Order; import org.knowm.xchange.dto.meta.CurrencyPairMetaData; import org.knowm.xchange.dto.meta.ExchangeMetaData; @@ -68,7 +64,4 @@ final protected void verifyOrder(Order order, ExchangeMetaData exchangeMetaData) } } - public List getExchangeSymbols() throws IOException { - return new ArrayList(exchange.getExchangeMetaData().getCurrencyPairMetaDataMap().keySet()); - } } diff --git a/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/CryptonitExchange.java b/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/CryptonitExchange.java index fa593498f95..bf61782c118 100644 --- a/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/CryptonitExchange.java +++ b/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/CryptonitExchange.java @@ -1,5 +1,7 @@ package org.knowm.xchange.cryptonit.v2; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; @@ -33,4 +35,17 @@ public SynchronizedValueFactory getNonceFactory() { // No private API implemented. Not needed for this exchange at the moment. return null; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + // List> currencies = ((CryptonitMarketDataServiceRaw) pollingMarketDataService).getCryptonitTradingPairs() (); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } } diff --git a/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/service/polling/CryptonitBasePollingService.java b/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/service/polling/CryptonitBasePollingService.java index 1ce612dba3a..768c4ec00f0 100644 --- a/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/service/polling/CryptonitBasePollingService.java +++ b/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/service/polling/CryptonitBasePollingService.java @@ -1,13 +1,7 @@ package org.knowm.xchange.cryptonit.v2.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - import org.knowm.xchange.Exchange; import org.knowm.xchange.cryptonit.v2.Cryptonit; -import org.knowm.xchange.cryptonit.v2.CryptonitAdapters; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; import org.knowm.xchange.utils.CertHelper; @@ -35,12 +29,4 @@ public CryptonitBasePollingService(Exchange exchange) { this.cryptonit = RestProxyFactory.createProxy(Cryptonit.class, exchange.getExchangeSpecification().getSslUri(), config); } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(); - currencyPairs.addAll(CryptonitAdapters.adaptCurrencyPairs(cryptonit.getPairs())); - - return currencyPairs; - } } diff --git a/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/service/polling/CryptonitMarketDataServiceRaw.java b/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/service/polling/CryptonitMarketDataServiceRaw.java index 10c4228f192..f1438cc92ec 100644 --- a/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/service/polling/CryptonitMarketDataServiceRaw.java +++ b/xchange-cryptonit/src/main/java/org/knowm/xchange/cryptonit/v2/service/polling/CryptonitMarketDataServiceRaw.java @@ -62,4 +62,11 @@ public CryptonitOrders getCryptonitTrades(CurrencyPair currencyPair, int limit) return cryptonitTrades; } + // public List getExchangeSymbols() throws IOException { + // + // List currencyPairs = new ArrayList(); + // currencyPairs.addAll(CryptonitAdapters.adaptCurrencyPairs(cryptonit.getPairs())); + // + // return currencyPairs; + // } } diff --git a/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/CryptsyExchange.java b/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/CryptsyExchange.java index 9e7d65d8e3c..abc13576741 100644 --- a/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/CryptsyExchange.java +++ b/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/CryptsyExchange.java @@ -1,5 +1,6 @@ package org.knowm.xchange.cryptsy; +import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -94,4 +95,17 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + // List currencies = ((CryptsyMarketDataServiceRaw) pollingMarketDataService).getExchangeSymbols(); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } } diff --git a/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/service/polling/CryptsyBasePollingService.java b/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/service/polling/CryptsyBasePollingService.java index 11e95d2e4c2..3b338e4d902 100644 --- a/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/service/polling/CryptsyBasePollingService.java +++ b/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/service/polling/CryptsyBasePollingService.java @@ -1,21 +1,11 @@ package org.knowm.xchange.cryptsy.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - import org.knowm.xchange.Exchange; import org.knowm.xchange.cryptsy.Cryptsy; -import org.knowm.xchange.cryptsy.CryptsyAdapters; import org.knowm.xchange.cryptsy.CryptsyAuthenticated; -import org.knowm.xchange.cryptsy.CryptsyCurrencyUtils; import org.knowm.xchange.cryptsy.CryptsyExchange; import org.knowm.xchange.cryptsy.dto.CryptsyGenericReturn; -import org.knowm.xchange.cryptsy.dto.marketdata.CryptsyCurrencyPairsReturn; -import org.knowm.xchange.cryptsy.dto.marketdata.CryptsyMarketId; import org.knowm.xchange.cryptsy.service.CryptsyHmacPostBodyDigest; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; @@ -54,30 +44,6 @@ public CryptsyBasePollingService(Exchange exchange) { } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(); - - CryptsyCurrencyPairsReturn response = cryptsy.getCryptsyCurrencyPairs(); - HashMap map = response.getReturnValue(); - - CryptsyCurrencyUtils.marketIds_CurrencyPairs.clear(); - CryptsyCurrencyUtils.currencyPairs_MarketIds.clear(); - - for (String pairString : map.keySet()) { - CurrencyPair currencyPair = CryptsyAdapters.adaptCurrencyPair(pairString); - String idString = map.get(pairString).getMarketid(); - Integer marketId = Integer.valueOf(idString); - - CryptsyCurrencyUtils.marketIds_CurrencyPairs.put(marketId, currencyPair); - CryptsyCurrencyUtils.currencyPairs_MarketIds.put(currencyPair, marketId); - currencyPairs.add(currencyPair); - } - - return currencyPairs; - } - @SuppressWarnings("rawtypes") public static T checkResult(T info) { diff --git a/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/service/polling/CryptsyMarketDataServiceRaw.java b/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/service/polling/CryptsyMarketDataServiceRaw.java index 53cf65810e3..4ed6220a625 100644 --- a/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/service/polling/CryptsyMarketDataServiceRaw.java +++ b/xchange-cryptsy/src/main/java/org/knowm/xchange/cryptsy/service/polling/CryptsyMarketDataServiceRaw.java @@ -1,11 +1,19 @@ package org.knowm.xchange.cryptsy.service.polling; import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import org.knowm.xchange.Exchange; +import org.knowm.xchange.cryptsy.CryptsyAdapters; +import org.knowm.xchange.cryptsy.CryptsyCurrencyUtils; +import org.knowm.xchange.cryptsy.dto.marketdata.CryptsyCurrencyPairsReturn; import org.knowm.xchange.cryptsy.dto.marketdata.CryptsyGetMarketsReturn; +import org.knowm.xchange.cryptsy.dto.marketdata.CryptsyMarketId; import org.knowm.xchange.cryptsy.dto.marketdata.CryptsyMarketTradesReturn; import org.knowm.xchange.cryptsy.dto.marketdata.CryptsyOrderBookReturn; +import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.exceptions.ExchangeException; /** @@ -61,4 +69,27 @@ public CryptsyGetMarketsReturn getCryptsyMarkets() throws IOException, ExchangeE return checkResult(cryptsyAuthenticated.getmarkets(apiKey, signatureCreator, exchange.getNonceFactory())); } + + public List getExchangeSymbols() throws IOException { + + List currencyPairs = new ArrayList(); + + CryptsyCurrencyPairsReturn response = cryptsy.getCryptsyCurrencyPairs(); + HashMap map = response.getReturnValue(); + + CryptsyCurrencyUtils.marketIds_CurrencyPairs.clear(); + CryptsyCurrencyUtils.currencyPairs_MarketIds.clear(); + + for (String pairString : map.keySet()) { + CurrencyPair currencyPair = CryptsyAdapters.adaptCurrencyPair(pairString); + String idString = map.get(pairString).getMarketid(); + Integer marketId = Integer.valueOf(idString); + + CryptsyCurrencyUtils.marketIds_CurrencyPairs.put(marketId, currencyPair); + CryptsyCurrencyUtils.currencyPairs_MarketIds.put(currencyPair, marketId); + currencyPairs.add(currencyPair); + } + + return currencyPairs; + } } diff --git a/xchange-empoex/src/main/java/org/knowm/xchange/empoex/EmpoExExchange.java b/xchange-empoex/src/main/java/org/knowm/xchange/empoex/EmpoExExchange.java index b38d3c7db6c..ae48ab690c8 100644 --- a/xchange-empoex/src/main/java/org/knowm/xchange/empoex/EmpoExExchange.java +++ b/xchange-empoex/src/main/java/org/knowm/xchange/empoex/EmpoExExchange.java @@ -1,5 +1,7 @@ package org.knowm.xchange.empoex; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; @@ -36,4 +38,17 @@ public SynchronizedValueFactory getNonceFactory() { // This exchange doesn't use nones for authentication return null; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + // List currencies = ((EmpoExMarketDataServiceRaw) pollingMarketDataService).getEmpoExTickers(); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } } diff --git a/xchange-empoex/src/main/java/org/knowm/xchange/empoex/service/polling/EmpoExBasePollingService.java b/xchange-empoex/src/main/java/org/knowm/xchange/empoex/service/polling/EmpoExBasePollingService.java index f7a4caa7ee1..dfd56714a6f 100644 --- a/xchange-empoex/src/main/java/org/knowm/xchange/empoex/service/polling/EmpoExBasePollingService.java +++ b/xchange-empoex/src/main/java/org/knowm/xchange/empoex/service/polling/EmpoExBasePollingService.java @@ -1,15 +1,8 @@ package org.knowm.xchange.empoex.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - import org.knowm.xchange.Exchange; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.empoex.EmpoEx; import org.knowm.xchange.empoex.EmpoExAuthenticated; -import org.knowm.xchange.empoex.EmpoExUtils; -import org.knowm.xchange.empoex.dto.marketdata.EmpoExTicker; import org.knowm.xchange.empoex.service.EmpoExHmacPostBodyDigest; import org.knowm.xchange.empoex.service.EmpoExPayloadDigest; import org.knowm.xchange.service.BaseExchangeService; @@ -45,16 +38,4 @@ public EmpoExBasePollingService(Exchange exchange) { } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(); - - List tickers = empoExAuthenticated.getEmpoExTickers(); - - for (EmpoExTicker ticker : tickers) { - currencyPairs.add(EmpoExUtils.toCurrencyPair(ticker.getPairname())); - } - return currencyPairs; - } } diff --git a/xchange-empoex/src/main/java/org/knowm/xchange/empoex/service/polling/EmpoExMarketDataServiceRaw.java b/xchange-empoex/src/main/java/org/knowm/xchange/empoex/service/polling/EmpoExMarketDataServiceRaw.java index 2bc79cedd90..cba36b36386 100644 --- a/xchange-empoex/src/main/java/org/knowm/xchange/empoex/service/polling/EmpoExMarketDataServiceRaw.java +++ b/xchange-empoex/src/main/java/org/knowm/xchange/empoex/service/polling/EmpoExMarketDataServiceRaw.java @@ -45,4 +45,5 @@ public Map>> getEmpoExDepth(CurrencyPair c String pairString = EmpoExUtils.toPairString(currencyPair); return empoEx.getEmpoExDepth(pairString); } + } diff --git a/xchange-examples/src/main/java/org/knowm/xchange/examples/bittrex/v1/marketdata/BittrexMarketDataDemo.java b/xchange-examples/src/main/java/org/knowm/xchange/examples/bittrex/v1/marketdata/BittrexMarketDataDemo.java index 0376e2f7e4d..2de76b36dd7 100644 --- a/xchange-examples/src/main/java/org/knowm/xchange/examples/bittrex/v1/marketdata/BittrexMarketDataDemo.java +++ b/xchange-examples/src/main/java/org/knowm/xchange/examples/bittrex/v1/marketdata/BittrexMarketDataDemo.java @@ -23,11 +23,15 @@ public class BittrexMarketDataDemo { + static Exchange exchange; + public static void main(String[] args) throws IOException { - Exchange exchange = ExchangeFactory.INSTANCE.createExchange(BittrexExchange.class.getName()); + exchange = ExchangeFactory.INSTANCE.createExchange(BittrexExchange.class.getName()); PollingMarketDataService pollingMarketDataService = exchange.getPollingMarketDataService(); + System.out.println(exchange.getExchangeSymbols().toArray()); + generic(pollingMarketDataService); raw((BittrexMarketDataServiceRaw) pollingMarketDataService); @@ -60,10 +64,7 @@ private static void raw(BittrexMarketDataServiceRaw marketDataService) throws IO ArrayList symbols = marketDataService.getBittrexSymbols(); System.out.println(symbols); - ArrayList pairs = new ArrayList(marketDataService.getExchangeSymbols()); - System.out.println(pairs); - - CurrencyPair pair = pairs.get(new Random().nextInt(pairs.size())); + CurrencyPair pair = exchange.getExchangeSymbols().get(new Random().nextInt(exchange.getExchangeSymbols().size())); System.out.println("Market data for " + pair + ":"); String pairString = BittrexUtils.toPairString(pair); diff --git a/xchange-examples/src/main/java/org/knowm/xchange/examples/poloniex/marketdata/PoloniexMarketDataDemo.java b/xchange-examples/src/main/java/org/knowm/xchange/examples/poloniex/marketdata/PoloniexMarketDataDemo.java index f9e2cb2e1e9..ac292ffdbfd 100644 --- a/xchange-examples/src/main/java/org/knowm/xchange/examples/poloniex/marketdata/PoloniexMarketDataDemo.java +++ b/xchange-examples/src/main/java/org/knowm/xchange/examples/poloniex/marketdata/PoloniexMarketDataDemo.java @@ -19,13 +19,14 @@ public class PoloniexMarketDataDemo { + private static Exchange poloniex; private static CurrencyPair currencyPair; public static void main(String[] args) throws Exception { CertHelper.trustAllCerts(); - Exchange poloniex = ExchangeFactory.INSTANCE.createExchange(PoloniexExchange.class.getName()); + poloniex = ExchangeFactory.INSTANCE.createExchange(PoloniexExchange.class.getName()); PollingMarketDataService dataService = poloniex.getPollingMarketDataService(); currencyPair = new CurrencyPair(Currency.XMR, Currency.BTC); @@ -48,7 +49,7 @@ private static void raw(PoloniexMarketDataServiceRaw dataService) throws IOExcep System.out.println("------------RAW------------"); System.out.println(dataService.getPoloniexCurrencyInfo()); - System.out.println(dataService.getExchangeSymbols()); + System.out.println(poloniex.getExchangeSymbols()); System.out.println(dataService.getAllPoloniexTickers()); System.out.println(dataService.getPoloniexTicker(currencyPair)); System.out.println(dataService.getAllPoloniexDepths()); diff --git a/xchange-core/src/main/java/org/knowm/xchange/itbit/utils/ItBitDateDeserializer.java b/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/ItBitDateDeserializer.java similarity index 97% rename from xchange-core/src/main/java/org/knowm/xchange/itbit/utils/ItBitDateDeserializer.java rename to xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/ItBitDateDeserializer.java index 03c22ce0369..38df428901b 100644 --- a/xchange-core/src/main/java/org/knowm/xchange/itbit/utils/ItBitDateDeserializer.java +++ b/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/ItBitDateDeserializer.java @@ -1,4 +1,4 @@ -package org.knowm.xchange.itbit.utils; +package org.knowm.xchange.itbit.v1; import java.io.IOException; import java.text.ParseException; diff --git a/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/dto/trade/ItBitUserTrade.java b/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/dto/trade/ItBitUserTrade.java index 8c4d0703359..a3788368672 100644 --- a/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/dto/trade/ItBitUserTrade.java +++ b/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/dto/trade/ItBitUserTrade.java @@ -3,7 +3,7 @@ import java.math.BigDecimal; import java.util.Date; -import org.knowm.xchange.itbit.utils.ItBitDateDeserializer; +import org.knowm.xchange.itbit.v1.ItBitDateDeserializer; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/service/polling/ItBitTradeService.java b/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/service/polling/ItBitTradeService.java index d3de9ef746e..a64c79f467f 100644 --- a/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/service/polling/ItBitTradeService.java +++ b/xchange-itbit/src/main/java/org/knowm/xchange/itbit/v1/service/polling/ItBitTradeService.java @@ -37,7 +37,7 @@ public ItBitTradeService(Exchange exchange) { @Override public OpenOrders getOpenOrders() throws IOException { List orders = new ArrayList<>(); - for (CurrencyPair currencyPair : getExchangeSymbols()) { + for (CurrencyPair currencyPair : exchange.getExchangeSymbols()) { orders.addAll(Arrays.asList(getItBitOpenOrders(currencyPair))); } ItBitOrder[] empty = {}; @@ -71,13 +71,9 @@ public UserTrades getTradeHistory(TradeHistoryParams params) throws IOException ++page; } - ItBitTradeHistory userTradeHistory = getUserTradeHistory( - ((TradeHistoryParamTransactionId) params).getTransactionId(), - page, - ((TradeHistoryParamPaging) params).getPageLength(), - ((TradeHistoryParamsTimeSpan) params).getStartTime(), - ((TradeHistoryParamsTimeSpan) params).getEndTime() - ); + ItBitTradeHistory userTradeHistory = getUserTradeHistory(((TradeHistoryParamTransactionId) params).getTransactionId(), page, + ((TradeHistoryParamPaging) params).getPageLength(), ((TradeHistoryParamsTimeSpan) params).getStartTime(), + ((TradeHistoryParamsTimeSpan) params).getEndTime()); return ItBitAdapters.adaptTradeHistory(userTradeHistory); } @@ -100,12 +96,35 @@ public ItBitTradeHistoryParams(Integer pageLength, Integer pageNumber, String tx this.endTime = endTime; } - @Override public void setTransactionId(String txId) { this.txId = txId; } - @Override public String getTransactionId() { return txId; } - @Override public void setStartTime(Date startTime) { this.startTime = startTime; } - @Override public Date getStartTime() { return startTime; } - @Override public void setEndTime(Date endTime) { this.endTime = endTime; } - @Override public Date getEndTime() { return endTime; } + @Override + public void setTransactionId(String txId) { + this.txId = txId; + } + + @Override + public String getTransactionId() { + return txId; + } + + @Override + public void setStartTime(Date startTime) { + this.startTime = startTime; + } + + @Override + public Date getStartTime() { + return startTime; + } + + @Override + public void setEndTime(Date endTime) { + this.endTime = endTime; + } + + @Override + public Date getEndTime() { + return endTime; + } } @Override diff --git a/xchange-jubi/src/main/java/org/knowm/xchange/jubi/service/polling/JubiMarketDataServiceRaw.java b/xchange-jubi/src/main/java/org/knowm/xchange/jubi/service/polling/JubiMarketDataServiceRaw.java index a007cb87b9d..ec982a38590 100644 --- a/xchange-jubi/src/main/java/org/knowm/xchange/jubi/service/polling/JubiMarketDataServiceRaw.java +++ b/xchange-jubi/src/main/java/org/knowm/xchange/jubi/service/polling/JubiMarketDataServiceRaw.java @@ -33,7 +33,7 @@ public JubiMarketDataServiceRaw(Exchange exchange) { public JubiTicker getJubiTicker(String baseCurrency, String targetCurrency) throws IOException { // Base currency needs to be in lower case, otherwise API throws an error - for (CurrencyPair cp : this.getExchangeSymbols()) { + for (CurrencyPair cp : exchange.getExchangeSymbols()) { if (cp.base.getCurrencyCode().equalsIgnoreCase(baseCurrency) && cp.counter.getCurrencyCode().equalsIgnoreCase(targetCurrency)) { return this.jubi.getTicker(baseCurrency.toLowerCase()); } diff --git a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/KrakenExchange.java b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/KrakenExchange.java index 3c335f2b528..5cff7ffa2e8 100644 --- a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/KrakenExchange.java +++ b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/KrakenExchange.java @@ -1,5 +1,7 @@ package org.knowm.xchange.kraken; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; @@ -41,4 +43,19 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + //KrakenAssetPairs currencies = ((KrakenMarketDataServiceRaw) pollingMarketDataService).getKrakenAssetPairs(CurrencyPair... currencyPairs) (); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + KrakenUtils.buildExchangeSymbols(getExchangeMetaData().getCurrencyPairMetaDataMap()); + + super.remoteInit(); + } } diff --git a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/KrakenUtils.java b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/KrakenUtils.java new file mode 100644 index 00000000000..41f99684d01 --- /dev/null +++ b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/KrakenUtils.java @@ -0,0 +1,80 @@ +package org.knowm.xchange.kraken; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.knowm.xchange.currency.Currency; +import org.knowm.xchange.currency.CurrencyPair; +import org.knowm.xchange.dto.meta.CurrencyPairMetaData; +import org.knowm.xchange.exceptions.ExchangeException; + +/** + * @author timmolter + */ +public class KrakenUtils { + + private static final Set FIAT_CURRENCIES = new HashSet(); + private static final Set DIGITAL_CURRENCIES = new HashSet(); + + /** + * Private Constructor + */ + private KrakenUtils() { + + } + + public static String createKrakenCurrencyPair(CurrencyPair currencyPair) { + + return createKrakenCurrencyPair(currencyPair.base, currencyPair.counter); + } + + public static String createKrakenCurrencyPair(Currency tradableIdentifier, Currency currency) { + + return getKrakenCurrencyCode(tradableIdentifier) + getKrakenCurrencyCode(currency); + } + + public static String getKrakenCurrencyCode(Currency currency) { + + if (FIAT_CURRENCIES.contains(currency)) { + return "Z" + currency; + + } else if (DIGITAL_CURRENCIES.contains(currency)) { + + if (currency.getIso4217Currency() != null) { + currency = currency.getIso4217Currency(); + } + return "X" + currency; + } + + throw new ExchangeException("Kraken does not support the currency code " + currency); + } + + public static void buildExchangeSymbols(Map map) { + + List currencyPairs = new ArrayList(); + + final Set krakenCurrencyPairs = map.keySet(); + for (CurrencyPair krakenCurrencyPair : krakenCurrencyPairs) { + + Currency tradeCurrency = addCurrencyAndGetCode(krakenCurrencyPair.base.toString()); + Currency priceCurrency = addCurrencyAndGetCode(krakenCurrencyPair.counter.toString()); + + currencyPairs.add(new CurrencyPair(tradeCurrency, priceCurrency)); + } + } + + private static Currency addCurrencyAndGetCode(String krakenCurrencyString) { + + Currency currencyCode = KrakenAdapters.adaptCurrency(krakenCurrencyString); + if (krakenCurrencyString.startsWith("X")) { + DIGITAL_CURRENCIES.add(currencyCode); + } else { + FIAT_CURRENCIES.add(currencyCode); + } + + return currencyCode; + } +} diff --git a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenAccountServiceRaw.java b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenAccountServiceRaw.java index 09fc97ea948..06af7b3dfaa 100644 --- a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenAccountServiceRaw.java +++ b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenAccountServiceRaw.java @@ -7,6 +7,7 @@ import org.knowm.xchange.Exchange; import org.knowm.xchange.currency.Currency; import org.knowm.xchange.currency.CurrencyPair; +import org.knowm.xchange.kraken.KrakenUtils; import org.knowm.xchange.kraken.dto.account.KrakenDepositAddress; import org.knowm.xchange.kraken.dto.account.KrakenDepositMethods; import org.knowm.xchange.kraken.dto.account.KrakenLedger; @@ -87,7 +88,7 @@ public KrakenTradeBalanceInfo getKrakenTradeBalance(Currency valuationCurrency) String valuationCurrencyCode = null; if (valuationCurrency != null) { - valuationCurrencyCode = getKrakenCurrencyCode(valuationCurrency); + valuationCurrencyCode = KrakenUtils.getKrakenCurrencyCode(valuationCurrency); } KrakenTradeBalanceInfoResult balanceResult = kraken.tradeBalance(null, valuationCurrencyCode, exchange.getExchangeSpecification().getApiKey(), diff --git a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenBasePollingService.java b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenBasePollingService.java index 0afe1b7cb72..65f01949a33 100644 --- a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenBasePollingService.java +++ b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenBasePollingService.java @@ -1,10 +1,7 @@ package org.knowm.xchange.kraken.service.polling; import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; -import java.util.List; import java.util.Set; import org.knowm.xchange.Exchange; @@ -14,13 +11,11 @@ import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.exceptions.FrequencyLimitExceededException; import org.knowm.xchange.exceptions.NonceException; -import org.knowm.xchange.kraken.KrakenAdapters; import org.knowm.xchange.kraken.KrakenAuthenticated; +import org.knowm.xchange.kraken.KrakenUtils; import org.knowm.xchange.kraken.dto.KrakenResult; -import org.knowm.xchange.kraken.dto.marketdata.KrakenAssetPairs; import org.knowm.xchange.kraken.dto.marketdata.KrakenAssets; import org.knowm.xchange.kraken.dto.marketdata.KrakenServerTime; -import org.knowm.xchange.kraken.dto.marketdata.results.KrakenAssetPairsResult; import org.knowm.xchange.kraken.dto.marketdata.results.KrakenAssetsResult; import org.knowm.xchange.kraken.dto.marketdata.results.KrakenServerTimeResult; import org.knowm.xchange.kraken.dto.trade.KrakenOrderFlags; @@ -33,12 +28,6 @@ public class KrakenBasePollingService extends BaseExchangeService implements BasePollingService { - // protected static final String PREFIX = "kraken"; - // protected static final String KEY_ORDER_SIZE_MIN_DEFAULT = PREFIX + SUF_ORDER_SIZE_MIN_DEFAULT; - - private final Set FIAT_CURRENCIES = new HashSet(); - private final Set DIGITAL_CURRENCIES = new HashSet(); - protected KrakenAuthenticated kraken; protected ParamsDigest signatureCreator; @@ -55,64 +44,6 @@ public KrakenBasePollingService(Exchange exchange) { signatureCreator = KrakenDigest.createInstance(exchange.getExchangeSpecification().getSecretKey()); } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(); - - final Set krakenCurrencyPairs = getKrakenAssetPairs().getAssetPairMap().keySet(); - for (String krakenCurrencyPair : krakenCurrencyPairs) { - String krakenTradeCurrency = krakenCurrencyPair.substring(0, 4); - String krakenPriceCurrency = krakenCurrencyPair.substring(4); - - Currency tradeCurrency = addCurrencyAndGetCode(krakenTradeCurrency); - Currency priceCurrency = addCurrencyAndGetCode(krakenPriceCurrency); - - currencyPairs.add(new CurrencyPair(tradeCurrency, priceCurrency)); - } - return currencyPairs; - } - - private Currency addCurrencyAndGetCode(String krakenCurrencyString) { - - Currency currencyCode = KrakenAdapters.adaptCurrency(krakenCurrencyString); - if (krakenCurrencyString.startsWith("X")) { - DIGITAL_CURRENCIES.add(currencyCode); - } else { - FIAT_CURRENCIES.add(currencyCode); - } - - return currencyCode; - } - - protected String createKrakenCurrencyPair(CurrencyPair currencyPair) throws IOException { - - return createKrakenCurrencyPair(currencyPair.base, currencyPair.counter); - } - - protected String createKrakenCurrencyPair(Currency tradableIdentifier, Currency currency) throws IOException { - - return getKrakenCurrencyCode(tradableIdentifier) + getKrakenCurrencyCode(currency); - } - - protected String getKrakenCurrencyCode(Currency currency) throws IOException { - - if (FIAT_CURRENCIES.isEmpty()) { - getExchangeSymbols(); - } - - if (FIAT_CURRENCIES.contains(currency)) { - return "Z" + currency; - } else if (DIGITAL_CURRENCIES.contains(currency)) { - if (currency.getIso4217Currency() != null) - currency = currency.getIso4217Currency(); - - return "X" + currency; - } - - throw new ExchangeException("Kraken does not support the currency code " + currency); - } - public KrakenServerTime getServerTime() throws IOException { KrakenServerTimeResult timeResult = kraken.getServerTime(); @@ -127,13 +58,6 @@ public KrakenAssets getKrakenAssets(Currency... assets) throws IOException { return new KrakenAssets(checkResult(assetPairsResult)); } - public KrakenAssetPairs getKrakenAssetPairs(CurrencyPair... currencyPairs) throws IOException { - - KrakenAssetPairsResult assetPairsResult = kraken.getAssetPairs(delimitAssetPairs(currencyPairs)); - - return new KrakenAssetPairs(checkResult(assetPairsResult)); - } - protected R checkResult(KrakenResult krakenResult) { if (!krakenResult.isSuccess()) { @@ -176,7 +100,7 @@ protected String delimitAssets(Currency[] assets) throws IOException { if (assets != null && assets.length > 0) { boolean started = false; for (Currency asset : assets) { - commaDelimitedAssets.append((started) ? "," : "").append(getKrakenCurrencyCode(asset)); + commaDelimitedAssets.append((started) ? "," : "").append(KrakenUtils.getKrakenCurrencyCode(asset)); started = true; } @@ -192,7 +116,7 @@ protected String delimitAssetPairs(CurrencyPair[] currencyPairs) throws IOExcept if (currencyPairs != null && currencyPairs.length > 0) { StringBuilder delimitStringBuilder = null; for (CurrencyPair currencyPair : currencyPairs) { - String krakenAssetPair = createKrakenCurrencyPair(currencyPair); + String krakenAssetPair = KrakenUtils.createKrakenCurrencyPair(currencyPair); if (delimitStringBuilder == null) { delimitStringBuilder = new StringBuilder(krakenAssetPair); } else { diff --git a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenMarketDataServiceRaw.java b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenMarketDataServiceRaw.java index 397cee9aa19..c6f3a30e01c 100644 --- a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenMarketDataServiceRaw.java +++ b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenMarketDataServiceRaw.java @@ -6,10 +6,13 @@ import org.knowm.xchange.Exchange; import org.knowm.xchange.currency.Currency; import org.knowm.xchange.currency.CurrencyPair; +import org.knowm.xchange.kraken.KrakenUtils; +import org.knowm.xchange.kraken.dto.marketdata.KrakenAssetPairs; import org.knowm.xchange.kraken.dto.marketdata.KrakenDepth; import org.knowm.xchange.kraken.dto.marketdata.KrakenPublicTrades; import org.knowm.xchange.kraken.dto.marketdata.KrakenSpreads; import org.knowm.xchange.kraken.dto.marketdata.KrakenTicker; +import org.knowm.xchange.kraken.dto.marketdata.results.KrakenAssetPairsResult; import org.knowm.xchange.kraken.dto.marketdata.results.KrakenDepthResult; import org.knowm.xchange.kraken.dto.marketdata.results.KrakenPublicTradesResult; import org.knowm.xchange.kraken.dto.marketdata.results.KrakenSpreadsResult; @@ -29,7 +32,7 @@ public KrakenMarketDataServiceRaw(Exchange exchange) { public KrakenTicker getKrakenTicker(CurrencyPair currencyPair) throws IOException { - String krakenCurrencyPair = createKrakenCurrencyPair(currencyPair); + String krakenCurrencyPair = KrakenUtils.createKrakenCurrencyPair(currencyPair); KrakenTickerResult tickerResult = kraken.getTicker(krakenCurrencyPair); return checkResult(tickerResult).get(krakenCurrencyPair); @@ -44,7 +47,7 @@ public Map getKrakenTicker(CurrencyPair... currencyPairs) public KrakenDepth getKrakenDepth(CurrencyPair currencyPair, long count) throws IOException { - String krakenCurrencyPair = createKrakenCurrencyPair(currencyPair); + String krakenCurrencyPair = KrakenUtils.createKrakenCurrencyPair(currencyPair); KrakenDepthResult result = kraken.getDepth(krakenCurrencyPair, count); return checkResult(result).get(krakenCurrencyPair); @@ -57,7 +60,7 @@ public KrakenPublicTrades getKrakenTrades(CurrencyPair currencyPair) throws IOEx public KrakenPublicTrades getKrakenTrades(CurrencyPair currencyPair, Long since) throws IOException { - String krakenCurrencyPair = createKrakenCurrencyPair(currencyPair); + String krakenCurrencyPair = KrakenUtils.createKrakenCurrencyPair(currencyPair); KrakenPublicTradesResult result = kraken.getTrades(krakenCurrencyPair, since); return checkResult(result); @@ -70,9 +73,17 @@ public KrakenSpreads getKrakenSpreads(Currency tradableIdentifier, Currency curr private KrakenSpreads getKrakenSpreads(Currency tradableIdentifier, Currency currency, Long since) throws IOException { - String krakenCurrencyPair = createKrakenCurrencyPair(tradableIdentifier, currency); + String krakenCurrencyPair = KrakenUtils.createKrakenCurrencyPair(tradableIdentifier, currency); KrakenSpreadsResult spreadsResult = kraken.getSpread(krakenCurrencyPair, since); return checkResult(spreadsResult); } + + public KrakenAssetPairs getKrakenAssetPairs(CurrencyPair... currencyPairs) throws IOException { + + KrakenAssetPairsResult assetPairsResult = kraken.getAssetPairs(delimitAssetPairs(currencyPairs)); + + return new KrakenAssetPairs(checkResult(assetPairsResult)); + } + } diff --git a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenTradeServiceRaw.java b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenTradeServiceRaw.java index 2f039e9d739..3f936fc1007 100644 --- a/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenTradeServiceRaw.java +++ b/xchange-kraken/src/main/java/org/knowm/xchange/kraken/service/polling/KrakenTradeServiceRaw.java @@ -7,6 +7,7 @@ import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.trade.LimitOrder; import org.knowm.xchange.dto.trade.MarketOrder; +import org.knowm.xchange.kraken.KrakenUtils; import org.knowm.xchange.kraken.dto.account.KrakenTradeVolume; import org.knowm.xchange.kraken.dto.account.results.KrakenTradeVolumeResult; import org.knowm.xchange.kraken.dto.trade.KrakenOpenPosition; @@ -149,19 +150,19 @@ public KrakenOrderResponse placeKrakenOrder(KrakenStandardOrder krakenStandardOr KrakenOrderResult result = null; if (!krakenStandardOrder.isValidateOnly()) { - result = kraken.addOrder(createKrakenCurrencyPair(krakenStandardOrder.getAssetPair()), krakenStandardOrder.getType().toString(), + result = kraken.addOrder(KrakenUtils.createKrakenCurrencyPair(krakenStandardOrder.getAssetPair()), krakenStandardOrder.getType().toString(), krakenStandardOrder.getOrderType().toString(), krakenStandardOrder.getPrice(), krakenStandardOrder.getSecondaryPrice(), krakenStandardOrder.getVolume().toPlainString(), krakenStandardOrder.getLeverage(), krakenStandardOrder.getPositionTxId(), delimitSet(krakenStandardOrder.getOrderFlags()), krakenStandardOrder.getStartTime(), krakenStandardOrder.getExpireTime(), krakenStandardOrder.getUserRefId(), krakenStandardOrder.getCloseOrder(), exchange.getExchangeSpecification().getApiKey(), signatureCreator, exchange.getNonceFactory()); } else { - result = kraken.addOrderValidateOnly(createKrakenCurrencyPair(krakenStandardOrder.getAssetPair()), krakenStandardOrder.getType().toString(), - krakenStandardOrder.getOrderType().toString(), krakenStandardOrder.getPrice(), krakenStandardOrder.getSecondaryPrice(), - krakenStandardOrder.getVolume().toPlainString(), krakenStandardOrder.getLeverage(), krakenStandardOrder.getPositionTxId(), - delimitSet(krakenStandardOrder.getOrderFlags()), krakenStandardOrder.getStartTime(), krakenStandardOrder.getExpireTime(), - krakenStandardOrder.getUserRefId(), true, krakenStandardOrder.getCloseOrder(), exchange.getExchangeSpecification().getApiKey(), - signatureCreator, exchange.getNonceFactory()); + result = kraken.addOrderValidateOnly(KrakenUtils.createKrakenCurrencyPair(krakenStandardOrder.getAssetPair()), + krakenStandardOrder.getType().toString(), krakenStandardOrder.getOrderType().toString(), krakenStandardOrder.getPrice(), + krakenStandardOrder.getSecondaryPrice(), krakenStandardOrder.getVolume().toPlainString(), krakenStandardOrder.getLeverage(), + krakenStandardOrder.getPositionTxId(), delimitSet(krakenStandardOrder.getOrderFlags()), krakenStandardOrder.getStartTime(), + krakenStandardOrder.getExpireTime(), krakenStandardOrder.getUserRefId(), true, krakenStandardOrder.getCloseOrder(), + exchange.getExchangeSpecification().getApiKey(), signatureCreator, exchange.getNonceFactory()); } return checkResult(result); diff --git a/xchange-mexbt/src/main/java/org/knowm/xchange/mexbt/package-info.java b/xchange-mexbt/src/main/java/org/knowm/xchange/mexbt/package-info.java deleted file mode 100644 index d9a7e07d21a..00000000000 --- a/xchange-mexbt/src/main/java/org/knowm/xchange/mexbt/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * XChange implementation for the Mexican Bitcoin Exchange. - */ -package org.knowm.xchange.mexbt; diff --git a/xchange-mexbt/src/main/java/org/knowm/xchange/mexbt/service/polling/MeXBTTradeService.java b/xchange-mexbt/src/main/java/org/knowm/xchange/mexbt/service/polling/MeXBTTradeService.java index 6a1ccbc9ce4..c711417253c 100644 --- a/xchange-mexbt/src/main/java/org/knowm/xchange/mexbt/service/polling/MeXBTTradeService.java +++ b/xchange-mexbt/src/main/java/org/knowm/xchange/mexbt/service/polling/MeXBTTradeService.java @@ -71,7 +71,7 @@ public Collection getOrder(String... orderIds) @Override public boolean cancelOrder(String orderId) throws ExchangeException, IOException { boolean cancelled = false; - for (CurrencyPair currencyPair : getExchangeSymbols()) { + for (CurrencyPair currencyPair : exchange.getExchangeSymbols()) { try { cancelOrder(toCurrencyPair(currencyPair), orderId); cancelled = true; diff --git a/xchange-okcoin/src/main/java/org/knowm/xchange/okcoin/service/polling/OkCoinFuturesTradeService.java b/xchange-okcoin/src/main/java/org/knowm/xchange/okcoin/service/polling/OkCoinFuturesTradeService.java index c78bf61d5a1..bf27d66d54c 100644 --- a/xchange-okcoin/src/main/java/org/knowm/xchange/okcoin/service/polling/OkCoinFuturesTradeService.java +++ b/xchange-okcoin/src/main/java/org/knowm/xchange/okcoin/service/polling/OkCoinFuturesTradeService.java @@ -45,7 +45,7 @@ public class OkCoinFuturesTradeService extends OkCoinTradeServiceRaw implements /** * Constructor - * + * * @param exchange */ public OkCoinFuturesTradeService(Exchange exchange, FuturesContract futuresContract, int leverRate) { @@ -58,7 +58,7 @@ public OkCoinFuturesTradeService(Exchange exchange, FuturesContract futuresContr @Override public OpenOrders getOpenOrders() throws IOException { - List exchangeSymbols = getExchangeSymbols(); + List exchangeSymbols = exchange.getExchangeSymbols(); List orderResults = new ArrayList(exchangeSymbols.size()); @@ -86,8 +86,9 @@ public String placeMarketOrder(MarketOrder marketOrder) throws IOException { orderId = futuresTrade(OkCoinAdapters.adaptSymbol(marketOrder.getCurrencyPair()), marketOrder.getType() == OrderType.BID ? "1" : "2", "0", marketOrder.getTradableAmount().toPlainString(), futuresContract, 1, leverRate).getOrderId(); return String.valueOf(orderId); - } else + } else { return liquidateMarketOrder(marketOrder); + } } /** Liquidate long or short contract (depending on market order order type) using a market order */ @@ -106,8 +107,9 @@ public String placeLimitOrder(LimitOrder limitOrder) throws IOException { orderId = futuresTrade(OkCoinAdapters.adaptSymbol(limitOrder.getCurrencyPair()), limitOrder.getType() == OrderType.BID ? "1" : "2", limitOrder.getLimitPrice().toPlainString(), limitOrder.getTradableAmount().toPlainString(), futuresContract, 0, leverRate).getOrderId(); return String.valueOf(orderId); - } else + } else { return liquidateLimitOrder(limitOrder); + } } /** Liquidate long or short contract using a limit order */ @@ -125,7 +127,7 @@ public boolean cancelOrder(String orderId) throws IOException { boolean ret = false; long id = Long.valueOf(orderId); - List exchangeSymbols = getExchangeSymbols(); + List exchangeSymbols = exchange.getExchangeSymbols(); List exchangeContracts = getExchangeContracts(); for (int i = 0; i < exchangeSymbols.size(); i++) { @@ -191,8 +193,8 @@ public interface TradeHistoryParamFuturesContract extends TradeHistoryParams { void setOrderId(String orderId); } - final public static class OkCoinFuturesTradeHistoryParams extends DefaultTradeHistoryParamPaging implements TradeHistoryParamCurrencyPair, - TradeHistoryParamFuturesContract { + final public static class OkCoinFuturesTradeHistoryParams extends DefaultTradeHistoryParamPaging + implements TradeHistoryParamCurrencyPair, TradeHistoryParamFuturesContract { private CurrencyPair currencyPair; private FuturesContract futuresContract; private String orderId; @@ -240,9 +242,9 @@ public void setOrderId(String orderId) { } @Override - public Collection getOrder(String... orderIds) throws ExchangeException, NotAvailableFromExchangeException, - NotYetImplementedForExchangeException, IOException { - List exchangeSymbols = getExchangeSymbols(); + public Collection getOrder(String... orderIds) + throws ExchangeException, NotAvailableFromExchangeException, NotYetImplementedForExchangeException, IOException { + List exchangeSymbols = exchange.getExchangeSymbols(); List openOrders = new ArrayList(); List orderResults = new ArrayList(exchangeSymbols.size()); List orderIdsRequest = new ArrayList(); @@ -265,17 +267,19 @@ public Collection getOrder(String... orderIds) throws ExchangeException, OkCoinFuturesOrderResult orderResult = getFuturesOrders(createDelimitedString(orderIdsRequest.toArray(new String[orderIdsRequest.size()])), OkCoinAdapters.adaptSymbol(symbol), futuresContract); orderIdsRequest.clear(); - if (orderResult.getOrders().length > 0) + if (orderResult.getOrders().length > 0) { orderResults.addAll(new ArrayList(Arrays.asList(orderResult.getOrders()))); + } } } OkCoinFuturesOrderResult orderResult; - if (!orderIdsRequest.isEmpty()) + if (!orderIdsRequest.isEmpty()) { orderResult = getFuturesOrders(createDelimitedString(orderIdsRequest.toArray(new String[orderIdsRequest.size()])), OkCoinAdapters.adaptSymbol(symbol), futuresContract); - else + } else { orderResult = getFuturesFilledOrder(-1, OkCoinAdapters.adaptSymbol(symbol), "0", "50", futuresContract); + } if (orderResult.getOrders().length > 0) { for (int o = 0; o < orderResult.getOrders().length; o++) { diff --git a/xchange-okcoin/src/main/java/org/knowm/xchange/okcoin/service/polling/OkCoinTradeService.java b/xchange-okcoin/src/main/java/org/knowm/xchange/okcoin/service/polling/OkCoinTradeService.java index d4e276e9c7a..67f7c2b0c55 100644 --- a/xchange-okcoin/src/main/java/org/knowm/xchange/okcoin/service/polling/OkCoinTradeService.java +++ b/xchange-okcoin/src/main/java/org/knowm/xchange/okcoin/service/polling/OkCoinTradeService.java @@ -6,9 +6,6 @@ import java.util.Collections; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import org.knowm.xchange.Exchange; import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.Order; @@ -29,6 +26,8 @@ import org.knowm.xchange.service.polling.trade.params.TradeHistoryParamCurrencyPair; import org.knowm.xchange.service.polling.trade.params.TradeHistoryParamPaging; import org.knowm.xchange.service.polling.trade.params.TradeHistoryParams; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class OkCoinTradeService extends OkCoinTradeServiceRaw implements PollingTradeService { @@ -38,7 +37,7 @@ public class OkCoinTradeService extends OkCoinTradeServiceRaw implements Polling /** * Constructor - * + * * @param exchange */ public OkCoinTradeService(Exchange exchange) { @@ -49,7 +48,7 @@ public OkCoinTradeService(Exchange exchange) { @Override public OpenOrders getOpenOrders() throws IOException { - List exchangeSymbols = getExchangeSymbols(); + List exchangeSymbols = exchange.getExchangeSymbols(); List orderResults = new ArrayList(exchangeSymbols.size()); @@ -104,7 +103,7 @@ public boolean cancelOrder(String orderId) throws IOException { boolean ret = false; long id = Long.valueOf(orderId); - List exchangeSymbols = getExchangeSymbols(); + List exchangeSymbols = exchange.getExchangeSymbols(); for (int i = 0; i < exchangeSymbols.size(); i++) { CurrencyPair symbol = exchangeSymbols.get(i); try { diff --git a/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/PoloniexExchange.java b/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/PoloniexExchange.java index 5b69519ec62..e69186cafdb 100644 --- a/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/PoloniexExchange.java +++ b/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/PoloniexExchange.java @@ -31,17 +31,6 @@ protected void initServices() { this.pollingTradeService = new PoloniexTradeService(this); } - @Override - public void remoteInit() throws IOException { - - PoloniexMarketDataServiceRaw poloniexMarketDataServiceRaw = (PoloniexMarketDataServiceRaw) pollingMarketDataService; - - Map poloniexCurrencyInfoMap = poloniexMarketDataServiceRaw.getPoloniexCurrencyInfo(); - Map poloniexMarketDataMap = poloniexMarketDataServiceRaw.getAllPoloniexTickers(); - - exchangeMetaData = PoloniexAdapters.adaptToExchangeMetaData(poloniexCurrencyInfoMap, poloniexMarketDataMap, exchangeMetaData); - } - @Override public ExchangeSpecification getDefaultExchangeSpecification() { @@ -60,4 +49,15 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + + PoloniexMarketDataServiceRaw poloniexMarketDataServiceRaw = (PoloniexMarketDataServiceRaw) pollingMarketDataService; + + Map poloniexCurrencyInfoMap = poloniexMarketDataServiceRaw.getPoloniexCurrencyInfo(); + Map poloniexMarketDataMap = poloniexMarketDataServiceRaw.getAllPoloniexTickers(); + + exchangeMetaData = PoloniexAdapters.adaptToExchangeMetaData(poloniexCurrencyInfoMap, poloniexMarketDataMap, exchangeMetaData); + } } diff --git a/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/service/polling/PoloniexBasePollingService.java b/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/service/polling/PoloniexBasePollingService.java index 0e67cbae6e8..81e5dd23578 100644 --- a/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/service/polling/PoloniexBasePollingService.java +++ b/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/service/polling/PoloniexBasePollingService.java @@ -1,10 +1,11 @@ package org.knowm.xchange.poloniex.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Set; +import org.knowm.xchange.Exchange; +import org.knowm.xchange.poloniex.Poloniex; +import org.knowm.xchange.poloniex.PoloniexAuthenticated; +import org.knowm.xchange.poloniex.service.PoloniexDigest; +import org.knowm.xchange.service.BaseExchangeService; +import org.knowm.xchange.service.polling.BasePollingService; /** * @author Zach Holmes @@ -12,15 +13,6 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import org.knowm.xchange.Exchange; -import org.knowm.xchange.currency.CurrencyPair; -import org.knowm.xchange.poloniex.Poloniex; -import org.knowm.xchange.poloniex.PoloniexAuthenticated; -import org.knowm.xchange.poloniex.PoloniexUtils; -import org.knowm.xchange.poloniex.dto.marketdata.PoloniexMarketData; -import org.knowm.xchange.poloniex.service.PoloniexDigest; -import org.knowm.xchange.service.BaseExchangeService; -import org.knowm.xchange.service.polling.BasePollingService; import si.mazi.rescu.ClientConfig; import si.mazi.rescu.ParamsDigest; @@ -58,19 +50,4 @@ public void configureObjectMapper(ObjectMapper objectMapper) { } - @Override - public List getExchangeSymbols() throws IOException { - - List currencyPairs = new ArrayList(); - - String command = "returnTicker"; - HashMap marketData = poloniex.getTicker(command); - Set pairStrings = marketData.keySet(); - - for (String pairString : pairStrings) { - currencyPairs.add(PoloniexUtils.toCurrencyPair(pairString)); - } - - return currencyPairs; - } } diff --git a/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/service/polling/PoloniexMarketDataServiceRaw.java b/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/service/polling/PoloniexMarketDataServiceRaw.java index c8896ad39e3..cf474833e56 100644 --- a/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/service/polling/PoloniexMarketDataServiceRaw.java +++ b/xchange-poloniex/src/main/java/org/knowm/xchange/poloniex/service/polling/PoloniexMarketDataServiceRaw.java @@ -9,7 +9,12 @@ import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.poloniex.PoloniexException; import org.knowm.xchange.poloniex.PoloniexUtils; -import org.knowm.xchange.poloniex.dto.marketdata.*; +import org.knowm.xchange.poloniex.dto.marketdata.PoloniexChartData; +import org.knowm.xchange.poloniex.dto.marketdata.PoloniexCurrencyInfo; +import org.knowm.xchange.poloniex.dto.marketdata.PoloniexDepth; +import org.knowm.xchange.poloniex.dto.marketdata.PoloniexMarketData; +import org.knowm.xchange.poloniex.dto.marketdata.PoloniexPublicTrade; +import org.knowm.xchange.poloniex.dto.marketdata.PoloniexTicker; public class PoloniexMarketDataServiceRaw extends PoloniexBasePollingService { @@ -157,8 +162,8 @@ public PoloniexPublicTrade[] getPoloniexPublicTrades(CurrencyPair currencyPair, } } - public PoloniexChartData[] getPoloniexChartData(CurrencyPair currencyPair, Long startTime, - Long endTime, PoloniexChartDataPeriodType period) throws IOException { + public PoloniexChartData[] getPoloniexChartData(CurrencyPair currencyPair, Long startTime, Long endTime, PoloniexChartDataPeriodType period) + throws IOException { String command = "returnChartData"; String pairString = PoloniexUtils.toPairString(currencyPair); @@ -169,5 +174,4 @@ public PoloniexChartData[] getPoloniexChartData(CurrencyPair currencyPair, Long throw new ExchangeException(e.getError()); } } - } diff --git a/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/VaultoroExchange.java b/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/VaultoroExchange.java index 3950c182732..ccb362cd093 100644 --- a/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/VaultoroExchange.java +++ b/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/VaultoroExchange.java @@ -1,5 +1,6 @@ package org.knowm.xchange.vaultoro; +import java.io.IOException; import java.math.BigDecimal; import org.knowm.xchange.BaseExchange; @@ -46,4 +47,17 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + // List currencies = ((VaultoroMarketDataServiceRaw) pollingMarketDataService).getBlah(); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } } diff --git a/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/service/polling/VaultoroBasePollingService.java b/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/service/polling/VaultoroBasePollingService.java index a08a710ea7a..aba5285358c 100644 --- a/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/service/polling/VaultoroBasePollingService.java +++ b/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/service/polling/VaultoroBasePollingService.java @@ -1,11 +1,6 @@ package org.knowm.xchange.vaultoro.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - import org.knowm.xchange.Exchange; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; import org.knowm.xchange.vaultoro.VaultoroAuthenticated; @@ -34,11 +29,4 @@ public VaultoroBasePollingService(Exchange exchange) { this.signatureCreator = VaultoroDigest.createInstance(exchange.getExchangeSpecification().getSecretKey()); } - @Override - public List getExchangeSymbols() throws IOException { - - List pairs = new ArrayList(); - pairs.add(new CurrencyPair("GLD", "BTC")); - return pairs; - } } diff --git a/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/service/polling/VaultoroMarketDataServiceRaw.java b/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/service/polling/VaultoroMarketDataServiceRaw.java index d14b448512d..9d95518039b 100644 --- a/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/service/polling/VaultoroMarketDataServiceRaw.java +++ b/xchange-vaultoro/src/main/java/org/knowm/xchange/vaultoro/service/polling/VaultoroMarketDataServiceRaw.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; import org.knowm.xchange.Exchange; @@ -37,4 +38,11 @@ public List getVaultoroTrades(CurrencyPair currencyPair) throws V return vaultoro.getVaultoroTrades("month"); } + public List getExchangeSymbols() throws IOException { + + // TODO put this in the vautoro.json file in resources and call a real endpoint for the data in addition + List pairs = new ArrayList(); + pairs.add(new CurrencyPair("GLD", "BTC")); + return pairs; + } } diff --git a/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/YacunaExchange.java b/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/YacunaExchange.java index 399dc49a175..4c08665e865 100644 --- a/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/YacunaExchange.java +++ b/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/YacunaExchange.java @@ -1,5 +1,7 @@ package org.knowm.xchange.yacuna; +import java.io.IOException; + import org.knowm.xchange.BaseExchange; import org.knowm.xchange.ExchangeSpecification; import org.knowm.xchange.utils.nonce.CurrentTimeNonceFactory; @@ -37,4 +39,17 @@ public SynchronizedValueFactory getNonceFactory() { return nonceFactory; } + + @Override + public void remoteInit() throws IOException { + + // TODO Implement this. + // HashMap currencies = ((YacunaMarketDataServiceRaw) pollingMarketDataService).getCurrencyPairMap(); + // other endpoints? + // hard-coded meta data from json file not available at an endpoint? + // TODO take all the info gathered above and create a `ExchangeMetaData` object via a new method in `*Adapters` class + // exchangeMetaData = *Adapters.adaptToExchangeMetaData(blah, blah); + + super.remoteInit(); + } } diff --git a/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/service/polling/YacunaBasePollingService.java b/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/service/polling/YacunaBasePollingService.java index a732315c00e..30c2ac08a91 100644 --- a/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/service/polling/YacunaBasePollingService.java +++ b/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/service/polling/YacunaBasePollingService.java @@ -1,17 +1,9 @@ package org.knowm.xchange.yacuna.service.polling; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - import org.knowm.xchange.Exchange; -import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.service.BaseExchangeService; import org.knowm.xchange.service.polling.BasePollingService; import org.knowm.xchange.yacuna.Yacuna; -import org.knowm.xchange.yacuna.dto.marketdata.YacunaTicker; -import org.knowm.xchange.yacuna.dto.marketdata.YacunaTickerReturn; import si.mazi.rescu.RestProxyFactory; @@ -20,8 +12,6 @@ */ public class YacunaBasePollingService extends BaseExchangeService implements BasePollingService { - private static HashMap CURRENCY_PAIR_MAP; - private static List CURRENCY_PAIR_LIST; protected final T yacuna; protected YacunaBasePollingService(Class type, Exchange exchange) { @@ -30,31 +20,4 @@ protected YacunaBasePollingService(Class type, Exchange exchange) { this.yacuna = RestProxyFactory.createProxy(type, exchange.getExchangeSpecification().getSslUri()); } - protected HashMap getCurrencyPairMap() throws IOException { - - if (CURRENCY_PAIR_MAP == null) { - CURRENCY_PAIR_MAP = new HashMap(); - YacunaTickerReturn tickers = this.yacuna.getTickers(); - - if (tickers != null && tickers.getTickerList() != null) { - for (YacunaTicker yt : tickers.getTickerList()) { - String base = yt.getBaseCurrency().toUpperCase(); - String target = yt.getTargetCurrency().toUpperCase(); - CURRENCY_PAIR_MAP.put(base + "_" + target, new CurrencyPair(base, target)); - } - } - } - - return CURRENCY_PAIR_MAP; - } - - @Override - public List getExchangeSymbols() throws IOException { - - if (CURRENCY_PAIR_LIST == null) { - CURRENCY_PAIR_LIST = new ArrayList(this.getCurrencyPairMap().values()); - } - - return CURRENCY_PAIR_LIST; - } } diff --git a/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/service/polling/YacunaMarketDataServiceRaw.java b/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/service/polling/YacunaMarketDataServiceRaw.java index 40393f57319..c529f140e85 100644 --- a/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/service/polling/YacunaMarketDataServiceRaw.java +++ b/xchange-yacuna/src/main/java/org/knowm/xchange/yacuna/service/polling/YacunaMarketDataServiceRaw.java @@ -1,6 +1,7 @@ package org.knowm.xchange.yacuna.service.polling; import java.io.IOException; +import java.util.HashMap; import java.util.List; import org.knowm.xchange.Exchange; @@ -14,6 +15,11 @@ */ public class YacunaMarketDataServiceRaw extends YacunaBasePollingService { + /** + * Constructor + * + * @param exchange + */ public YacunaMarketDataServiceRaw(Exchange exchange) { super(Yacuna.class, exchange); @@ -36,4 +42,20 @@ public YacunaTicker getYacunaTicker(CurrencyPair currencyPair) throws IOExceptio return tickerReturn != null && tickerReturn.getTickerList() != null && tickerReturn.getTickerList().size() == 1 ? tickerReturn.getTickerList().get(0) : null; } + + protected HashMap getCurrencyPairMap() throws IOException { + + HashMap currencyPairMap = new HashMap(); + YacunaTickerReturn tickers = this.yacuna.getTickers(); + + if (tickers != null && tickers.getTickerList() != null) { + for (YacunaTicker yt : tickers.getTickerList()) { + String base = yt.getBaseCurrency().toUpperCase(); + String target = yt.getTargetCurrency().toUpperCase(); + currencyPairMap.put(base + "_" + target, new CurrencyPair(base, target)); + } + } + + return currencyPairMap; + } }