package org.marketcetera.symbology; import org.marketcetera.core.ClassVersion; import org.skife.csv.CSVReader; import org.skife.csv.SimpleReader; import java.io.InputStream; import java.io.IOException; import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.*; /** * @author Graham Miller * @version $Id: Exchanges.java 16841 2014-02-20 19:59:04Z colin $ */ @ClassVersion("$Id: Exchanges.java 16841 2014-02-20 19:59:04Z colin $") public class Exchanges { private static Map<String, Exchange> micMap = new HashMap<String, Exchange>(); private static EnumMap<SymbolScheme, ExchangeMap> schemeMap = new EnumMap<SymbolScheme, ExchangeMap>(SymbolScheme.class); private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MMMM yyyy",Locale.US); //$NON-NLS-1$ static { try { loadExchanges(); } catch (Exception ex) { Messages.ERROR_EXCHANGES_INIT.error(Exchanges.class, ex); } } private static final String XASE_MIC = "XASE"; //$NON-NLS-1$ private static final String XBOS_MIC = "XBOS"; //$NON-NLS-1$ private static final String XCIS_MIC = "XCIS"; //$NON-NLS-1$ private static final String XISX_MIC = "XISX"; //$NON-NLS-1$ private static final String XCHI_MIC = "XCHI"; //$NON-NLS-1$ private static final String XNYS_MIC = "XNYS"; //$NON-NLS-1$ private static final String XARC_MIC = "XARC"; //$NON-NLS-1$ private static final String XNAS_MIC = "XNAS"; //$NON-NLS-1$ private static final String XPHL_MIC = "XPHL"; //$NON-NLS-1$ public static Exchange AMEX = micMap.get(XASE_MIC); public static Exchange BOSTON = micMap.get(XBOS_MIC); public static Exchange CINCINNATI = micMap.get(XCIS_MIC); public static Exchange ISE = micMap.get(XISX_MIC); public static Exchange CHICAGO = micMap.get(XCHI_MIC); public static Exchange NYSE = micMap.get(XNYS_MIC); public static Exchange ARCA = micMap.get(XARC_MIC); public static Exchange NASDAQ = micMap.get(XNAS_MIC); public static Exchange PHILADELPHIA = micMap.get(XPHL_MIC); //COUNTRY,CC,MIC,INSTITUTION DESCRIPTION,ACCR.,CITY,WEB SITE,Date added private static final int COUNTRY_COLUMN = 0; private static final int COUNTRY_CODE_COLUMN = 1; private static final int MIC_COLUMN = 2; private static final int INSTITUTION_NAME_COLUMN = 3; private static final int OTHER_ACRONYM_COLUMN = 4; private static final int CITY_COLUMN = 5; private static final int WEBSITE_COLUMN = 6; private static final int DATE_ADDED_COLUMN = 7; public static final String HYPERFEED_SCHEME = "HYPERFEED"; //$NON-NLS-1$ public static final String FIX_SCHEME = "FIX"; //$NON-NLS-1$ private static void loadExchanges() throws IOException, ParseException { CSVReader reader = new SimpleReader(); URL url = Exchanges.class.getClassLoader().getResource("iso-10383.csv"); //$NON-NLS-1$ InputStream in = url.openStream(); List<?> items = reader.parse(in); for (int i = 1; i < items.size(); i++) { String [] row = (String[]) items.get(i); if (row.length == 8) { Date addedDate; String dateString = row[DATE_ADDED_COLUMN]; addedDate = DATE_FORMAT.parse(dateString); //i18n_date Exchange anExchange = new Exchange( row[COUNTRY_COLUMN], row[COUNTRY_CODE_COLUMN], row[MIC_COLUMN], row[INSTITUTION_NAME_COLUMN], row[OTHER_ACRONYM_COLUMN], row[CITY_COLUMN], row[WEBSITE_COLUMN], addedDate); micMap.put(anExchange.getMarketIdentifierCode(), anExchange); } } PropertiesExchangeMap hfExchangeMap = new PropertiesExchangeMap("hyperfeed-exchanges.properties"); //$NON-NLS-1$ PropertiesExchangeMap basicExchangeMap = new PropertiesExchangeMap("basic-exchanges.properties"); //$NON-NLS-1$ schemeMap.put(SymbolScheme.HYPERFEED, hfExchangeMap); schemeMap.put(SymbolScheme.BASIC, basicExchangeMap); } public static Exchange getExchange(String marketIdentifierCode){ return micMap.get(marketIdentifierCode); } public static Exchange getExchange(SymbolScheme scheme, String exchangeString){ ExchangeMap exchangeMap = schemeMap.get(scheme); return exchangeMap==null ? null : exchangeMap.getExchange(exchangeString); } }