/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.security; import com.opengamma.core.security.Security; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.function.FunctionCompilationContext; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.target.digest.SecurityTypeTargetDigests; import com.opengamma.engine.target.digest.TargetDigests; import com.opengamma.financial.security.bond.BillSecurity; import com.opengamma.financial.security.bond.CorporateBondSecurity; import com.opengamma.financial.security.bond.FloatingRateNoteSecurity; import com.opengamma.financial.security.bond.GovernmentBondSecurity; import com.opengamma.financial.security.bond.InflationBondSecurity; 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.cash.CashBalanceSecurity; import com.opengamma.financial.security.cash.CashSecurity; import com.opengamma.financial.security.cashflow.CashFlowSecurity; import com.opengamma.financial.security.cds.CDSSecurity; import com.opengamma.financial.security.cds.CreditDefaultSwapIndexDefinitionSecurity; import com.opengamma.financial.security.cds.CreditDefaultSwapIndexSecurity; import com.opengamma.financial.security.cds.LegacyFixedRecoveryCDSSecurity; import com.opengamma.financial.security.cds.LegacyRecoveryLockCDSSecurity; import com.opengamma.financial.security.cds.LegacyVanillaCDSSecurity; import com.opengamma.financial.security.cds.StandardFixedRecoveryCDSSecurity; import com.opengamma.financial.security.cds.StandardRecoveryLockCDSSecurity; import com.opengamma.financial.security.cds.StandardVanillaCDSSecurity; import com.opengamma.financial.security.credit.IndexCDSDefinitionSecurity; import com.opengamma.financial.security.credit.IndexCDSSecurity; import com.opengamma.financial.security.credit.LegacyCDSSecurity; import com.opengamma.financial.security.credit.StandardCDSSecurity; import com.opengamma.financial.security.deposit.ContinuousZeroDepositSecurity; import com.opengamma.financial.security.deposit.PeriodicZeroDepositSecurity; import com.opengamma.financial.security.deposit.SimpleZeroDepositSecurity; import com.opengamma.financial.security.equity.AmericanDepositaryReceiptSecurity; import com.opengamma.financial.security.equity.EquitySecurity; import com.opengamma.financial.security.equity.EquityVarianceSwapSecurity; import com.opengamma.financial.security.equity.ExchangeTradedFundSecurity; import com.opengamma.financial.security.forward.AgricultureForwardSecurity; 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.fra.ForwardRateAgreementSecurity; import com.opengamma.financial.security.future.AgricultureFutureSecurity; import com.opengamma.financial.security.future.BondFutureSecurity; import com.opengamma.financial.security.future.DeliverableSwapFutureSecurity; 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.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.FXVolatilitySwapSecurity; import com.opengamma.financial.security.fx.NonDeliverableFXForwardSecurity; import com.opengamma.financial.security.irs.InterestRateSwapSecurity; import com.opengamma.financial.security.option.BondFutureOptionSecurity; import com.opengamma.financial.security.option.CommodityFutureOptionSecurity; import com.opengamma.financial.security.option.CreditDefaultSwapOptionSecurity; import com.opengamma.financial.security.option.EquityBarrierOptionSecurity; import com.opengamma.financial.security.option.EquityIndexDividendFutureOptionSecurity; import com.opengamma.financial.security.option.EquityIndexFutureOptionSecurity; import com.opengamma.financial.security.option.EquityIndexOptionSecurity; import com.opengamma.financial.security.option.EquityOptionSecurity; import com.opengamma.financial.security.option.EquityWarrantSecurity; 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.FxFutureOptionSecurity; 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.BillTotalReturnSwapSecurity; import com.opengamma.financial.security.swap.BondTotalReturnSwapSecurity; import com.opengamma.financial.security.swap.CommodityNotional; import com.opengamma.financial.security.swap.EquityTotalReturnSwapSecurity; import com.opengamma.financial.security.swap.ForwardSwapSecurity; import com.opengamma.financial.security.swap.InterestRateNotional; import com.opengamma.financial.security.swap.NotionalVisitor; import com.opengamma.financial.security.swap.SecurityNotional; import com.opengamma.financial.security.swap.SwapSecurity; import com.opengamma.financial.security.swap.VarianceSwapNotional; import com.opengamma.financial.security.swap.YearOnYearInflationSwapSecurity; import com.opengamma.financial.security.swap.ZeroCouponInflationSwapSecurity; /** * Extension to the basic target digests from OG-Engine that supplements the digest with the instrument's currency. This is based on the observation that many of the default constraints are configured * with per-currency information. * <p> * Note that this is not currently appropriate for use alongside some of the default value injecting functions, for example the ones that pick identifiers out of the calculation configuration and * inject constraints based on those. */ public class FinancialSecurityTargetDigests extends SecurityTypeTargetDigests implements FinancialSecurityVisitor<Object>, NotionalVisitor<Object> { // TODO: Should items with an exchange use that in the digest too to capture the per-exchange default constraints? // TODO: Fix for the classes of functions that do behave differently (or suppress the logic if items are in the calculation configuration that drive those functions) private final MapImpl<Object, Digests> _pairs = new MapImpl<Object, Digests>() { @Override protected Digests createValue(final Object key) { return new Digests(key); } }; public FinancialSecurityTargetDigests() { addHandler(ComputationTargetType.CURRENCY, new TargetDigests() { @Override public Object getDigest(final FunctionCompilationContext context, final ComputationTargetSpecification targetSpec) { return targetSpec.getUniqueId().getValue(); } }); } protected Object pair(final Object a, final Object b) { if (b == null) { return null; } final Digests digests = _pairs.get(a); if (digests != null) { return digests.get(b); } else { return null; } } // SecurityTypeTargetDigests @Override protected Object getSecurityDigest(final Security security) { if (security instanceof FinancialSecurity) { return ((FinancialSecurity) security).accept(this); } else { return super.getSecurityDigest(security); } } // FinancialSecurityVisitor private final Digests _deliverableSwapFutureSecurity = new Digests("DeliverableSwapFutureSecurity"); @Override public Object visitDeliverableSwapFutureSecurity(final DeliverableSwapFutureSecurity security) { return _deliverableSwapFutureSecurity.get(security.getCurrency()); } private final Digests _energyForwardSecurity = new Digests("EnergyForwardSecurity"); @Override public Object visitEnergyForwardSecurity(final EnergyForwardSecurity security) { return _energyForwardSecurity.get(security.getCurrency()); } private final Digests _agricultureForwardSecurity = new Digests("AgricultureForwardSecurity"); @Override public Object visitAgricultureForwardSecurity(final AgricultureForwardSecurity security) { return _agricultureForwardSecurity.get(security.getCurrency()); } private final Digests _metalForwardSecurity = new Digests("MetalForwardSecurity"); @Override public Object visitMetalForwardSecurity(final MetalForwardSecurity security) { return _metalForwardSecurity.get(security.getCurrency()); } private final Digests _cdsSecurity = new Digests("CDSSecurity"); @Override public Object visitCDSSecurity(final CDSSecurity security) { return _cdsSecurity.get(security.getCurrency()); } private final Digests _standardVanillaCDSSecurity = new Digests("Security"); @Override public Object visitStandardVanillaCDSSecurity(final StandardVanillaCDSSecurity security) { return _standardVanillaCDSSecurity.get(security.getNotional().getCurrency()); } private final Digests _standardFixedRecoveryCDSSecurity = new Digests("Security"); @Override public Object visitStandardFixedRecoveryCDSSecurity(final StandardFixedRecoveryCDSSecurity security) { return _standardFixedRecoveryCDSSecurity.get(security.getNotional().getCurrency()); } private final Digests _standardRecoveryLockCDSSecurity = new Digests("Security"); @Override public Object visitStandardRecoveryLockCDSSecurity(final StandardRecoveryLockCDSSecurity security) { return _standardRecoveryLockCDSSecurity.get(security.getNotional().getCurrency()); } private final Digests _legacyVanillaCDSSecurity = new Digests("Security"); @Override public Object visitLegacyVanillaCDSSecurity(final LegacyVanillaCDSSecurity security) { return _legacyVanillaCDSSecurity.get(security.getNotional().getCurrency()); } private final Digests _legacyFixedRecoveryCDSSecurity = new Digests("Security"); @Override public Object visitLegacyFixedRecoveryCDSSecurity(final LegacyFixedRecoveryCDSSecurity security) { return _legacyFixedRecoveryCDSSecurity.get(security.getNotional().getCurrency()); } private final Digests _legacyRecoveryLockCDSSecurity = new Digests("Security"); @Override public Object visitLegacyRecoveryLockCDSSecurity(final LegacyRecoveryLockCDSSecurity security) { return _legacyRecoveryLockCDSSecurity.get(security.getNotional().getCurrency()); } private final Digests _creditDefaultSwapIndexDefinitionSecurity = new Digests("Security"); @Override public Object visitCreditDefaultSwapIndexDefinitionSecurity(final CreditDefaultSwapIndexDefinitionSecurity security) { return _creditDefaultSwapIndexDefinitionSecurity.get(security.getCurrency()); } private final Digests _creditDefaultSwapIndexSecurity = new Digests("Security"); @Override public Object visitCreditDefaultSwapIndexSecurity(final CreditDefaultSwapIndexSecurity security) { return _creditDefaultSwapIndexSecurity.get(security.getNotional().getCurrency()); } private final Digests _creditDefaultSwapOptionSecurity = new Digests("Security"); @Override public Object visitCreditDefaultSwapOptionSecurity(final CreditDefaultSwapOptionSecurity security) { return _creditDefaultSwapOptionSecurity.get(security.getCurrency()); } private final Digests _agricultureFutureSecurity = new Digests("Security"); @Override public Object visitAgricultureFutureSecurity(final AgricultureFutureSecurity security) { return _agricultureFutureSecurity.get(security.getCurrency()); } private final Digests _bondFutureSecurity = new Digests("Security"); @Override public Object visitBondFutureSecurity(final BondFutureSecurity security) { return _bondFutureSecurity.get(security.getCurrency()); } private final Digests _equityIndexDividendFutureSecurity = new Digests("Security"); @Override public Object visitEquityIndexDividendFutureSecurity(final EquityIndexDividendFutureSecurity security) { return _equityIndexDividendFutureSecurity.get(security.getCurrency()); } private final Digests _fxFutureSecurity = new Digests("Security"); @Override public Object visitFXFutureSecurity(final FXFutureSecurity security) { return _fxFutureSecurity.get(security.getCurrency()); } private final Digests _stockFutureSecurity = new Digests("Security"); @Override public Object visitStockFutureSecurity(final StockFutureSecurity security) { return _stockFutureSecurity.get(security.getCurrency()); } private final Digests _equityFutureSecurity = new Digests("Security"); @Override public Object visitEquityFutureSecurity(final EquityFutureSecurity security) { return _equityFutureSecurity.get(security.getCurrency()); } private final Digests _energyFutureSecurity = new Digests("Security"); @Override public Object visitEnergyFutureSecurity(final EnergyFutureSecurity security) { return _energyFutureSecurity.get(security.getCurrency()); } private final Digests _indexFutureSecurity = new Digests("Security"); @Override public Object visitIndexFutureSecurity(final IndexFutureSecurity security) { return _indexFutureSecurity.get(security.getCurrency()); } private final Digests _interestRateFutureSecurity = new Digests("Security"); @Override public Object visitInterestRateFutureSecurity(final InterestRateFutureSecurity security) { return _interestRateFutureSecurity.get(security.getCurrency()); } private final Digests _federalFundsFutureSecurity = new Digests("Security"); @Override public Object visitFederalFundsFutureSecurity(final FederalFundsFutureSecurity security) { return _federalFundsFutureSecurity.get(security.getCurrency()); } private final Digests _metalFutureSecurity = new Digests("Security"); @Override public Object visitMetalFutureSecurity(final MetalFutureSecurity security) { return _metalFutureSecurity.get(security.getCurrency()); } private final Digests _capFloorCMSSpreadSecurity = new Digests("Security"); @Override public Object visitCapFloorCMSSpreadSecurity(final CapFloorCMSSpreadSecurity security) { return _capFloorCMSSpreadSecurity.get(security.getCurrency()); } private final Digests _capFloorSecurity = new Digests("Security"); @Override public Object visitCapFloorSecurity(final CapFloorSecurity security) { return _capFloorSecurity.get(security.getCurrency()); } private final Digests _cashBalanceSecurity = new Digests("Security"); @Override public Object visitCashBalanceSecurity(final CashBalanceSecurity security) { return _cashBalanceSecurity.get(security.getCurrency()); } private final Digests _cashSecurity = new Digests("Security"); @Override public Object visitCashSecurity(final CashSecurity security) { return _cashSecurity.get(security.getCurrency()); } private final Digests _cashFlowSecurity = new Digests("Security"); @Override public Object visitCashFlowSecurity(final CashFlowSecurity security) { return _cashFlowSecurity.get(security.getCurrency()); } private final Digests _commodityFutureOptionSecurity = new Digests("Security"); @Override public Object visitCommodityFutureOptionSecurity(final CommodityFutureOptionSecurity security) { return _commodityFutureOptionSecurity.get(security.getCurrency()); } private final Digests _fxFutureOptionSecurity = new Digests("Security"); @Override public Object visitFxFutureOptionSecurity(final FxFutureOptionSecurity security) { return _fxFutureOptionSecurity.get(security.getCurrency()); } private final Digests _bondFutureOptionSecurity = new Digests("Security"); @Override public Object visitBondFutureOptionSecurity(final BondFutureOptionSecurity security) { return _bondFutureOptionSecurity.get(security.getCurrency()); } private final Digests _continuousZeroDepositSecurity = new Digests("Security"); @Override public Object visitContinuousZeroDepositSecurity(final ContinuousZeroDepositSecurity security) { return _continuousZeroDepositSecurity.get(security.getCurrency()); } private final Digests _corporateBondSecurity = new Digests("Security"); @Override public Object visitCorporateBondSecurity(final CorporateBondSecurity security) { return _corporateBondSecurity.get(security.getCurrency()); } private final Digests _equityBarrierOptionSecurity = new Digests("Security"); @Override public Object visitEquityBarrierOptionSecurity(final EquityBarrierOptionSecurity security) { return _equityBarrierOptionSecurity.get(security.getCurrency()); } private final Digests _equityIndexDividendFutureOptionSecurity = new Digests("Security"); @Override public Object visitEquityIndexDividendFutureOptionSecurity(final EquityIndexDividendFutureOptionSecurity security) { return _equityIndexDividendFutureOptionSecurity.get(security.getCurrency()); } private final Digests _equityIndexFutureOptionSecurity = new Digests("Security"); @Override public Object visitEquityIndexFutureOptionSecurity(final EquityIndexFutureOptionSecurity security) { return _equityIndexFutureOptionSecurity.get(security.getCurrency()); } private final Digests _equityIndexOptionSecurity = new Digests("Security"); @Override public Object visitEquityIndexOptionSecurity(final EquityIndexOptionSecurity security) { return _equityIndexOptionSecurity.get(security.getCurrency()); } private final Digests _equityOptionSecurity = new Digests("Security"); @Override public Object visitEquityOptionSecurity(final EquityOptionSecurity security) { return _equityOptionSecurity.get(security.getCurrency()); } private final Digests _equitySecurity = new Digests("Security"); @Override public Object visitEquitySecurity(final EquitySecurity security) { return _equitySecurity.get(security.getCurrency()); } private final Digests _equityVarianceSwapSecurity = new Digests("Security"); @Override public Object visitEquityVarianceSwapSecurity(final EquityVarianceSwapSecurity security) { return _equityVarianceSwapSecurity.get(security.getCurrency()); } private final Digests _fraSecurity = new Digests("Security"); @Override public Object visitFRASecurity(final FRASecurity security) { return _fraSecurity.get(security.getCurrency()); } private final Digests _forwardRateAgreementSecurity = new Digests("Security"); @Override public Object visitForwardRateAgreementSecurity(final ForwardRateAgreementSecurity security) { return _forwardRateAgreementSecurity.get(security.getCurrency()); } private final Digests _fxBarrierOptionSecurity = new Digests("Security"); @Override public Object visitFXBarrierOptionSecurity(final FXBarrierOptionSecurity security) { return _fxBarrierOptionSecurity.get(pair(security.getPutCurrency(), security.getCallCurrency())); } private final Digests _fxDigitalSecurity = new Digests("Security"); @Override public Object visitFXDigitalOptionSecurity(final FXDigitalOptionSecurity security) { return _fxDigitalSecurity.get(pair(security.getPutCurrency(), security.getCallCurrency())); } private final Digests _fxForwardSecurity = new Digests("Security"); @Override public Object visitFXForwardSecurity(final FXForwardSecurity security) { return _fxForwardSecurity.get(pair(security.getPayCurrency(), security.getReceiveCurrency())); } private final Digests _fxOptionSecurity = new Digests("Security"); @Override public Object visitFXOptionSecurity(final FXOptionSecurity security) { return _fxOptionSecurity.get(pair(security.getPutCurrency(), security.getCallCurrency())); } private final Digests _forwardSwapSecurity = new Digests("Security"); @Override public Object visitForwardSwapSecurity(final ForwardSwapSecurity security) { return _forwardSwapSecurity.get(pair(security.getPayLeg().getNotional().accept(this), security.getReceiveLeg().getNotional().accept(this))); } private final Digests _billSecurity = new Digests("Security"); @Override public Object visitBillSecurity(final BillSecurity security) { return _billSecurity.get(security.getCurrency()); } private final Digests _governmentBondSecurity = new Digests("Security"); @Override public Object visitGovernmentBondSecurity(final GovernmentBondSecurity security) { return _governmentBondSecurity.get(security.getCurrency()); } private final Digests _irFutureOptionSecurity = new Digests("Security"); @Override public Object visitIRFutureOptionSecurity(final IRFutureOptionSecurity security) { return _irFutureOptionSecurity.get(security.getCurrency()); } private final Digests _municipalBondSecurity = new Digests("Security"); @Override public Object visitMunicipalBondSecurity(final MunicipalBondSecurity security) { return _municipalBondSecurity.get(security.getCurrency()); } private final Digests _inflationBondSecurity = new Digests("Security"); @Override public Object visitInflationBondSecurity(final InflationBondSecurity security) { return _inflationBondSecurity.get(security.getCurrency()); } private final Digests _nonDeliverableFXDigitalOptionSecurity = new Digests("Security"); @Override public Object visitNonDeliverableFXDigitalOptionSecurity(final NonDeliverableFXDigitalOptionSecurity security) { return _nonDeliverableFXDigitalOptionSecurity.get(pair(security.getPutCurrency(), security.getCallCurrency())); } private final Digests _nonDeliverableFXForwardSecurity = new Digests("Security"); @Override public Object visitNonDeliverableFXForwardSecurity(final NonDeliverableFXForwardSecurity security) { return _nonDeliverableFXForwardSecurity.get(pair(security.getPayCurrency(), security.getReceiveCurrency())); } private final Digests _nonDeliverableFXOptionSecurity = new Digests("Security"); @Override public Object visitNonDeliverableFXOptionSecurity(final NonDeliverableFXOptionSecurity security) { return _nonDeliverableFXOptionSecurity.get(pair(security.getPutCurrency(), security.getCallCurrency())); } private final Digests _periodicZeroDepositSecurity = new Digests("Security"); @Override public Object visitPeriodicZeroDepositSecurity(final PeriodicZeroDepositSecurity security) { return _periodicZeroDepositSecurity.get(security.getCurrency()); } private final Digests _simpleZeroDepositSecurity = new Digests("Security"); @Override public Object visitSimpleZeroDepositSecurity(final SimpleZeroDepositSecurity security) { return _simpleZeroDepositSecurity.get(security.getCurrency()); } private final Digests _swapSecurity = new Digests("Security"); @Override public Object visitSwapSecurity(final SwapSecurity security) { return _swapSecurity.get(pair(security.getPayLeg().getNotional().accept(this), security.getReceiveLeg().getNotional().accept(this))); } @Override public Object visitInterestRateSwapSecurity(final InterestRateSwapSecurity security) { return _swapSecurity.get(pair(security.getPayLeg().getNotional().accept(this), security.getReceiveLeg().getNotional().accept(this))); } private final Digests _swaptionSecurity = new Digests("Security"); @Override public Object visitSwaptionSecurity(final SwaptionSecurity security) { return _swaptionSecurity.get(security.getCurrency()); } private final Digests _fxVolatilitySwapSecurity = new Digests("Security"); @Override public Object visitFXVolatilitySwapSecurity(final FXVolatilitySwapSecurity security) { return _fxVolatilitySwapSecurity.get(security.getCurrency()); } private final Digests _floatingRateNoteSecurity = new Digests("Security"); @Override public Object visitFloatingRateNoteSecurity(final FloatingRateNoteSecurity security) { return _floatingRateNoteSecurity.get(security.getCurrency()); } private final Digests _equityTRSSecurity = new Digests("Security"); @Override public Object visitEquityTotalReturnSwapSecurity(final EquityTotalReturnSwapSecurity security) { return _equityTRSSecurity.get(pair(security.getNotionalCurrency(), security.getFundingLeg().getNotional().accept(this))); } private final Digests _bondTRSSecurity = new Digests("Security"); @Override public Object visitBondTotalReturnSwapSecurity(final BondTotalReturnSwapSecurity security) { return _bondTRSSecurity.get(pair(security.getNotionalCurrency(), security.getFundingLeg().getNotional().accept(this))); } private final Digests _billTRSSecurity = new Digests("Security"); @Override public Object visitBillTotalReturnSwapSecurity(BillTotalReturnSwapSecurity security) { return _billTRSSecurity.get(pair(security.getNotionalCurrency(), security.getFundingLeg().getNotional().accept(this))); } private final Digests _standardCDSSecurity = new Digests("Security"); @Override public Object visitStandardCDSSecurity(StandardCDSSecurity security) { return _standardCDSSecurity.get(security.getNotional().accept(this)); } private final Digests _legacyCDSSecurity = new Digests("Security"); @Override public Object visitLegacyCDSSecurity(LegacyCDSSecurity security) { return _legacyCDSSecurity.get(security.getNotional().accept(this)); } private final Digests _indexCDSSecurity = new Digests("Security"); @Override public Object visitIndexCDSSecurity(IndexCDSSecurity security) { return _indexCDSSecurity.get(security.getNotional().accept(this)); } private final Digests _indexCDSDefSecurity = new Digests("Security"); @Override public Object visitIndexCDSDefinitionSecurity(IndexCDSDefinitionSecurity security) { return _indexCDSDefSecurity.get(security.getCurrency()); } // NotionalVisitor @Override public Object visitCommodityNotional(final CommodityNotional notional) { return null; } @Override public Object visitInterestRateNotional(final InterestRateNotional notional) { return notional.getCurrency(); } @Override public Object visitSecurityNotional(final SecurityNotional notional) { return null; } @Override public Object visitVarianceSwapNotional(final VarianceSwapNotional notional) { return notional.getCurrency(); } @Override public Object visitZeroCouponInflationSwapSecurity(final ZeroCouponInflationSwapSecurity security) { throw new UnsupportedOperationException("Cannot handle zero coupon inflation swap securities"); } @Override public Object visitYearOnYearInflationSwapSecurity(final YearOnYearInflationSwapSecurity security) { throw new UnsupportedOperationException("Cannot handle year-on-year inflation swap securities"); } @Override public Object visitExchangeTradedFundSecurity(final ExchangeTradedFundSecurity security) { throw new UnsupportedOperationException("Cannot handle exchange traded fund securities"); } @Override public Object visitAmericanDepositaryReceiptSecurity(final AmericanDepositaryReceiptSecurity security) { throw new UnsupportedOperationException("Cannot handle ADR securities"); } @Override public Object visitEquityWarrantSecurity(final EquityWarrantSecurity security) { throw new UnsupportedOperationException("Cannot handle equity warrant securities"); } }