/** * 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.ValuePropertyNames.SURFACE; import static com.opengamma.engine.value.ValueRequirementNames.SURFACE_MARKET_DATA; import java.util.HashMap; import java.util.Map; import com.opengamma.core.marketdatasnapshot.SurfaceData; import com.opengamma.core.marketdatasnapshot.SurfaceKey; import com.opengamma.core.marketdatasnapshot.SurfaceSnapshot; import com.opengamma.core.marketdatasnapshot.ValueSnapshot; import com.opengamma.core.marketdatasnapshot.impl.ManageableSurfaceSnapshot; import com.opengamma.engine.value.ValueRequirementNames; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.engine.view.ViewComputationResultModel; import com.opengamma.util.tuple.Pair; import com.opengamma.util.tuple.Pairs; /** * Create a structured snapshot of {@link SurfaceData}. */ public class SurfaceSnapper extends StructuredSnapper<SurfaceKey, SurfaceData<Object, Object>, SurfaceSnapshot> { /** * Sets the requirement name to {@link ValueRequirementNames#SURFACE_MARKET_DATA} */ public SurfaceSnapper() { super(SURFACE_MARKET_DATA); } @Override SurfaceKey getKey(final ValueSpecification spec) { final String name = getSingleProperty(spec, SURFACE); return SurfaceKey.of(name); } @Override SurfaceSnapshot buildSnapshot(final ViewComputationResultModel resultModel, final SurfaceKey key, final SurfaceData<Object, Object> surfaceData) { final Map<Pair<Object, Object>, ValueSnapshot> dict = new HashMap<>(); for (final Object x : surfaceData.getXs()) { for (final Object y : surfaceData.getYs()) { final Double value = surfaceData.getValue(x, y); final Pair<Object, Object> volKey = Pairs.of(x, y); dict.put(volKey, ValueSnapshot.of(value)); } } final ManageableSurfaceSnapshot ret = new ManageableSurfaceSnapshot(); ret.setValues(dict); return ret; } }