Package com.opengamma.financial.analytics.fudgemsg

Source Code of com.opengamma.financial.analytics.fudgemsg.G2ppParametersBuilder

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

import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

import org.fudgemsg.FudgeField;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeBuilderFor;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.fudgemsg.mapping.FudgeSerializer;
import org.threeten.bp.Period;

import com.opengamma.financial.analytics.parameters.G2ppParameters;
import com.opengamma.id.ExternalId;
import com.opengamma.id.UniqueId;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.Tenor;
import com.opengamma.util.tuple.Pair;

/**
* Fudge builder for {@link G2ppParameters}
*/
@FudgeBuilderFor(G2ppParameters.class)
public class G2ppParametersBuilder extends AbstractFudgeBuilder<G2ppParameters> {
  /** The unique id field */
  private static final String UNIQUE_ID = "uniqueId";
  /** The currency field */
  private static final String CURRENCY = "currency";
  /** The first mean reversion id field */
  private static final String FIRST_MEAN_REVERSION_ID = "firstMeanReversionId";
  /** The second mean reversion id field */
  private static final String SECOND_MEAN_REVERSION_ID = "secondMeanReversionId";
  /** The first initial volatility id field */
  private static final String FIRST_INITIAL_VOLATILITY_ID = "firstInitialVolatilityId";
  /** The second initial volatility id field */
  private static final String SECOND_INITIAL_VOLATILITY_ID = "secondInitialVolatilityId";
  /** The tenor field */
  private static final String TENOR = "tenor";
  /** The first volatility parameter id field */
  private static final String FIRST_VOLATILITY_PARAMETER_ID = "firstVolatilityParameterId";
  /** The second volatility parameter id field */
  private static final String SECOND_VOLATILITY_PARAMETER_ID = "secondVolatilityParameterId";
  /** The correlation id */
  private static final String CORRELATION_ID = "correlationId";

  @Override
  public G2ppParameters buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
    final UniqueId uniqueId = deserializer.fieldValueToObject(UniqueId.class, message.getByName(UNIQUE_ID));
    final Currency currency = deserializer.fieldValueToObject(Currency.class, message.getByName(CURRENCY));
    final ExternalId firstMeanReversionId = deserializer.fieldValueToObject(ExternalId.class, message.getByName(FIRST_MEAN_REVERSION_ID));
    final ExternalId secondMeanReversionId = deserializer.fieldValueToObject(ExternalId.class, message.getByName(SECOND_MEAN_REVERSION_ID));
    final ExternalId firstInitialVolatilityId = deserializer.fieldValueToObject(ExternalId.class, message.getByName(FIRST_INITIAL_VOLATILITY_ID));
    final ExternalId secondInitialVolatilityId = deserializer.fieldValueToObject(ExternalId.class, message.getByName(SECOND_INITIAL_VOLATILITY_ID));
    final SortedMap<Tenor, Pair<ExternalId, ExternalId>> volatilityTermStructure = new TreeMap<>();
    final List<FudgeField> tenors = message.getAllByName(TENOR);
    final List<FudgeField> firstVolatilityParameterIds = message.getAllByName(FIRST_VOLATILITY_PARAMETER_ID);
    final List<FudgeField> secondVolatilityParameterIds = message.getAllByName(SECOND_VOLATILITY_PARAMETER_ID);
    final int n = tenors.size();
    if (n != firstVolatilityParameterIds.size()) {
      throw new IllegalStateException("Did not have one first volatility parameter id per tenor");
    }
    if (n != secondVolatilityParameterIds.size()) {
      throw new IllegalStateException("Did not have one second volatility parameter id per tenor");
    }
    for (int i = 0; i < n; i++) {
      final Tenor tenor = Tenor.of(Period.parse((String) tenors.get(i).getValue()));
      final ExternalId firstVolatilityParameterId = deserializer.fieldValueToObject(ExternalId.class, firstVolatilityParameterIds.get(i));
      final ExternalId secondVolatilityParameterId = deserializer.fieldValueToObject(ExternalId.class, secondVolatilityParameterIds.get(i));
      volatilityTermStructure.put(tenor, Pair.of(firstVolatilityParameterId, secondVolatilityParameterId));
    }
    final ExternalId correlationId = deserializer.fieldValueToObject(ExternalId.class, message.getByName(CORRELATION_ID));
    final G2ppParameters parameters = new G2ppParameters(currency, firstMeanReversionId, secondMeanReversionId, firstInitialVolatilityId,
        secondInitialVolatilityId, volatilityTermStructure, correlationId);
    parameters.setUniqueId(uniqueId);
    return parameters;
  }

  @Override
  protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final G2ppParameters object) {
    serializer.addToMessage(message, UNIQUE_ID, null, object.getUniqueId());
    serializer.addToMessage(message, CURRENCY, null, object.getCurrency());
    serializer.addToMessage(message, FIRST_MEAN_REVERSION_ID, null, object.getFirstMeanReversionId());
    serializer.addToMessage(message, SECOND_MEAN_REVERSION_ID, null, object.getSecondMeanReversionId());
    serializer.addToMessage(message, FIRST_INITIAL_VOLATILITY_ID, null, object.getFirstInitialVolatilityId());
    serializer.addToMessage(message, SECOND_INITIAL_VOLATILITY_ID, null, object.getSecondInitialVolatilityId());
    for (final Map.Entry<Tenor, Pair<ExternalId, ExternalId>> entry : object.getVolatilityTermStructure().entrySet()) {
      message.add(TENOR, entry.getKey().getPeriod().toString());
      serializer.addToMessage(message, FIRST_VOLATILITY_PARAMETER_ID, null, entry.getValue().getFirst());
      serializer.addToMessage(message, SECOND_VOLATILITY_PARAMETER_ID, null, entry.getValue().getSecond());
    }
    serializer.addToMessage(message, CORRELATION_ID, null, object.getCorrelationId());
  }

}
TOP

Related Classes of com.opengamma.financial.analytics.fudgemsg.G2ppParametersBuilder

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.