/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.riskfactor.option; import org.apache.commons.lang.NotImplementedException; import com.opengamma.analytics.financial.pnl.UnderlyingType; import com.opengamma.core.security.Security; import com.opengamma.core.value.MarketDataRequirementNames; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueRequirementNames; import com.opengamma.financial.security.equity.EquitySecurity; import com.opengamma.financial.security.option.EquityOptionSecurity; /** * Maps an underlying type. */ public class UnderlyingTypeToValueRequirementMapper { public static ValueRequirement getValueRequirement(final UnderlyingType underlying, final Security security) { if (security instanceof EquityOptionSecurity) { final EquityOptionSecurity option = (EquityOptionSecurity) security; switch (underlying) { case SPOT_PRICE: return new ValueRequirement(MarketDataRequirementNames.MARKET_VALUE, ComputationTargetType.SECURITY, option.getUnderlyingId()); case SPOT_VOLATILITY: throw new NotImplementedException("Don't know how to get spot volatility for " + option.getUniqueId()); case IMPLIED_VOLATILITY: throw new NotImplementedException("Don't know how to get implied volatility for " + option.getUniqueId()); case INTEREST_RATE: return new ValueRequirement(ValueRequirementNames.YIELD_CURVE, ComputationTargetType.SECURITY, option.getUniqueId()); case COST_OF_CARRY: throw new NotImplementedException("Don't know how to get cost of carry for " + option.getUniqueId()); default: throw new NotImplementedException("Don't know how to get ValueRequirement for " + underlying); } } else if (security instanceof EquitySecurity) { final EquitySecurity equity = (EquitySecurity) security; if (underlying == UnderlyingType.SPOT_PRICE) { return new ValueRequirement(MarketDataRequirementNames.MARKET_VALUE, ComputationTargetType.SECURITY, equity.getUniqueId()); } else { throw new NotImplementedException("Don't know how to get ValueRequirement for " + underlying); } } else { throw new NotImplementedException("Can only get ValueRequirements for EquityOptionSecurity and EquitySecurity. Was " + security + ")"); } } }