Package com.barchart.feed.ddf.symbol.provider

Source Code of com.barchart.feed.ddf.symbol.provider.DDF_SymbolService

/**
* Copyright (C) 2011-2012 Barchart, Inc. <http://www.barchart.com/>
*
* All rights reserved. Licensed under the OSI BSD License.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package com.barchart.feed.ddf.symbol.provider;

import static com.barchart.feed.ddf.symbol.provider.DDF_Symbology.*;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.barchart.feed.ddf.symbol.api.DDF_Symbol;
import com.barchart.feed.ddf.symbol.api.DDF_SymbolEquity;
import com.barchart.feed.ddf.symbol.api.DDF_SymbolFuture;
import com.barchart.feed.ddf.symbol.api.DDF_SymbolIndex;
import com.barchart.feed.ddf.symbol.api.DDF_SymbolOption;
import com.barchart.feed.ddf.symbol.api.DDF_SymbolSpread;
import com.barchart.feed.ddf.symbol.enums.DDF_Equity;
import com.barchart.feed.ddf.symbol.enums.DDF_ExpireMonth;
import com.barchart.feed.ddf.symbol.enums.DDF_ExpireYear;
import com.barchart.feed.ddf.symbol.enums.DDF_Option;
import com.barchart.feed.ddf.symbol.enums.DDF_OptionYear;
import com.barchart.util.ascii.ASCII;
import com.barchart.util.values.api.TextValue;

// TODO: Auto-generated Javadoc
/**
* The Class DDF_SymbolService.
*/
public class DDF_SymbolService {

  private static final Logger log = LoggerFactory
      .getLogger(DDF_SymbolService.class);

  private DDF_SymbolService() {
  }

  // /////////////////////////

  static final DDF_Symbol NULL_SYMBOL = new BaseEquity();

  // /////////////////////////

  private static final ConcurrentMap<TextValue, DDF_Symbol> symbolMap = //
  new ConcurrentHashMap<TextValue, DDF_Symbol>();

  /**
   * Find.
   *
   * @param text the text
   * @return the dD f_ symbol
   */
  public static final DDF_Symbol find(final TextValue text) {
    final TextValue guid = DDF_Symbology.lookupFromSymbol(text);
    DDF_Symbol symbol = symbolMap.get(guid);

    log.error("find {}", text);

    if (symbol == null) {
      symbol = decode(guid.toString());
      // TODO handle null symbol
      symbolMap.putIfAbsent(guid, symbol);
    }
    return symbol;
  }

  /**
   * Clear cache.
   */
  public static final void clearCache() {
    symbolMap.clear();
  }

  // /////////////////////////

  /**
   * Decode.
   *
   * @param symbolName the symbol name
   * @return the dD f_ symbol
   */
  public static final DDF_Symbol decode(final String symbolName) {

    if (symbolName == null) {
      log.error("symbolName == null");
      return null;
    }

    if (isOptionExtended(symbolName)) {
      final OptionExtended symbol = new OptionExtended();
      symbol.name = symbolName;
      final int finish = symbolName.length();
      final int middle = symbolName.indexOf(OPTION_SEPARATOR);
      symbol.group = symbolName.substring(0, middle - 2);
      symbol.month = DDF_ExpireMonth.fromCode(symbolName
          .charAt(middle - 2));
      symbol.year = DDF_ExpireYear
          .fromCode(symbolName.charAt(middle - 1));
      symbol.strikePrice = symbolName.substring(middle + 1, finish - 1);
      symbol.optionIndicator = DDF_Option.fromCode(symbolName
          .charAt(finish - 1));
      return symbol;
    }

    if (isOptionBasic(symbolName)) {
      final OptionBasic symbol = new OptionBasic();
      symbol.name = symbolName;
      final int finish = symbolName.length();
      int middle = 0;
      for (int k = finish - 2; k > 0; k--) {
        if (ASCII.isDigit(symbolName.charAt(k))) {
          continue;
        } else {
          middle = k;
          break;
        }
      }
      symbol.group = symbolName.substring(0, middle);
      symbol.month = DDF_ExpireMonth.fromCode(symbolName.charAt(middle));
      final DDF_OptionYear indicator = DDF_OptionYear.fromCode(symbolName
          .charAt(finish - 1));
      symbol.year = DDF_ExpireYear.fromOptionYear(indicator);
      symbol.strikePrice = symbolName.substring(middle + 1, finish - 1);
      symbol.optionIndicator = DDF_Option.fromOptionYear(indicator);
      return symbol;
    }

    if (isIndex(symbolName)) {
      final BaseIndex symbol = new BaseIndex();
      symbol.name = symbolName;
      symbol.group = symbolName.substring(1);
      return symbol;
    }

    if (isEquityCAN(symbolName)) {
      final BaseEquity symbol = new BaseEquity();
      symbol.name = symbolName;
      symbol.group = getGroupEquityCAN(symbolName);
      symbol.equityType = DDF_Equity.CAN;
      return symbol;
    }

    if (isEquityLSE(symbolName)) {
      final BaseEquity symbol = new BaseEquity();
      symbol.name = symbolName;
      symbol.group = getGroupEquityLSE(symbolName);
      symbol.equityType = DDF_Equity.LSE;
      return symbol;
    }

    if (isEquityNSE(symbolName)) {
      final BaseEquity symbol = new BaseEquity();
      symbol.name = symbolName;
      symbol.group = getGroupEquityNSE(symbolName);
      symbol.equityType = DDF_Equity.NSE;
      return symbol;
    }

    if (isFuture(symbolName)) {
      final BaseFuture symbol = new BaseFuture();
      symbol.name = symbolName;
      symbol.group = getGroupFuture(symbolName);
      symbol.year = getFutureExpireYear(symbolName);
      symbol.month = getFutureExpireMonth(symbolName);
      return symbol;
    }

    if (isEquityOther(symbolName)) {
      final BaseEquity symbol = new BaseEquity();
      symbol.name = symbolName;
      symbol.group = symbolName;
      return symbol;
    }

    // TODO finish remaining types

    log.error("can not parse; symbolName={}", symbolName);

    return NULL_SYMBOL;

  }

  // TODO
  /**
   * New future.
   *
   * @param group the group
   * @param year the year
   * @param month the month
   * @return the dD f_ symbol future
   */
  public static final DDF_SymbolFuture newFuture(final String group,
      final DDF_ExpireYear year, final DDF_ExpireMonth month) {
    final BaseFuture symbol = new BaseFuture();
    symbol.group = group;
    symbol.year = year;
    symbol.month = month;
    symbol.name = symbol.toString();
    return symbol;
  }

  // TODO
  /**
   * New option.
   *
   * @param group the group
   * @param year the year
   * @param month the month
   * @param strike the strike
   * @param indicator the indicator
   * @return the dD f_ symbol option
   */
  public static final DDF_SymbolOption newOption(final String group,
      final DDF_ExpireYear year, final DDF_ExpireMonth month,
      final String strike, final DDF_Option indicator) {
    return null;
  }

  // TODO
  /**
   * New spread future.
   *
   * @param symbolArray the symbol array
   * @return the dD f_ symbol spread
   */
  public static final DDF_SymbolSpread<DDF_SymbolFuture> newSpreadFuture(
      final DDF_SymbolFuture... symbolArray) {
    return null;
  }

  // TODO
  /**
   * New spread option.
   *
   * @param symbolArray the symbol array
   * @return the dD f_ symbol spread
   */
  public static final DDF_SymbolSpread<DDF_SymbolOption> newSpreadOption(
      final DDF_SymbolOption... symbolArray) {
    return null;
  }

  // TODO
  /**
   * New index.
   *
   * @param symbolName the symbol name
   * @return the dD f_ symbol index
   */
  public static final DDF_SymbolIndex newIndex(final String symbolName) {
    return null;
  }

  // TODO
  /**
   * New equity.
   *
   * @param symbolName the symbol name
   * @return the dD f_ symbol equity
   */
  public static final DDF_SymbolEquity newEquity(final String symbolName) {
    return null;
  }

  /**
   * Find ddf.
   *
   * @param id the id
   * @return the dD f_ symbol
   */
  public static DDF_Symbol findDDF(final TextValue id) {
    // TODO Auto-generated method stub
    return null;
  }

}
TOP

Related Classes of com.barchart.feed.ddf.symbol.provider.DDF_SymbolService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.