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.account.AccountService; import org.knowm.xchange.service.marketdata.MarketDataService; import org.knowm.xchange.service.trade.TradeService; import si.mazi.rescu.SynchronizedValueFactory; /** * <p> * Interface to provide the following to applications: * </p> * <ul> * <li>Entry point to the XChange APIs</li> * </ul> * <p> * The consumer is given a choice of a default (no-args) or configured accessor * </p> */ public interface Exchange { /** * @return The ExchangeSpecification in use for this exchange */ ExchangeSpecification getExchangeSpecification(); /** * 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<CurrencyPair> 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 * synchronized block. * * @return */ SynchronizedValueFactory<Long> getNonceFactory(); /** * @return A default ExchangeSpecification to use during the creation process if one is not supplied */ ExchangeSpecification getDefaultExchangeSpecification(); /** * Applies any exchange specific parameters * * @param exchangeSpecification The {@link ExchangeSpecification} */ void applySpecification(ExchangeSpecification exchangeSpecification); /** * <p> * A market data service typically consists of a regularly updated list of the available prices for the various symbols * </p> * <p> * This is the non-streaming (blocking) version of the service * </p> * * @return The exchange's market data service */ MarketDataService getMarketDataService(); /** * <p> * An trade service typically provides access to trading functionality * </p> * <p> * Typically access is restricted by a secret API key and/or username password authentication which are usually provided in the * {@link ExchangeSpecification} * </p> * * @return The exchange's trade service */ TradeService getTradeService(); /** * <p> * An account service typically provides access to the user's private exchange data * </p> * <p> * Typically access is restricted by a secret API key and/or username password authentication which are usually provided in the * {@link ExchangeSpecification} * </p> * * @return The exchange's account service */ AccountService getAccountService(); /** * 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; }