/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.greeks;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.opengamma.analytics.financial.greeks.Greek;
import com.opengamma.analytics.financial.sensitivity.PositionGreek;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueRequirementNames;
/**
*
*/
public class AvailablePositionGreeks {
private static final Map<String, PositionGreek> AVAILABLE_POSITION_GREEKS;
static {
AVAILABLE_POSITION_GREEKS = new HashMap<String, PositionGreek>();
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_FAIR_VALUE, new PositionGreek(Greek.FAIR_PRICE));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_DELTA, new PositionGreek(Greek.DELTA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_DELTA_BLEED, new PositionGreek(Greek.DELTA_BLEED));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_STRIKE_DELTA, new PositionGreek(Greek.STRIKE_DELTA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_DRIFTLESS_THETA, new PositionGreek(Greek.DRIFTLESS_THETA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_GAMMA, new PositionGreek(Greek.GAMMA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_GAMMA_P, new PositionGreek(Greek.GAMMA_P));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_STRIKE_GAMMA, new PositionGreek(Greek.STRIKE_GAMMA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_GAMMA_BLEED, new PositionGreek(Greek.GAMMA_BLEED));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_GAMMA_P_BLEED, new PositionGreek(Greek.GAMMA_P_BLEED));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VEGA, new PositionGreek(Greek.VEGA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VEGA_P, new PositionGreek(Greek.VEGA_P));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VARIANCE_VEGA, new PositionGreek(Greek.VARIANCE_VEGA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VEGA_BLEED, new PositionGreek(Greek.VEGA_BLEED));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_THETA, new PositionGreek(Greek.THETA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_RHO, new PositionGreek(Greek.RHO));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_CARRY_RHO, new PositionGreek(Greek.CARRY_RHO));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_ZETA, new PositionGreek(Greek.ZETA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_ZETA_BLEED, new PositionGreek(Greek.ZETA_BLEED));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_DZETA_DVOL, new PositionGreek(Greek.DZETA_DVOL));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_ELASTICITY, new PositionGreek(Greek.ELASTICITY));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_PHI, new PositionGreek(Greek.PHI));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_ZOMMA, new PositionGreek(Greek.ZOMMA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_ZOMMA_P, new PositionGreek(Greek.ZOMMA_P));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_ULTIMA, new PositionGreek(Greek.ULTIMA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VARIANCE_ULTIMA, new PositionGreek(Greek.VARIANCE_ULTIMA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_SPEED, new PositionGreek(Greek.SPEED));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_SPEED_P, new PositionGreek(Greek.SPEED_P));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VANNA, new PositionGreek(Greek.VANNA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VARIANCE_VANNA, new PositionGreek(Greek.VARIANCE_VANNA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_DVANNA_DVOL, new PositionGreek(Greek.DVANNA_DVOL));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VOMMA, new PositionGreek(Greek.VOMMA));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VOMMA_P, new PositionGreek(Greek.VOMMA_P));
AVAILABLE_POSITION_GREEKS.put(ValueRequirementNames.POSITION_VARIANCE_VOMMA, new PositionGreek(Greek.VARIANCE_VOMMA));
}
public static PositionGreek getPositionGreekForValueRequirementName(final String valueName) {
if (!AVAILABLE_POSITION_GREEKS.containsKey(valueName)) {
throw new IllegalArgumentException("Could not get position greek for ValueRequirementName " + valueName);
}
return AVAILABLE_POSITION_GREEKS.get(valueName);
}
public static PositionGreek getPositionGreekForValueRequirement(final ValueRequirement requirement) {
final String greekName = requirement.getValueName();
if (!AVAILABLE_POSITION_GREEKS.containsKey(greekName)) {
throw new IllegalArgumentException("Could not get position greek for ValueRequirement " + requirement.toString());
}
return AVAILABLE_POSITION_GREEKS.get(greekName);
}
public static Set<String> getAllPositionGreekNames() {
return AVAILABLE_POSITION_GREEKS.keySet();
}
public static Map<String, PositionGreek> getAllpositionGreekNamesAndPositionGreeks() {
return AVAILABLE_POSITION_GREEKS;
}
}