Package com.opengamma.financial.security.lookup

Source Code of com.opengamma.financial.security.lookup.DefaultSecurityAttributeMappings

/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.security.lookup;

import static com.opengamma.financial.security.lookup.SecurityAttribute.DIRECTION;
import static com.opengamma.financial.security.lookup.SecurityAttribute.FLOAT_FREQUENCY;
import static com.opengamma.financial.security.lookup.SecurityAttribute.FREQUENCY;
import static com.opengamma.financial.security.lookup.SecurityAttribute.INDEX;
import static com.opengamma.financial.security.lookup.SecurityAttribute.MATURITY;
import static com.opengamma.financial.security.lookup.SecurityAttribute.PRODUCT;
import static com.opengamma.financial.security.lookup.SecurityAttribute.QUANTITY;
import static com.opengamma.financial.security.lookup.SecurityAttribute.RATE;
import static com.opengamma.financial.security.lookup.SecurityAttribute.START;
import static com.opengamma.financial.security.lookup.SecurityAttribute.TYPE;

import com.opengamma.financial.currency.CurrencyPair;
import com.opengamma.financial.currency.CurrencyPairs;
import com.opengamma.financial.currency.CurrencyUtils;
import com.opengamma.financial.security.bond.BondSecurity;
import com.opengamma.financial.security.bond.CorporateBondSecurity;
import com.opengamma.financial.security.bond.GovernmentBondSecurity;
import com.opengamma.financial.security.bond.MunicipalBondSecurity;
import com.opengamma.financial.security.capfloor.CapFloorCMSSpreadSecurity;
import com.opengamma.financial.security.capfloor.CapFloorSecurity;
import com.opengamma.financial.security.equity.EquitySecurity;
import com.opengamma.financial.security.equity.EquityVarianceSwapSecurity;
import com.opengamma.financial.security.forward.AgricultureForwardSecurity;
import com.opengamma.financial.security.forward.CommodityForwardSecurity;
import com.opengamma.financial.security.forward.EnergyForwardSecurity;
import com.opengamma.financial.security.forward.MetalForwardSecurity;
import com.opengamma.financial.security.fra.FRASecurity;
import com.opengamma.financial.security.future.AgricultureFutureSecurity;
import com.opengamma.financial.security.future.BondFutureSecurity;
import com.opengamma.financial.security.future.EnergyFutureSecurity;
import com.opengamma.financial.security.future.EquityFutureSecurity;
import com.opengamma.financial.security.future.EquityIndexDividendFutureSecurity;
import com.opengamma.financial.security.future.FXFutureSecurity;
import com.opengamma.financial.security.future.FederalFundsFutureSecurity;
import com.opengamma.financial.security.future.FutureSecurity;
import com.opengamma.financial.security.future.IndexFutureSecurity;
import com.opengamma.financial.security.future.InterestRateFutureSecurity;
import com.opengamma.financial.security.future.MetalFutureSecurity;
import com.opengamma.financial.security.future.StockFutureSecurity;
import com.opengamma.financial.security.fx.FXForwardSecurity;
import com.opengamma.financial.security.fx.NonDeliverableFXForwardSecurity;
import com.opengamma.financial.security.lookup.swap.SwapFloatFrequencyProvider;
import com.opengamma.financial.security.lookup.swap.SwapFrequencyProvider;
import com.opengamma.financial.security.lookup.swap.SwapIndexProvider;
import com.opengamma.financial.security.lookup.swap.SwapPayReceiveProvider;
import com.opengamma.financial.security.lookup.swap.SwapProductProvider;
import com.opengamma.financial.security.lookup.swap.SwapQuantityProvider;
import com.opengamma.financial.security.lookup.swap.SwapRateProvider;
import com.opengamma.financial.security.lookup.swap.SwapTypeProvider;
import com.opengamma.financial.security.option.BondFutureOptionSecurity;
import com.opengamma.financial.security.option.CommodityFutureOptionSecurity;
import com.opengamma.financial.security.option.EquityBarrierOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexOptionSecurity;
import com.opengamma.financial.security.option.EquityOptionSecurity;
import com.opengamma.financial.security.option.FXBarrierOptionSecurity;
import com.opengamma.financial.security.option.FXDigitalOptionSecurity;
import com.opengamma.financial.security.option.FXOptionSecurity;
import com.opengamma.financial.security.option.IRFutureOptionSecurity;
import com.opengamma.financial.security.option.NonDeliverableFXDigitalOptionSecurity;
import com.opengamma.financial.security.option.NonDeliverableFXOptionSecurity;
import com.opengamma.financial.security.option.SwaptionSecurity;
import com.opengamma.financial.security.swap.SwapSecurity;
import com.opengamma.master.security.ManageableSecurity;
import com.opengamma.util.money.Currency;

/**
* Configures a {@link SecurityAttributeMapper} with default mappings to
* fields on different security types.
*/
public final class DefaultSecurityAttributeMappings {

  private DefaultSecurityAttributeMappings() {
  }

  /**
   * Creates the default {@link SecurityAttributeMapper} instance using
   * a standard set of security mappings.
   * @param currencyPairs the {@link CurrencyPairs} config to use. Used for correct display of FX-type instrument fields.
   * @return the default {@link SecurityAttributeMapper}
   */
  public static SecurityAttributeMapper create(final CurrencyPairs currencyPairs) {
    SecurityAttributeMapper mapper = new SecurityAttributeMapper();

    mapBond(mapper);
    mapBondFutureOption(mapper);
    mapCommodityForward(mapper);
    mapCommodityFutureOption(mapper);
    mapCapFloor(mapper);
    mapCapFloorCMSSpread(mapper);
    mapFuture(mapper);
    mapIndexFuture(mapper);
    mapInterestRateFuture(mapper);
    mapIRFutureOption(mapper);
    mapFRA(mapper);
    mapSwap(mapper);
    mapSwaption(mapper);
    mapEquity(mapper);
    mapEquityOption(mapper);
    mapEquityIndexOption(mapper);
    mapEquityBarrierOption(mapper);
    mapEquityVarianceSwap(mapper);
    mapFXForward(mapper, currencyPairs);
    mapFXOption(mapper, currencyPairs);
    mapFXBarrierOption(mapper, currencyPairs);
    mapNonDeliverableFXDigitalOption(mapper, currencyPairs);
    mapNonDeliverableFXForward(mapper, currencyPairs);
    mapNonDeliverableFXOption(mapper, currencyPairs);
    mapFXDigitalOption(mapper, currencyPairs);

    // -------------------
    // fallback type name for securities that haven't been explicitly mapped
    mapper.mapColumn(TYPE, ManageableSecurity.class, new SecurityValueProvider<ManageableSecurity>() {
      @Override
      public Object getValue(ManageableSecurity security) {
        return security.getClass().getSimpleName();
      }
    });

    return mapper;
  }

  /**
   * Creates mappings for {@link FXDigitalOptionSecurity}
   * @param mapper the mapper instance to use
   * @param currencyPairs the {@link CurrencyPairs} config to use
   */
  private static void mapFXDigitalOption(SecurityAttributeMapper mapper, final CurrencyPairs currencyPairs) {
    // ------------------- FXDigitalOption
    mapper.mapColumn(TYPE, FXDigitalOptionSecurity.class, "FX Digital Option");
    mapper.mapColumn(MATURITY, FXDigitalOptionSecurity.meta().expiry());
    mapper.mapColumn(QUANTITY, FXDigitalOptionSecurity.class, new SecurityValueProvider<FXDigitalOptionSecurity>() {
      @Override
      public Object getValue(FXDigitalOptionSecurity security) {
        return FXAmounts.forOption(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            security.isLong(),
            currencyPairs);
      }
    });
    mapper.mapColumn(PRODUCT, FXDigitalOptionSecurity.class, new SecurityValueProvider<FXDigitalOptionSecurity>() {
      @Override
      public Object getValue(FXDigitalOptionSecurity security) {
        return currencyPairName(security.getPutCurrency(), security.getCallCurrency(), currencyPairs);
      }
    });
    mapper.mapColumn(RATE, FXDigitalOptionSecurity.class, new SecurityValueProvider<FXDigitalOptionSecurity>() {
      @Override
      public Object getValue(FXDigitalOptionSecurity security) {
        return CurrencyUtils.getRate(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            currencyPairs);
      }
    });
  }

  /**
   * Creates mappings for {@link NonDeliverableFXOptionSecurity}
   * @param mapper the mapper instance to use
   * @param currencyPairs the {@link CurrencyPairs} config to use
   */
  private static void mapNonDeliverableFXOption(SecurityAttributeMapper mapper, final CurrencyPairs currencyPairs) {
    // ------------------- NonDeliverableFXOption
    mapper.mapColumn(TYPE, NonDeliverableFXOptionSecurity.class, "Non-deliverable FX Option");
    mapper.mapColumn(MATURITY, NonDeliverableFXOptionSecurity.meta().expiry());
    mapper.mapColumn(QUANTITY, NonDeliverableFXOptionSecurity.class, new SecurityValueProvider<NonDeliverableFXOptionSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXOptionSecurity security) {
        return FXAmounts.forOption(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            security.isLong(),
            currencyPairs);
      }
    });
    mapper.mapColumn(PRODUCT, NonDeliverableFXOptionSecurity.class, new SecurityValueProvider<NonDeliverableFXOptionSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXOptionSecurity security) {
        return currencyPairName(security.getPutCurrency(), security.getCallCurrency(), currencyPairs);
      }
    });
    mapper.mapColumn(RATE, NonDeliverableFXOptionSecurity.class, new SecurityValueProvider<NonDeliverableFXOptionSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXOptionSecurity security) {
        return CurrencyUtils.getRate(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            currencyPairs);
      }
    });
  }

  /**
   * Creates mappings for {@link NonDeliverableFXForwardSecurity}
   * @param mapper the mapper instance to use
   * @param currencyPairs the {@link CurrencyPairs} config to use
   */
  private static void mapNonDeliverableFXForward(SecurityAttributeMapper mapper, final CurrencyPairs currencyPairs) {
    // ------------------- NonDeliverableFXForward
    mapper.mapColumn(TYPE, NonDeliverableFXForwardSecurity.class, "Non Deliverable FX Forward");
    mapper.mapColumn(MATURITY, NonDeliverableFXForwardSecurity.meta().forwardDate());
    mapper.mapColumn(PRODUCT, NonDeliverableFXForwardSecurity.class, new SecurityValueProvider<NonDeliverableFXForwardSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXForwardSecurity security) {
        return currencyPairName(security.getPayCurrency(), security.getReceiveCurrency(), currencyPairs);
      }
    });
    mapper.mapColumn(QUANTITY, NonDeliverableFXForwardSecurity.class, new SecurityValueProvider<NonDeliverableFXForwardSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXForwardSecurity security) {
        return FXAmounts.forForward(security.getPayCurrency(),
            security.getReceiveCurrency(),
            security.getPayAmount(),
            security.getReceiveAmount(),
            currencyPairs);
      }
    });
    mapper.mapColumn(RATE, NonDeliverableFXForwardSecurity.class, new SecurityValueProvider<NonDeliverableFXForwardSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXForwardSecurity security) {
        return CurrencyUtils.getRate(security.getPayCurrency(),
            security.getReceiveCurrency(),
            security.getPayAmount(),
            security.getReceiveAmount(),
            currencyPairs);
      }
    });
  }

  /**
   * Creates mappings for {@link NonDeliverableFXDigitalOptionSecurity}
   * @param mapper the mapper instance to use
   * @param currencyPairs the {@link CurrencyPairs} config to use
   */
  private static void mapNonDeliverableFXDigitalOption(SecurityAttributeMapper mapper, final CurrencyPairs currencyPairs) {
    // ------------------- NonDeliverableFXDigitalOption
    mapper.mapColumn(TYPE, NonDeliverableFXDigitalOptionSecurity.class, "Non Deliverable FX Digital Option");
    mapper.mapColumn(MATURITY, NonDeliverableFXDigitalOptionSecurity.meta().expiry());
    mapper.mapColumn(PRODUCT, NonDeliverableFXDigitalOptionSecurity.class, new SecurityValueProvider<NonDeliverableFXDigitalOptionSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXDigitalOptionSecurity security) {
        return currencyPairName(security.getPutCurrency(), security.getCallCurrency(), currencyPairs);
      }
    });
    mapper.mapColumn(QUANTITY, NonDeliverableFXDigitalOptionSecurity.class, new SecurityValueProvider<NonDeliverableFXDigitalOptionSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXDigitalOptionSecurity security) {
        return FXAmounts.forOption(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            security.isLong(),
            currencyPairs);
      }
    });
    mapper.mapColumn(RATE, NonDeliverableFXDigitalOptionSecurity.class, new SecurityValueProvider<NonDeliverableFXDigitalOptionSecurity>() {
      @Override
      public Object getValue(NonDeliverableFXDigitalOptionSecurity security) {
        return CurrencyUtils.getRate(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            currencyPairs);
      }
    });
  }

  /**
   * Creates mappings for {@link FXBarrierOptionSecurity}
   * @param mapper the mapper instance to use
   * @param currencyPairs the {@link CurrencyPairs} config to use
   */
  private static void mapFXBarrierOption(SecurityAttributeMapper mapper, final CurrencyPairs currencyPairs) {
    // ------------------- FXBarrierOption
    mapper.mapColumn(TYPE, FXBarrierOptionSecurity.class, "FX Barrier Option");
    mapper.mapColumn(MATURITY, FXBarrierOptionSecurity.meta().expiry());
    mapper.mapColumn(QUANTITY, FXBarrierOptionSecurity.class, new SecurityValueProvider<FXBarrierOptionSecurity>() {
      @Override
      public Object getValue(FXBarrierOptionSecurity security) {
        return FXAmounts.forOption(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            security.isLong(),
            currencyPairs);
      }
    });
    mapper.mapColumn(PRODUCT, FXBarrierOptionSecurity.class, new SecurityValueProvider<FXBarrierOptionSecurity>() {
      @Override
      public Object getValue(FXBarrierOptionSecurity security) {
        return currencyPairName(security.getPutCurrency(), security.getCallCurrency(), currencyPairs);
      }
    });
    mapper.mapColumn(RATE, FXBarrierOptionSecurity.class, new SecurityValueProvider<FXBarrierOptionSecurity>() {
      @Override
      public Object getValue(FXBarrierOptionSecurity security) {
        return CurrencyUtils.getRate(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            currencyPairs);
      }
    });
  }

  /**
   * Creates mappings for {@link FXOptionSecurity}
   * @param mapper the mapper instance to use
   * @param currencyPairs the {@link CurrencyPairs} config to use
   */
  private static void mapFXOption(SecurityAttributeMapper mapper, final CurrencyPairs currencyPairs) {
    // ------------------- FXOption
    mapper.mapColumn(TYPE, FXOptionSecurity.class, "FX Option");
    mapper.mapColumn(MATURITY, FXOptionSecurity.meta().expiry());
    mapper.mapColumn(PRODUCT, FXOptionSecurity.class, new SecurityValueProvider<FXOptionSecurity>() {
      @Override
      public Object getValue(FXOptionSecurity security) {
        CurrencyPair pair = currencyPairs.getCurrencyPair(security.getPutCurrency(), security.getCallCurrency());
        return pair.getBase() + "/" + pair.getCounter();
      }
    });
    mapper.mapColumn(QUANTITY, FXOptionSecurity.class, new SecurityValueProvider<FXOptionSecurity>() {
      @Override
      public FXAmounts getValue(FXOptionSecurity security) {
        return FXAmounts.forOption(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            security.isLong(),
            currencyPairs);
      }
    });
    mapper.mapColumn(RATE, FXOptionSecurity.class, new SecurityValueProvider<FXOptionSecurity>() {
      @Override
      public Object getValue(FXOptionSecurity security) {
        return CurrencyUtils.getRate(security.getPutCurrency(),
            security.getCallCurrency(),
            security.getPutAmount(),
            security.getCallAmount(),
            currencyPairs);
      }
    });
  }

  /**
   * Creates mappings for {@link FXForwardSecurity}
   * @param mapper the mapper instance to use
   * @param currencyPairs the {@link CurrencyPairs} config to use
   */
  private static void mapFXForward(SecurityAttributeMapper mapper, final CurrencyPairs currencyPairs) {
    // ------------------- FXForward
    mapper.mapColumn(TYPE, FXForwardSecurity.class, "FX Forward");
    mapper.mapColumn(MATURITY, FXForwardSecurity.meta().forwardDate());
    mapper.mapColumn(PRODUCT, FXForwardSecurity.class, new SecurityValueProvider<FXForwardSecurity>() {
      @Override
      public String getValue(FXForwardSecurity security) {
        return currencyPairName(security.getPayCurrency(), security.getReceiveCurrency(), currencyPairs);
      }
    });
    mapper.mapColumn(QUANTITY, FXForwardSecurity.class, new SecurityValueProvider<FXForwardSecurity>() {
      @Override
      public FXAmounts getValue(FXForwardSecurity security) {
        return FXAmounts.forForward(security.getPayCurrency(),
            security.getReceiveCurrency(),
            security.getPayAmount(),
            security.getReceiveAmount(),
            currencyPairs);
      }
    });
    mapper.mapColumn(RATE, FXForwardSecurity.class, new SecurityValueProvider<FXForwardSecurity>() {
      @Override
      public Double getValue(FXForwardSecurity security) {
        return CurrencyUtils.getRate(security.getPayCurrency(),
            security.getReceiveCurrency(),
            security.getPayAmount(),
            security.getReceiveAmount(),
            currencyPairs);
      }
    });
  }

  /**
   * Creates mappings for {@link EquityVarianceSwapSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapEquityVarianceSwap(SecurityAttributeMapper mapper) {
    // ------------------- EquityVarianceSwap
    mapper.mapColumn(TYPE, EquityVarianceSwapSecurity.class, "Equity Variance Swap");
    mapper.mapColumn(QUANTITY, EquityVarianceSwapSecurity.meta().notional());
  }

  /**
   * Creates mappings for {@link EquityBarrierOptionSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapEquityBarrierOption(SecurityAttributeMapper mapper) {
    // ------------------- EquityBarrierOption
    mapper.mapColumn(TYPE, EquityBarrierOptionSecurity.class, "Equity Barrier Option");
    mapper.mapColumn(RATE, EquityBarrierOptionSecurity.meta().strike());
    mapper.mapColumn(MATURITY, EquityBarrierOptionSecurity.meta().expiry());
    mapper.mapColumn(DIRECTION, EquityBarrierOptionSecurity.meta().optionType());
    mapper.mapColumn(PRODUCT, EquityBarrierOptionSecurity.class, new SecurityValueProvider<EquityBarrierOptionSecurity>() {
      @Override
      public Object getValue(EquityBarrierOptionSecurity security) {
        return security.getUnderlyingId().getValue();
      }
    });
  }

  /**
   * Creates mappings for {@link EquityIndexOptionSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapEquityIndexOption(SecurityAttributeMapper mapper) {
    // ------------------- EquityIndexOption
    mapper.mapColumn(TYPE, EquityIndexOptionSecurity.class, "Equity Index Option");
    mapper.mapColumn(RATE, EquityIndexOptionSecurity.meta().strike());
    mapper.mapColumn(MATURITY, EquityIndexOptionSecurity.meta().expiry());
    mapper.mapColumn(DIRECTION, EquityIndexOptionSecurity.meta().optionType());
    mapper.mapColumn(PRODUCT, EquityIndexOptionSecurity.class, new SecurityValueProvider<EquityIndexOptionSecurity>() {
      @Override
      public Object getValue(EquityIndexOptionSecurity security) {
        return security.getUnderlyingId().getValue();
      }
    });
  }

  /**
   * Creates mappings for {@link EquityOptionSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapEquityOption(SecurityAttributeMapper mapper) {
    // ------------------- EquityOption
    mapper.mapColumn(TYPE, EquityOptionSecurity.class, "Equity Option");
    mapper.mapColumn(RATE, EquityOptionSecurity.meta().strike());
    mapper.mapColumn(MATURITY, EquityOptionSecurity.meta().expiry());
    mapper.mapColumn(DIRECTION, EquityOptionSecurity.meta().optionType());
  }

  /**
   * Creates mappings for {@link EquitySecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapEquity(SecurityAttributeMapper mapper) {
    // ------------------- Equity
    mapper.mapColumn(TYPE, EquitySecurity.class, "Equity");
    mapper.mapColumn(PRODUCT, EquitySecurity.meta().companyName());
  }

  /**
   * Creates mappings for {@link SwaptionSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapSwaption(SecurityAttributeMapper mapper) {
    // ------------------- Swaption
    mapper.mapColumn(TYPE, SwaptionSecurity.class, "Swaption");
    mapper.mapColumn(MATURITY, SwaptionSecurity.meta().expiry());
    // TODO this is tricky - need the underlying swap. where can I store it?
    // TODO need a security link on swaption so the target can be resolved
    // otherwise I need a security source / master in the provider. and hit the DB to get the swap for every cell
    // TODO direction
    // TODO product
    // TODO start
    // TODO quantity
    // TODO frequency
    // TODO rate
    // TODO what about float freq?
  }

  /**
   * Creates mappings for {@link SwapSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapSwap(SecurityAttributeMapper mapper) {
    // ------------------- Swap
    mapper.mapColumn(TYPE, SwapSecurity.class, new SwapTypeProvider());
    mapper.mapColumn(PRODUCT, SwapSecurity.class, new SwapProductProvider());
    mapper.mapColumn(START, SwapSecurity.meta().effectiveDate());
    mapper.mapColumn(MATURITY, SwapSecurity.meta().maturityDate());
    mapper.mapColumn(FREQUENCY, SwapSecurity.class, new SwapFrequencyProvider());
    mapper.mapColumn(FLOAT_FREQUENCY, SwapSecurity.class, new SwapFloatFrequencyProvider());
    mapper.mapColumn(QUANTITY, SwapSecurity.class, new SwapQuantityProvider());
    mapper.mapColumn(INDEX, SwapSecurity.class, new SwapIndexProvider());
    mapper.mapColumn(RATE, SwapSecurity.class, new SwapRateProvider());
    mapper.mapColumn(DIRECTION, SwapSecurity.class, new SwapPayReceiveProvider());
  }

  /**
   * Creates mappings for {@link FRASecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapFRA(SecurityAttributeMapper mapper) {
    // ------------------- FRA
    mapper.mapColumn(TYPE, FRASecurity.class, "FRA");
    mapper.mapColumn(PRODUCT, FRASecurity.meta().currency());
    mapper.mapColumn(QUANTITY, FRASecurity.meta().amount());
    mapper.mapColumn(START, FRASecurity.meta().startDate());
    mapper.mapColumn(MATURITY, FRASecurity.meta().endDate());
    mapper.mapColumn(RATE, FRASecurity.meta().rate());
  }

  /**
   * Creates mappings for {@link IRFutureOptionSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapIRFutureOption(SecurityAttributeMapper mapper) {
    // ------------------- IRFutureOption
    mapper.mapColumn(TYPE, IRFutureOptionSecurity.class, "Interest Rate Future Option");
    mapper.mapColumn(MATURITY, IRFutureOptionSecurity.meta().expiry());
    mapper.mapColumn(RATE, IRFutureOptionSecurity.meta().strike());
    mapper.mapColumn(DIRECTION, IRFutureOptionSecurity.meta().optionType());
  }

  /**
   * Creates mappings for {@link InterestRateFutureSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapInterestRateFuture(SecurityAttributeMapper mapper) {
    // ------------------- InterestRateFuture
    mapper.mapColumn(TYPE, InterestRateFutureSecurity.class, "Interest Rate Future");
    mapper.mapColumn(PRODUCT, InterestRateFutureSecurity.meta().currency());
    mapper.mapColumn(INDEX, InterestRateFutureSecurity.class, new SecurityValueProvider<InterestRateFutureSecurity>() {
      @Override
      public Object getValue(InterestRateFutureSecurity security) {
        return security.getUnderlyingId().getValue();
      }
    });
  }

  /**
   * Creates mappings for {@link IndexFutureSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapIndexFuture(SecurityAttributeMapper mapper) {
    // ------------------- IndexFuture
    mapper.mapColumn(INDEX, IndexFutureSecurity.class, new SecurityValueProvider<IndexFutureSecurity>() {
      @Override
      public Object getValue(IndexFutureSecurity security) {
        return security.getUnderlyingId().getValue();
      }
    });
  }

  /**
   * Creates mappings for {@link FutureSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapFuture(SecurityAttributeMapper mapper) {
    // ------------------- Futures
    mapper.mapColumn(MATURITY, FutureSecurity.meta().expiry());
    mapper.mapColumn(QUANTITY, FutureSecurity.meta().unitAmount());
    mapper.mapColumn(PRODUCT, FutureSecurity.meta().contractCategory());
    mapper.mapColumn(TYPE, BondFutureSecurity.class, "Bond Future");
    mapper.mapColumn(TYPE, EnergyFutureSecurity.class, "Energy Future");
    mapper.mapColumn(TYPE, MetalFutureSecurity.class, "Metal Future");
    mapper.mapColumn(TYPE, AgricultureFutureSecurity.class, "Agriculture Future");
    mapper.mapColumn(TYPE, FXFutureSecurity.class, "FX Future");
    mapper.mapColumn(TYPE, StockFutureSecurity.class, "Stock Future");
    mapper.mapColumn(TYPE, IndexFutureSecurity.class, "Index Future");
    mapper.mapColumn(TYPE, EquityFutureSecurity.class, "Equity Future");
    mapper.mapColumn(TYPE, EquityIndexDividendFutureSecurity.class, "Equity Index Dividend Future");
    mapper.mapColumn(TYPE, FederalFundsFutureSecurity.class, "Federal Funds Future");
  }

  /**
   * Creates mappings for {@link CapFloorCMSSpreadSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapCapFloorCMSSpread(SecurityAttributeMapper mapper) {
    // ------------------- CapFloorCMSSpread
    mapper.mapColumn(TYPE, CapFloorCMSSpreadSecurity.class, "Cap/Floor CMS Spread");
    mapper.mapColumn(START, CapFloorCMSSpreadSecurity.meta().startDate());
    mapper.mapColumn(MATURITY, CapFloorCMSSpreadSecurity.meta().maturityDate());
    mapper.mapColumn(QUANTITY, CapFloorCMSSpreadSecurity.meta().notional());
    mapper.mapColumn(RATE, CapFloorCMSSpreadSecurity.meta().strike());
    mapper.mapColumn(FREQUENCY, CapFloorCMSSpreadSecurity.meta().frequency());
    mapper.mapColumn(PRODUCT, CapFloorCMSSpreadSecurity.class, new SecurityValueProvider<CapFloorCMSSpreadSecurity>() {
      @Override
      public Object getValue(CapFloorCMSSpreadSecurity security) {
        return security.getLongId().getValue() + "/" + security.getShortId().getValue();
      }
    });
  }

  /**
   * Creates mappings for {@link CapFloorSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapCapFloor(SecurityAttributeMapper mapper) {
    // ------------------- CapFloor
    mapper.mapColumn(TYPE, CapFloorSecurity.class, "Cap/Floor");
    mapper.mapColumn(QUANTITY, CapFloorSecurity.meta().notional());
    mapper.mapColumn(START, CapFloorSecurity.meta().startDate());
    mapper.mapColumn(MATURITY, CapFloorSecurity.meta().maturityDate());
    mapper.mapColumn(RATE, CapFloorSecurity.meta().strike());
    mapper.mapColumn(FREQUENCY, CapFloorSecurity.meta().frequency());
  }

  /**
   * Creates mappings for {@link CommodityFutureOptionSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapCommodityFutureOption(SecurityAttributeMapper mapper) {
    // ------------------- CommodityFutureOption
    mapper.mapColumn(TYPE, CommodityFutureOptionSecurity.class, "Commodity Future Option");
    mapper.mapColumn(MATURITY, CommodityFutureOptionSecurity.meta().expiry());
    mapper.mapColumn(RATE, CommodityFutureOptionSecurity.meta().strike());
    mapper.mapColumn(DIRECTION, CommodityFutureOptionSecurity.meta().optionType());
  }

  /**
   * Creates mappings for {@link CommodityForwardSecurity} type securities
   * @param mapper the mapper instance to use
   */
  private static void mapCommodityForward(SecurityAttributeMapper mapper) {
    // ------------------- CommodityForward
    mapper.mapColumn(TYPE, MetalForwardSecurity.class, "Metal Forward");
    mapper.mapColumn(TYPE, EnergyForwardSecurity.class, "Energy Forward");
    mapper.mapColumn(TYPE, AgricultureForwardSecurity.class, "Agriculture Forward");
    mapper.mapColumn(MATURITY, CommodityForwardSecurity.meta().expiry());
    mapper.mapColumn(QUANTITY, CommodityForwardSecurity.meta().unitAmount());
    mapper.mapColumn(PRODUCT, CommodityForwardSecurity.meta().contractCategory());
  }

  /**
   * Creates mappings for {@link BondFutureOptionSecurity}
   * @param mapper the mapper instance to use
   */
  private static void mapBondFutureOption(SecurityAttributeMapper mapper) {
    // ------------------- BondFutureOption
    mapper.mapColumn(TYPE, BondFutureOptionSecurity.class, "Bond Future Option");
    mapper.mapColumn(MATURITY, BondFutureOptionSecurity.meta().expiry());
    mapper.mapColumn(RATE, BondFutureOptionSecurity.meta().strike());
    mapper.mapColumn(DIRECTION, BondFutureOptionSecurity.meta().optionType());
  }

  /**
   * Creates mappings for {@link BondSecurity} type securities
   * @param mapper the mapper instance to use
   */
  private static void mapBond(SecurityAttributeMapper mapper) {
    // ------------------- Bond
    mapper.mapColumn(TYPE, GovernmentBondSecurity.class, "Government Bond");
    mapper.mapColumn(TYPE, CorporateBondSecurity.class, "Corporate Bond");
    mapper.mapColumn(TYPE, MunicipalBondSecurity.class, "Municipal Bond");
    mapper.mapColumn(PRODUCT, BondSecurity.meta().issuerName());
    mapper.mapColumn(RATE, BondSecurity.meta().couponRate());
    mapper.mapColumn(FREQUENCY, BondSecurity.meta().couponFrequency());
    mapper.mapColumn(START, BondSecurity.meta().firstCouponDate());
    mapper.mapColumn(MATURITY, BondSecurity.meta().settlementDate());
  }

  private static String currencyPairName(Currency payCurrency, Currency receiveCurrency, CurrencyPairs currencyPairs) {
    CurrencyPair pair = currencyPairs.getCurrencyPair(payCurrency, receiveCurrency);
    if (pair != null) {
      return pair.getName();
    } else {
      return payCurrency.getCode() + "/" + receiveCurrency.getCode();
    }
  }
}
TOP

Related Classes of com.opengamma.financial.security.lookup.DefaultSecurityAttributeMappings

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.