/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.volatility.surface;
import java.util.Set;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.function.FunctionCompilationContext;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.engine.view.ViewCalculationConfiguration;
import com.opengamma.financial.property.StaticDefaultPropertyFunction;
/**
* Function to shift a volatility surface, implemented using properties and constraints.
*/
public class DefaultVolatilitySurfaceShiftFunction extends StaticDefaultPropertyFunction {
/**
* Property to shift all volatility surfaces.
*/
public static final String VOLATILITY_SURFACE_SHIFT = "VOLATILITY_SURFACE_" + VolatilitySurfaceShiftFunction.SHIFT;
public DefaultVolatilitySurfaceShiftFunction() {
super(ComputationTargetType.SECURITY, VolatilitySurfaceShiftFunction.SHIFT, false, ValueRequirementNames.VOLATILITY_SURFACE);
}
@Override
protected Set<String> getDefaultValue(FunctionCompilationContext context, ComputationTarget target, ValueRequirement desiredValue) {
final ViewCalculationConfiguration config = context.getViewCalculationConfiguration();
// TODO: should probably check the target type (or other properties) so that shifts can be applied more selectively than to all surfaces
if (config != null) {
return config.getDefaultProperties().getValues(VOLATILITY_SURFACE_SHIFT);
}
return null;
}
}