/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.security.bond;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.fudgemsg.mapping.FudgeSerializer;
import com.opengamma.financial.convention.businessday.BusinessDayConvention;
import com.opengamma.financial.convention.daycount.DayCount;
import com.opengamma.financial.convention.frequency.Frequency;
import com.opengamma.financial.convention.yield.YieldConvention;
import com.opengamma.financial.security.FinancialSecurityFudgeBuilder;
import com.opengamma.util.fudgemsg.AbstractFudgeBuilder;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.ExpiryFudgeBuilder;
import com.opengamma.util.time.ZonedDateTimeFudgeBuilder;
/**
* A Fudge builder for {@code BondSecurity}.
*/
public class BondSecurityFudgeBuilder extends AbstractFudgeBuilder {
/** Field name. */
public static final String ISSUER_NAME_FIELD_NAME = "issuerName";
/** Field name. */
public static final String ISSUER_TYPE_FIELD_NAME = "issuerType";
/** Field name. */
public static final String ISSUER_DOMICILE_FIELD_NAME = "issuerDomicile";
/** Field name. */
public static final String MARKET_FIELD_NAME = "market";
/** Field name. */
public static final String CURRENCY_FIELD_NAME = "currency";
/** Field name. */
public static final String YIELD_CONVENTION_FIELD_NAME = "yieldConvention";
/** Field name. */
public static final String GUARANTEE_TYPE_FIELD_NAME = "guaranteeType";
/** Field name. */
public static final String LAST_TRADE_DATE_FIELD_NAME = "lastTradeDate";
/** Field name. */
public static final String COUPON_TYPE_FIELD_NAME = "couponType";
/** Field name. */
public static final String COUPON_RATE_FIELD_NAME = "couponRate";
/** Field name. */
public static final String COUPON_FREQUENCY_FIELD_NAME = "couponFrequency";
/** Field name. */
public static final String DAY_COUNT_CONVENTION_FIELD_NAME = "dayCountConvention";
/** Field name. */
public static final String BUSINESS_DAY_CONVENTION_FIELD_NAME = "businessDayConvention";
/** Field name. */
public static final String ANNOUNCEMENT_DATE_FIELD_NAME = "announcementDate";
/** Field name. */
public static final String INTEREST_ACCRUAL_DATE_FIELD_NAME = "interestAccrualDate";
/** Field name. */
public static final String SETTLEMENT_DATE_FIELD_NAME = "settlementDate";
/** Field name. */
public static final String FIRST_COUPON_DATE_FIELD_NAME = "firstCouponDate";
/** Field name. */
public static final String ISSUANCE_PRICE_FIELD_NAME = "issuancePrice";
/** Field name. */
public static final String TOTAL_AMOUNT_ISSUED_FIELD_NAME = "totalAmountIssued";
/** Field name. */
public static final String MINIMUM_AMOUNT_FIELD_NAME = "minimumAmount";
/** Field name. */
public static final String MINIMUM_INCREMENT_FIELD_NAME = "minimumIncrement";
/** Field name. */
public static final String PAR_AMOUNT_FIELD_NAME = "parAmount";
/** Field name. */
public static final String REDEMPTION_VALUE_FIELD_NAME = "redemptionValue";
public static void toFudgeMsg(FudgeSerializer serializer, BondSecurity object, final MutableFudgeMsg msg) {
FinancialSecurityFudgeBuilder.toFudgeMsg(serializer, object, msg);
addToMessage(msg, ISSUER_NAME_FIELD_NAME, object.getIssuerName());
addToMessage(msg, ISSUER_TYPE_FIELD_NAME, object.getIssuerType());
addToMessage(msg, ISSUER_DOMICILE_FIELD_NAME, object.getIssuerDomicile());
addToMessage(msg, MARKET_FIELD_NAME, object.getMarket());
addToMessage(msg, CURRENCY_FIELD_NAME, object.getCurrency());
addToMessage(msg, YIELD_CONVENTION_FIELD_NAME, object.getYieldConvention());
addToMessage(msg, GUARANTEE_TYPE_FIELD_NAME, object.getGuaranteeType());
addToMessage(msg, LAST_TRADE_DATE_FIELD_NAME, ExpiryFudgeBuilder.toFudgeMsg(serializer, object.getLastTradeDate()));
addToMessage(msg, COUPON_TYPE_FIELD_NAME, object.getCouponType());
addToMessage(msg, COUPON_RATE_FIELD_NAME, object.getCouponRate());
addToMessage(msg, COUPON_FREQUENCY_FIELD_NAME, object.getCouponFrequency());
addToMessage(msg, DAY_COUNT_CONVENTION_FIELD_NAME, object.getDayCount());
addToMessage(msg, BUSINESS_DAY_CONVENTION_FIELD_NAME, object.getBusinessDayConvention());
addToMessage(msg, ANNOUNCEMENT_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getAnnouncementDate()));
addToMessage(msg, INTEREST_ACCRUAL_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getInterestAccrualDate()));
addToMessage(msg, SETTLEMENT_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getSettlementDate()));
addToMessage(msg, FIRST_COUPON_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getFirstCouponDate()));
addToMessage(msg, ISSUANCE_PRICE_FIELD_NAME, object.getIssuancePrice());
addToMessage(msg, TOTAL_AMOUNT_ISSUED_FIELD_NAME, object.getTotalAmountIssued());
addToMessage(msg, MINIMUM_AMOUNT_FIELD_NAME, object.getMinimumAmount());
addToMessage(msg, MINIMUM_INCREMENT_FIELD_NAME, object.getMinimumIncrement());
addToMessage(msg, PAR_AMOUNT_FIELD_NAME, object.getParAmount());
addToMessage(msg, REDEMPTION_VALUE_FIELD_NAME, object.getRedemptionValue());
}
public static void fromFudgeMsg(FudgeDeserializer deserializer, FudgeMsg msg, BondSecurity object) {
FinancialSecurityFudgeBuilder.fromFudgeMsg(deserializer, msg, object);
object.setIssuerName(msg.getString(ISSUER_NAME_FIELD_NAME));
object.setIssuerType(msg.getString(ISSUER_TYPE_FIELD_NAME));
object.setIssuerDomicile(msg.getString(ISSUER_DOMICILE_FIELD_NAME));
object.setMarket(msg.getString(MARKET_FIELD_NAME));
object.setCurrency(msg.getValue(Currency.class, CURRENCY_FIELD_NAME));
object.setYieldConvention(msg.getValue(YieldConvention.class, YIELD_CONVENTION_FIELD_NAME));
object.setGuaranteeType(msg.getString(GUARANTEE_TYPE_FIELD_NAME));
object.setLastTradeDate(ExpiryFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(LAST_TRADE_DATE_FIELD_NAME)));
object.setCouponType(msg.getString(COUPON_TYPE_FIELD_NAME));
object.setCouponRate(msg.getDouble(COUPON_RATE_FIELD_NAME));
object.setCouponFrequency(msg.getValue(Frequency.class, COUPON_FREQUENCY_FIELD_NAME));
object.setDayCount(msg.getValue(DayCount.class, DAY_COUNT_CONVENTION_FIELD_NAME));
object.setBusinessDayConvention(msg.getValue(BusinessDayConvention.class, BUSINESS_DAY_CONVENTION_FIELD_NAME));
object.setAnnouncementDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(ANNOUNCEMENT_DATE_FIELD_NAME)));
object.setInterestAccrualDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(INTEREST_ACCRUAL_DATE_FIELD_NAME)));
object.setSettlementDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(SETTLEMENT_DATE_FIELD_NAME)));
object.setFirstCouponDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(FIRST_COUPON_DATE_FIELD_NAME)));
object.setIssuancePrice(msg.getDouble(ISSUANCE_PRICE_FIELD_NAME));
object.setTotalAmountIssued(msg.getDouble(TOTAL_AMOUNT_ISSUED_FIELD_NAME));
object.setMinimumAmount(msg.getDouble(MINIMUM_AMOUNT_FIELD_NAME));
object.setMinimumIncrement(msg.getDouble(MINIMUM_INCREMENT_FIELD_NAME));
object.setParAmount(msg.getDouble(PAR_AMOUNT_FIELD_NAME));
object.setRedemptionValue(msg.getDouble(REDEMPTION_VALUE_FIELD_NAME));
}
}