/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.marketdatasnapshot;
import static com.opengamma.engine.value.SurfaceAndCubePropertyNames.PROPERTY_CUBE_DEFINITION;
import static com.opengamma.engine.value.SurfaceAndCubePropertyNames.PROPERTY_CUBE_QUOTE_TYPE;
import static com.opengamma.engine.value.SurfaceAndCubePropertyNames.PROPERTY_CUBE_SPECIFICATION;
import static com.opengamma.engine.value.SurfaceAndCubePropertyNames.PROPERTY_CUBE_UNITS;
import java.util.HashMap;
import java.util.Map;
import com.opengamma.core.marketdatasnapshot.ValueSnapshot;
import com.opengamma.core.marketdatasnapshot.VolatilityCubeData;
import com.opengamma.core.marketdatasnapshot.VolatilityCubeKey;
import com.opengamma.core.marketdatasnapshot.VolatilityCubeSnapshot;
import com.opengamma.core.marketdatasnapshot.impl.ManageableVolatilityCubeSnapshot;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.engine.view.ViewComputationResultModel;
import com.opengamma.util.tuple.Triple;
/**
* Create a structured snapshot of {@link VolatilityCubeData}.
*/
public class VolatilityCubeSnapper extends StructuredSnapper<VolatilityCubeKey, VolatilityCubeData<Object, Object, Object>, VolatilityCubeSnapshot> {
/**
* Sets the requirement name to {@link ValueRequirementNames#VOLATILITY_CUBE_MARKET_DATA}
*/
public VolatilityCubeSnapper() {
super(ValueRequirementNames.VOLATILITY_CUBE_MARKET_DATA);
}
@Override
VolatilityCubeKey getKey(final ValueSpecification spec) {
final String definition = getSingleProperty(spec, PROPERTY_CUBE_DEFINITION);
final String specification = getSingleProperty(spec, PROPERTY_CUBE_SPECIFICATION);
final String quoteType = getSingleProperty(spec, PROPERTY_CUBE_QUOTE_TYPE);
final String quoteUnits = getSingleProperty(spec, PROPERTY_CUBE_UNITS);
return VolatilityCubeKey.of(definition, specification, quoteType, quoteUnits);
}
@Override
VolatilityCubeSnapshot buildSnapshot(final ViewComputationResultModel resultModel, final VolatilityCubeKey key, final VolatilityCubeData<Object, Object, Object> volatilityCubeData) {
final Map<Triple<Object, Object, Object>, ValueSnapshot> dict = new HashMap<>();
for (final Object x : volatilityCubeData.getXs()) {
for (final Object y : volatilityCubeData.getYs()) {
for (final Object z : volatilityCubeData.getZs()) {
final Double volatility = volatilityCubeData.getVolatility(x, y, z);
final Triple<Object, Object, Object> volKey = Triple.of(x, y, z);
dict.put(volKey, ValueSnapshot.of(volatility));
}
}
}
final ManageableVolatilityCubeSnapshot ret = new ManageableVolatilityCubeSnapshot();
ret.setValues(dict);
return ret;
}
}