jnidzwetzki/bitfinex-v2-wss-api-java

View on GitHub
src/main/java/com/github/jnidzwetzki/bitfinex/v2/symbol/BitfinexSymbols.java

Summary

Maintainability
A
2 hrs
Test Coverage
package com.github.jnidzwetzki.bitfinex.v2.symbol;

import java.util.Objects;

import com.github.jnidzwetzki.bitfinex.v2.entity.BitfinexApiKeyPermissions;
import com.github.jnidzwetzki.bitfinex.v2.entity.BitfinexCandleTimeFrame;
import com.github.jnidzwetzki.bitfinex.v2.entity.currency.BitfinexInstrument;
import com.github.jnidzwetzki.bitfinex.v2.entity.currency.BitfinexCurrencyPair;
import com.github.jnidzwetzki.bitfinex.v2.entity.currency.BitfinexFundingCurrency;

/**
 * Bitfinex symbol factory class
 */
public final class BitfinexSymbols {

    private BitfinexSymbols() {

    }

    /**
     * Returns symbol for account.
     * used only within lib - no practical use for end-user
     *
     * @param permissions of specified key
     * @param apiKey      for this account
     * @return symbol
     */
    public static BitfinexAccountSymbol account(final BitfinexApiKeyPermissions permissions, 
            final String apiKey) {
        
        return new BitfinexAccountSymbol(permissions, apiKey);
    }
    
    /**
     * Returns symbol for account.
     * used only within lib - no practical use for end-user
     *
     * @param permissions of specified key
     * @return symbol
     */
    public static BitfinexAccountSymbol account( final BitfinexApiKeyPermissions permissions) {
        return new BitfinexAccountSymbol(permissions);
    }

    /**
     * Returns symbol for candlestick channel
     *
     * @param currencyPair of candles
     * @param timeframe    configuration of candles
     * @return symbol
     */
    public static BitfinexCandlestickSymbol candlesticks(final BitfinexCurrencyPair currencyPair, 
            final BitfinexCandleTimeFrame timeframe) {
        
        return new BitfinexCandlestickSymbol(currencyPair, Objects.requireNonNull(timeframe));
    }

    /**
     * Returns symbol for candlestick channel
     *
     * @param currency       of candles
     * @param profitCurrency of candles
     * @param timeframe      configuration of candles
     * @return symbol
     */
    public static BitfinexCandlestickSymbol candlesticks(final String currency, final String profitCurrency, 
            final BitfinexCandleTimeFrame timeframe) {
        
        final String currencyNonNull = Objects.requireNonNull(currency).toUpperCase();
        final String profitCurrencyNonNull = Objects.requireNonNull(profitCurrency).toUpperCase();
        
        return candlesticks(BitfinexCurrencyPair.of(currencyNonNull, profitCurrencyNonNull), timeframe);
    }

    /**
     * Returns symbol for executed trades channel
     *
     * @param currencyPair of trades channel
     * @return symbol
     */
    public static BitfinexExecutedTradeSymbol executedTrades(final BitfinexCurrencyPair currencyPair) {
        return new BitfinexExecutedTradeSymbol(currencyPair);
    }

    /**
     * Returns symbol for candlestick channel
     *
     * @param currency       of trades channel
     * @param profitCurrency of trades channel
     * @return symbol
     */
    public static BitfinexExecutedTradeSymbol executedTrades(final String currency, 
            final String profitCurrency) {
        
        final String currencyNonNull = Objects.requireNonNull(currency).toUpperCase();
        final String profitCurrencyNonNull = Objects.requireNonNull(profitCurrency).toUpperCase();
        
        return executedTrades(BitfinexCurrencyPair.of(currencyNonNull, profitCurrencyNonNull));
    }

    /**
     * returns symbol for raw order book channel
     *
     * @param currencyPair of raw order book channel
     * @return symbol
     */
    public static BitfinexOrderBookSymbol rawOrderBook(final BitfinexCurrencyPair currencyPair) {
        return new BitfinexOrderBookSymbol(currencyPair, BitfinexOrderBookSymbol.Precision.R0, null, null);
    }

    /**
     * Returns symbol for raw order book channel
     *
     * @param currency       of raw order book channel
     * @param profitCurrency of raw order book channel
     * @return symbol
     */
    public static BitfinexOrderBookSymbol rawOrderBook(final String currency, final String profitCurrency) {
        final String currencyNonNull = Objects.requireNonNull(currency).toUpperCase();
        final String profitCurrencyNonNull = Objects.requireNonNull(profitCurrency).toUpperCase();
        
        return rawOrderBook(BitfinexCurrencyPair.of(currencyNonNull, profitCurrencyNonNull));
    }

    /**
     * returns symbol for order book channel
     *
     * @param currencyPair of order book channel
     * @param precision    of order book
     * @param frequency    of order book
     * @param pricePoints  in initial snapshot
     * @return symbol
     */
    public static BitfinexOrderBookSymbol orderBook(final BitfinexCurrencyPair currencyPair, 
            final BitfinexOrderBookSymbol.Precision precision,
            final BitfinexOrderBookSymbol.Frequency frequency, final int pricePoints) {
        
        if (precision == BitfinexOrderBookSymbol.Precision.R0) {
            throw new IllegalArgumentException("Use BitfinexSymbols#rawOrderBook() factory method instead");
        }
        
        return new BitfinexOrderBookSymbol(currencyPair, precision, frequency, pricePoints);
    }

    /**
     * Returns symbol for candlestick channel
     *
     * @param currency       of order book
     * @param profitCurrency of order book
     * @param precision      of order book
     * @param frequency      of order book
     * @param pricePoints    in initial snapshot
     * @return symbol
     */
    public static BitfinexOrderBookSymbol orderBook(final String currency, final String profitCurrency, 
            final BitfinexOrderBookSymbol.Precision precision,
            final BitfinexOrderBookSymbol.Frequency frequency, final int pricePoints) {
        
        final String currencyNonNull = Objects.requireNonNull(currency).toUpperCase();
        final String profitCurrencyNonNull = Objects.requireNonNull(profitCurrency).toUpperCase();
        
        return orderBook(BitfinexCurrencyPair.of(currencyNonNull, profitCurrencyNonNull), precision, frequency, pricePoints);
    }

    /**
     * returns symbol for ticker channel
     *
     * @param currencyPair of ticker channel
     * @return symbol
     */
    public static BitfinexTickerSymbol ticker(final BitfinexInstrument currencyPair) {
        return new BitfinexTickerSymbol(currencyPair);
    }

    /**
     * returns symbol for ticker channel
     *
     * @param currency       of ticker
     * @param profitCurrency of ticker
     * @return symbol
     */
    public static BitfinexTickerSymbol ticker(final String currency, final String profitCurrency) {
        
        final String currencyNonNull = Objects.requireNonNull(currency).toUpperCase();
        final String profitCurrencyNonNull = Objects.requireNonNull(profitCurrency).toUpperCase();
        
        return ticker(BitfinexCurrencyPair.of(currencyNonNull, profitCurrencyNonNull));
    }

    /**
     * returns symbol for funding
     * 
     * @param bitfinexCurrency
     * @return
     */
    public static BitfinexFundingSymbol funding(final BitfinexFundingCurrency bitfinexCurrency) {
        return new BitfinexFundingSymbol(bitfinexCurrency);
    }
    
     /**
     * returns symbol for funding
     * 
     * @param bitfinexCurrency
     * @return
     */
    public static BitfinexFundingSymbol funding(final String bitfinexCurrency) {
        
        final String currencyNonNull = Objects.requireNonNull(bitfinexCurrency).toUpperCase();
        final BitfinexFundingCurrency currency = new BitfinexFundingCurrency(currencyNonNull);
        
        return funding(currency);
    }
}