/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.security.swap;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeBuilder;
import org.fudgemsg.mapping.FudgeBuilderFor;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.fudgemsg.mapping.FudgeSerializer;
import com.opengamma.financial.security.FinancialSecurityFudgeBuilder;
import com.opengamma.util.fudgemsg.AbstractFudgeBuilder;
import com.opengamma.util.time.ZonedDateTimeFudgeBuilder;
/**
* A Fudge builder for {@code SwapSecurity}.
*/
@FudgeBuilderFor(SwapSecurity.class)
public class SwapSecurityFudgeBuilder extends AbstractFudgeBuilder implements FudgeBuilder<SwapSecurity> {
/** Field name. */
public static final String TRADE_DATE_FIELD_NAME = "tradeDate";
/** Field name. */
public static final String EFFECTIVE_DATE_FIELD_NAME = "effectiveDate";
/** Field name. */
public static final String MATURITY_DATE_FIELD_NAME = "maturityDate";
/** Field name. */
public static final String COUNTERPARTY_FIELD_NAME = "counterparty";
/** Field name. */
public static final String PAY_LEG_FIELD_NAME = "payLeg";
/** Field name. */
public static final String RECEIVE_LEG_FIELD_NAME = "receiveLeg";
/** The exchange initial notional field */
private static final String EXCHANGE_INITIAL_NOTIONAL_FIELD = "exchangeInitialNotional";
/** The exchange final notional field */
private static final String EXCHANGE_FINAL_NOTIONAL_FIELD = "exchangeExchangeNotional";
@Override
public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final SwapSecurity object) {
final MutableFudgeMsg msg = serializer.newMessage();
SwapSecurityFudgeBuilder.toFudgeMsg(serializer, object, msg);
return msg;
}
public static void toFudgeMsg(final FudgeSerializer serializer, final SwapSecurity object, final MutableFudgeMsg msg) {
FinancialSecurityFudgeBuilder.toFudgeMsg(serializer, object, msg);
addToMessage(msg, TRADE_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getTradeDate()));
addToMessage(msg, EFFECTIVE_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getEffectiveDate()));
addToMessage(msg, MATURITY_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getMaturityDate()));
addToMessage(msg, COUNTERPARTY_FIELD_NAME, object.getCounterparty());
addToMessage(msg, EXCHANGE_INITIAL_NOTIONAL_FIELD, object.isExchangeInitialNotional());
addToMessage(msg, EXCHANGE_FINAL_NOTIONAL_FIELD, object.isExchangeFinalNotional());
addToMessage(serializer, msg, PAY_LEG_FIELD_NAME, object.getPayLeg(), SwapLeg.class);
addToMessage(serializer, msg, RECEIVE_LEG_FIELD_NAME, object.getReceiveLeg(), SwapLeg.class);
}
@Override
public SwapSecurity buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
final SwapSecurity object = new SwapSecurity();
SwapSecurityFudgeBuilder.fromFudgeMsg(deserializer, msg, object);
return object;
}
public static void fromFudgeMsg(final FudgeDeserializer deserializer, final FudgeMsg msg, final SwapSecurity object) {
FinancialSecurityFudgeBuilder.fromFudgeMsg(deserializer, msg, object);
object.setTradeDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(TRADE_DATE_FIELD_NAME)));
object.setEffectiveDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(EFFECTIVE_DATE_FIELD_NAME)));
object.setMaturityDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(MATURITY_DATE_FIELD_NAME)));
object.setCounterparty(msg.getString(COUNTERPARTY_FIELD_NAME));
if (msg.hasField(EXCHANGE_INITIAL_NOTIONAL_FIELD)) {
object.setExchangeInitialNotional(msg.getBoolean(EXCHANGE_INITIAL_NOTIONAL_FIELD));
}
if (msg.hasField(EXCHANGE_FINAL_NOTIONAL_FIELD)) {
object.setExchangeFinalNotional(msg.getBoolean(EXCHANGE_FINAL_NOTIONAL_FIELD));
}
object.setPayLeg(deserializer.fudgeMsgToObject(SwapLeg.class, msg.getMessage(PAY_LEG_FIELD_NAME)));
object.setReceiveLeg(deserializer.fudgeMsgToObject(SwapLeg.class, msg.getMessage(RECEIVE_LEG_FIELD_NAME)));
}
}