Package com.opengamma.financial.marketdatasnapshot

Source Code of com.opengamma.financial.marketdatasnapshot.VolatilityCubeSnapper

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.marketdatasnapshot;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

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.VolatilityPoint;
import com.opengamma.core.marketdatasnapshot.impl.ManageableUnstructuredMarketDataSnapshot;
import com.opengamma.core.marketdatasnapshot.impl.ManageableVolatilityCubeSnapshot;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.engine.view.ViewComputationResultModel;
import com.opengamma.financial.analytics.volatility.cube.VolatilityCubeDefinition;
import com.opengamma.financial.analytics.volatility.cube.VolatilityCubeDefinitionSource;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.Tenor;
import com.opengamma.util.tuple.Pair;

/**
*
*/
public class VolatilityCubeSnapper extends
    StructuredSnapper<VolatilityCubeKey, VolatilityCubeData, VolatilityCubeSnapshot> {

  private final VolatilityCubeDefinitionSource _cubeDefinitionSource;

  public VolatilityCubeSnapper(VolatilityCubeDefinitionSource cubeDefinitionSource) {
    super(ValueRequirementNames.VOLATILITY_CUBE_MARKET_DATA);
    _cubeDefinitionSource = cubeDefinitionSource;
  }

  @Override
  VolatilityCubeKey getKey(ValueSpecification spec) {
    Currency currency = Currency.parse(spec.getTargetSpecification().getUniqueId().getValue());
    String cube = getSingleProperty(spec, ValuePropertyNames.CUBE);
    return new VolatilityCubeKey(currency, cube);
  }

  @Override
  VolatilityCubeSnapshot buildSnapshot(ViewComputationResultModel resultModel, VolatilityCubeKey key, VolatilityCubeData volatilityCubeData) {
    ManageableVolatilityCubeSnapshot ret = new ManageableVolatilityCubeSnapshot();
   
    ManageableUnstructuredMarketDataSnapshot otherValues = getUnstructured(volatilityCubeData.getOtherData());

    Map<VolatilityPoint, ValueSnapshot> values = new HashMap<VolatilityPoint, ValueSnapshot>();
   
    //fill with nulls
    VolatilityCubeDefinition definition = _cubeDefinitionSource.getDefinition(key.getCurrency(), key.getName());
   
    Iterable<VolatilityPoint> allPoints = definition.getAllPoints();
    for (VolatilityPoint point : allPoints) {
      values.put(point, new ValueSnapshot(null));
    }
   
    for (Entry<VolatilityPoint, Double> ycp : volatilityCubeData.getDataPoints().entrySet()) {
      values.put(ycp.getKey(), new ValueSnapshot(ycp.getValue()));
    }  

    Map<Pair<Tenor, Tenor>, ValueSnapshot> strikes = new HashMap<Pair<Tenor, Tenor>, ValueSnapshot>();
    for (Entry<Pair<Tenor, Tenor>, Double> strike : volatilityCubeData.getATMStrikes().entrySet()) {
      strikes.put(strike.getKey(), new ValueSnapshot(strike.getValue()));
    }

    ret.setOtherValues(otherValues);
    ret.setValues(values);
    ret.setStrikes(strikes);
    return ret;
  }

}
TOP

Related Classes of com.opengamma.financial.marketdatasnapshot.VolatilityCubeSnapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.