final Set<ValueRequirement> desiredValues) throws AsynchronousExecution {
final Clock snapshotClock = executionContext.getValuationClock();
final ZonedDateTime now = ZonedDateTime.now(snapshotClock).minusYears(3); //TODO remove me - just for testing
final ValueRequirement desiredValue = Iterables.getOnlyElement(desiredValues);
final EquityVarianceSwapSecurity security = (EquityVarianceSwapSecurity) target.getSecurity();
final EquityVarianceSwapDefinition definition = security.accept(getConverter());
final Object spotObject = inputs.getValue(MarketDataRequirementNames.MARKET_VALUE);
if (spotObject == null) {
throw new OpenGammaRuntimeException("Spot value was null");
}
final Object yieldCurveObject = inputs.getValue(ValueRequirementNames.YIELD_CURVE);
if (yieldCurveObject == null) {
throw new OpenGammaRuntimeException("Yield curve was null");
}
final Object dividendsObject = inputs.getValue(ValueRequirementNames.AFFINE_DIVIDENDS);
if (dividendsObject == null) {
throw new OpenGammaRuntimeException("Dividends were null");
}
final Object forwardCurveObject = inputs.getValue(ValueRequirementNames.FORWARD_CURVE);
if (forwardCurveObject == null) {
throw new OpenGammaRuntimeException("Forward curve was null");
}
final Object volatilitiesObject = inputs.getValue(ValueRequirementNames.STANDARD_VOLATILITY_SURFACE_DATA);
if (volatilitiesObject == null) {
throw new OpenGammaRuntimeException("Volatility data were null");
}
final Object tsObject = inputs.getValue(ValueRequirementNames.HISTORICAL_TIME_SERIES);
final double spot = (Double) spotObject;
final YieldAndDiscountCurve yieldCurve = (YieldAndDiscountCurve) yieldCurveObject;
final AffineDividends dividends = (AffineDividends) dividendsObject;
final SmileSurfaceDataBundle volatilities = getData(inputs);
final DoubleTimeSeries<LocalDate> underlyingTS = ((HistoricalTimeSeries) tsObject).getTimeSeries();
final EquityVarianceSwap swap = definition.toDerivative(now, underlyingTS);
final EquityVarianceSwapStaticReplicationPricer pricer = EquityVarianceSwapStaticReplicationPricer.builder().create(); //TODO don't just use defaults
final double pv = pricer.priceFromImpliedVols(swap, spot, yieldCurve, dividends, volatilities);
final ValueProperties properties = desiredValue.getConstraints().copy()
.withoutAny(ValuePropertyNames.FUNCTION).with(ValuePropertyNames.FUNCTION, getUniqueId()).get();
final ValueSpecification spec = new ValueSpecification(getValueRequirementName(), target.toSpecification(), properties);