/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.convention.expirycalc; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; /** * Factory containing instances of {@code ExchangeTradedInstrumentExpiryCalculator}. */ public class ExchangeTradedInstrumentExpiryCalculatorFactory { /** Map containing the instances */ private static final BiMap<String, ExchangeTradedInstrumentExpiryCalculator> s_instances = HashBiMap.create(); //TODO this should be moved out so that calculators can be added more easily (as for the daycount factory) static { s_instances.put(BondFutureOptionExpiryCalculator.NAME, BondFutureOptionExpiryCalculator.getInstance()); s_instances.put(IMMFutureAndFutureOptionQuarterlyExpiryCalculator.NAME, IMMFutureAndFutureOptionQuarterlyExpiryCalculator.getInstance()); s_instances.put(IMMFutureAndFutureOptionMonthlyExpiryCalculator.NAME, IMMFutureAndFutureOptionMonthlyExpiryCalculator.getInstance()); s_instances.put(SoybeanFutureExpiryCalculator.NAME, SoybeanFutureExpiryCalculator.getInstance()); s_instances.put(SoybeanFutureOptionExpiryCalculator.NAME, SoybeanFutureOptionExpiryCalculator.getInstance()); s_instances.put(FedFundFutureAndFutureOptionMonthlyExpiryCalculator.NAME, FedFundFutureAndFutureOptionMonthlyExpiryCalculator.getInstance()); } /** * Gets the named calculator. * * @param name the name of the expiry calculator, not null * @return the calculator, not null * @throws IllegalArgumentException if the calculator was not found in the map */ public static ExchangeTradedInstrumentExpiryCalculator getCalculator(final String name) { final ExchangeTradedInstrumentExpiryCalculator calculator = s_instances.get(name); if (calculator != null) { return calculator; } throw new IllegalArgumentException("Could not get calculator called " + name); } }