/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.fudgemsg; import org.fudgemsg.FudgeField; import org.fudgemsg.FudgeMsg; import org.fudgemsg.MutableFudgeMsg; import org.fudgemsg.mapping.FudgeBuilder; import org.fudgemsg.mapping.FudgeDeserializer; import org.fudgemsg.mapping.FudgeSerializer; import org.fudgemsg.mapping.GenericFudgeBuilderFor; import org.threeten.bp.Period; import org.threeten.bp.ZonedDateTime; import com.opengamma.analytics.financial.interestrate.InterestRate; import com.opengamma.analytics.financial.interestrate.InterestRate.Type; import com.opengamma.financial.convention.ConventionBundle; import com.opengamma.financial.convention.ConventionBundleImpl; 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.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.id.UniqueId; import com.opengamma.util.time.Tenor; /** * Fudge builder for a {@link ConventionBundle}. */ @GenericFudgeBuilderFor(ConventionBundle.class) public class ConventionBundleFudgeBuilder implements FudgeBuilder<ConventionBundle> { // This is here so that changes to the interface will break this builder. private static final class SimpleConventionBundle implements ConventionBundle { private UniqueId _uniqueId; private ExternalIdBundle _identifiers; private String _name; private DayCount _dayCount; private BusinessDayConvention _businessDayConvention; private ExternalId _region; private Frequency _frequency; private int _settlementDays; private Tenor _cutoffTenor; private int _shortSettlementDays; private int _longSettlementDays; private Double _futureYearFraction; private DayCount _swapFixedLegDayCount; private BusinessDayConvention _swapFixedLegBusinessDayConvention; private Frequency _swapFixedLegPaymentFrequency; private Frequency _swapFixedLegCompoundingFrequency; private InterestRate.Type _swapFixedLegCompoundingType; private Integer _swapFixedLegSettlementDays; private ExternalId _swapFixedLegRegion; private DayCount _swapFloatingLegDayCount; private BusinessDayConvention _swapFloatingLegBusinessDayConvention; private Frequency _swapFloatingLegPaymentFrequency; private Frequency _swapFloatingLegCompoundingFrequency; private InterestRate.Type _swapFloatingLegCompoundingType; private Integer _swapFloatingLegSettlementDays; private ExternalId _swapFloatingLegInitialRate; private ExternalId _swapFloatingLegRegion; private ExternalIdBundle _capmRiskFreeRate; private ExternalIdBundle _capmMarket; private DayCount _basisSwapPayFloatingLegDayCount; private BusinessDayConvention _basisSwapPayFloatingLegBusinessDayConvention; private Frequency _basisSwapPayFloatingLegFrequency; private Integer _basisSwapPayFloatingLegSettlementDays; private ExternalId _basisSwapPayFloatingLegInitialRate; private ExternalId _basisSwapPayFloatingLegRegion; private DayCount _basisSwapReceiveFloatingLegDayCount; private BusinessDayConvention _basisSwapReceiveFloatingLegBusinessDayConvention; private Frequency _basisSwapReceiveFloatingLegFrequency; private Integer _basisSwapReceiveFloatingLegSettlementDays; private ExternalId _basisSwapReceiveFloatingLegInitialRate; private ExternalId _basisSwapReceiveFloatingLegRegion; private Integer _overnightIndexSwapPublicationLag; private Boolean _eomConvention; private Boolean _calculateScheduleFromMaturity; private int _exDividendDays; private YieldConvention _yieldConvention; private boolean _rollToSettlement; private Period _period; private boolean _cashSettled; private String _optionExpiryCalculator; @Override public UniqueId getUniqueId() { return _uniqueId; } @Override public ExternalIdBundle getIdentifiers() { return _identifiers; } @Override public String getName() { return _name; } @Override public DayCount getDayCount() { return _dayCount; } @Override public BusinessDayConvention getBusinessDayConvention() { return _businessDayConvention; } @Override public ExternalId getRegion() { return _region; } @Override public Frequency getFrequency() { return _frequency; } @Override public Integer getSettlementDays() { return _settlementDays; } public Tenor getCutoffTenor() { return _cutoffTenor; } public int getShortSettlementDays() { return _shortSettlementDays; } public int getLongSettlementDays() { return _longSettlementDays; } @Override public Integer getBondSettlementDays(final ZonedDateTime bondSettlementDate, final ZonedDateTime bondMaturityDate) { if (_cutoffTenor != null) { if (bondSettlementDate.plus(_cutoffTenor.getPeriod()).isBefore(bondMaturityDate)) { return _shortSettlementDays; } return _longSettlementDays; } return _settlementDays; } @Override public Double getFutureYearFraction() { return _futureYearFraction; } @Override public DayCount getSwapFixedLegDayCount() { return _swapFixedLegDayCount; } @Override public BusinessDayConvention getSwapFixedLegBusinessDayConvention() { return _swapFixedLegBusinessDayConvention; } @Override public Frequency getSwapFixedLegFrequency() { return _swapFixedLegPaymentFrequency; } @Override public Integer getSwapFixedLegSettlementDays() { return _swapFixedLegSettlementDays; } @Override public ExternalId getSwapFixedLegRegion() { return _swapFixedLegRegion; } @Override public DayCount getSwapFloatingLegDayCount() { return _swapFloatingLegDayCount; } @Override public BusinessDayConvention getSwapFloatingLegBusinessDayConvention() { return _swapFloatingLegBusinessDayConvention; } @Override public Frequency getSwapFloatingLegFrequency() { return _swapFloatingLegPaymentFrequency; } @Override public Integer getSwapFloatingLegSettlementDays() { return _swapFloatingLegSettlementDays; } @Override public ExternalId getSwapFloatingLegInitialRate() { return _swapFloatingLegInitialRate; } @Override public ExternalId getSwapFloatingLegRegion() { return _swapFloatingLegRegion; } @Override public ExternalIdBundle getCAPMRiskFreeRate() { return _capmRiskFreeRate; } @Override public ExternalIdBundle getCAPMMarket() { return _capmMarket; } @Override public DayCount getBasisSwapPayFloatingLegDayCount() { return _basisSwapPayFloatingLegDayCount; } @Override public BusinessDayConvention getBasisSwapPayFloatingLegBusinessDayConvention() { return _basisSwapPayFloatingLegBusinessDayConvention; } @Override public Frequency getBasisSwapPayFloatingLegFrequency() { return _basisSwapPayFloatingLegFrequency; } @Override public Integer getBasisSwapPayFloatingLegSettlementDays() { return _basisSwapPayFloatingLegSettlementDays; } @Override public ExternalId getBasisSwapPayFloatingLegInitialRate() { return _basisSwapPayFloatingLegInitialRate; } @Override public ExternalId getBasisSwapPayFloatingLegRegion() { return _basisSwapPayFloatingLegRegion; } @Override public DayCount getBasisSwapReceiveFloatingLegDayCount() { return _basisSwapReceiveFloatingLegDayCount; } @Override public BusinessDayConvention getBasisSwapReceiveFloatingLegBusinessDayConvention() { return _basisSwapReceiveFloatingLegBusinessDayConvention; } @Override public Frequency getBasisSwapReceiveFloatingLegFrequency() { return _basisSwapReceiveFloatingLegFrequency; } @Override public Integer getBasisSwapReceiveFloatingLegSettlementDays() { return _basisSwapReceiveFloatingLegSettlementDays; } @Override public ExternalId getBasisSwapReceiveFloatingLegInitialRate() { return _basisSwapReceiveFloatingLegInitialRate; } @Override public ExternalId getBasisSwapReceiveFloatingLegRegion() { return _basisSwapReceiveFloatingLegRegion; } @Override public Integer getOvernightIndexSwapPublicationLag() { return _overnightIndexSwapPublicationLag; } @Override public Boolean isEOMConvention() { return _eomConvention; } @Override public Boolean calculateScheduleFromMaturity() { return _calculateScheduleFromMaturity; } @Override public int getExDividendDays() { return _exDividendDays; } @Override public YieldConvention getYieldConvention() { return _yieldConvention; } @Override public boolean rollToSettlement() { return _rollToSettlement; } @Override public Period getPeriod() { return _period; } @Override public boolean isCashSettled() { return _cashSettled; } @Override public String getOptionExpiryCalculator() { return _optionExpiryCalculator; } @Override public Frequency getSwapFixedLegCompoundingFrequency() { return _swapFixedLegCompoundingFrequency; } @Override public Frequency getSwapFloatingLegCompoundingFrequency() { return _swapFloatingLegCompoundingFrequency; } @Override public Type getSwapFixedLegCompoundingType() { return _swapFixedLegCompoundingType; } @Override public Type getSwapFloatingLegCompoundingType() { return _swapFloatingLegCompoundingType; } } private void addToMessage(final FudgeSerializer serializer, final MutableFudgeMsg msg, final ConventionBundleImpl obj) { serializer.addToMessage(msg, "cutoffTenor", null, obj.getCutoffTenor()); serializer.addToMessage(msg, "shortSettlementDays", null, obj.getShortSettlementDays()); serializer.addToMessage(msg, "longSettlementDays", null, obj.getLongSettlementDays()); } private void addToMessage(final FudgeSerializer serializer, final MutableFudgeMsg msg, final SimpleConventionBundle obj) { serializer.addToMessage(msg, "cutoffTenor", null, obj.getCutoffTenor()); serializer.addToMessage(msg, "shortSettlementDays", null, obj.getShortSettlementDays()); serializer.addToMessage(msg, "longSettlementDays", null, obj.getLongSettlementDays()); } @Override public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final ConventionBundle obj) { final MutableFudgeMsg msg = serializer.newMessage(); serializer.addToMessage(msg, "uniqueId", null, obj.getUniqueId()); serializer.addToMessage(msg, "identifiers", null, obj.getIdentifiers()); serializer.addToMessage(msg, "name", null, obj.getName()); serializer.addToMessageWithClassHeaders(msg, "dayCount", null, obj.getDayCount(), DayCount.class); serializer.addToMessageWithClassHeaders(msg, "businessDayConvention", null, obj.getBusinessDayConvention(), BusinessDayConvention.class); serializer.addToMessage(msg, "region", null, obj.getRegion()); serializer.addToMessageWithClassHeaders(msg, "frequency", null, obj.getFrequency(), Frequency.class); serializer.addToMessage(msg, "settlementDays", null, obj.getSettlementDays()); if (obj instanceof ConventionBundleImpl) { addToMessage(serializer, msg, (ConventionBundleImpl) obj); } else if (obj instanceof SimpleConventionBundle) { addToMessage(serializer, msg, (SimpleConventionBundle) obj); } else { // Can't handle "getBondSettlementDays" from an arbitrary object throw new IllegalArgumentException("Convention bundle of type " + obj.getClass() + " can't be Fudge encoded"); } serializer.addToMessage(msg, "futureYearFraction", null, obj.getFutureYearFraction()); serializer.addToMessageWithClassHeaders(msg, "swapFixedLegDayCount", null, obj.getSwapFixedLegDayCount(), DayCount.class); serializer.addToMessageWithClassHeaders(msg, "swapFixedLegBusinessDayConvention", null, obj.getSwapFixedLegBusinessDayConvention(), BusinessDayConvention.class); serializer.addToMessageWithClassHeaders(msg, "swapFixedLegFrequency", null, obj.getSwapFixedLegFrequency(), Frequency.class); serializer.addToMessageWithClassHeaders(msg, "swapFixedLegCompoundingFrequency", null, obj.getSwapFixedLegCompoundingFrequency(), Frequency.class); if (obj.getSwapFixedLegCompoundingType() != null) { msg.add("swapFixedLegCompoundingType", obj.getSwapFixedLegCompoundingType().name()); } serializer.addToMessage(msg, "swapFixedLegSettlementDays", null, obj.getSwapFixedLegSettlementDays()); serializer.addToMessage(msg, "swapFixedLegRegion", null, obj.getSwapFixedLegRegion()); serializer.addToMessageWithClassHeaders(msg, "swapFloatingLegDayCount", null, obj.getSwapFloatingLegDayCount(), DayCount.class); serializer.addToMessageWithClassHeaders(msg, "swapFloatingLegBusinessDayConvention", null, obj.getSwapFloatingLegBusinessDayConvention(), BusinessDayConvention.class); serializer.addToMessageWithClassHeaders(msg, "swapFloatingLegFrequency", null, obj.getSwapFloatingLegFrequency(), Frequency.class); serializer.addToMessageWithClassHeaders(msg, "swapFloatingLegCompoundingFrequency", null, obj.getSwapFloatingLegCompoundingFrequency(), Frequency.class); if (obj.getSwapFloatingLegCompoundingType() != null) { msg.add("swapFloatingLegCompoundingType", obj.getSwapFloatingLegCompoundingType().name()); } serializer.addToMessage(msg, "swapFloatingLegSettlementDays", null, obj.getSwapFloatingLegSettlementDays()); serializer.addToMessage(msg, "swapFloatingLegInitialRate", null, obj.getSwapFloatingLegInitialRate()); serializer.addToMessage(msg, "swapFloatingLegRegion", null, obj.getSwapFloatingLegRegion()); serializer.addToMessage(msg, "capmRiskFreeRate", null, obj.getCAPMRiskFreeRate()); serializer.addToMessage(msg, "capmMarket", null, obj.getCAPMMarket()); serializer.addToMessageWithClassHeaders(msg, "basisSwapPayFloatingLegDayCount", null, obj.getBasisSwapPayFloatingLegDayCount(), DayCount.class); serializer.addToMessageWithClassHeaders(msg, "basisSwapPayFloatingLegBusinessDayConvention", null, obj.getBasisSwapPayFloatingLegBusinessDayConvention(), BusinessDayConvention.class); serializer.addToMessageWithClassHeaders(msg, "basisSwapPayFloatingLegFrequency", null, obj.getBasisSwapPayFloatingLegFrequency(), Frequency.class); serializer.addToMessage(msg, "basisSwapPayFloatingLegSettlementDays", null, obj.getBasisSwapPayFloatingLegSettlementDays()); serializer.addToMessage(msg, "basisSwapPayFloatingLegInitialRate", null, obj.getBasisSwapPayFloatingLegInitialRate()); serializer.addToMessage(msg, "basisSwapPayFloatingLegRegion", null, obj.getBasisSwapPayFloatingLegRegion()); serializer.addToMessageWithClassHeaders(msg, "basisSwapReceiveFloatingLegDayCount", null, obj.getBasisSwapReceiveFloatingLegDayCount(), DayCount.class); serializer.addToMessageWithClassHeaders(msg, "basisSwapReceiveFloatingLegBusinessDayConvention", null, obj.getBasisSwapReceiveFloatingLegBusinessDayConvention(), BusinessDayConvention.class); serializer.addToMessageWithClassHeaders(msg, "basisSwapReceiveFloatingLegFrequency", null, obj.getBasisSwapReceiveFloatingLegFrequency(), Frequency.class); serializer.addToMessage(msg, "basisSwapReceiveFloatingLegSettlementDays", null, obj.getBasisSwapReceiveFloatingLegSettlementDays()); serializer.addToMessage(msg, "basisSwapReceiveFloatingLegInitialRate", null, obj.getBasisSwapReceiveFloatingLegInitialRate()); serializer.addToMessage(msg, "basisSwapReceiveFloatingLegRegion", null, obj.getBasisSwapReceiveFloatingLegRegion()); serializer.addToMessage(msg, "overnightIndexSwapPublicationLag", null, obj.getOvernightIndexSwapPublicationLag()); serializer.addToMessage(msg, "eomConvention", null, obj.isEOMConvention()); serializer.addToMessage(msg, "calculateScheduleFromMaturity", null, obj.calculateScheduleFromMaturity()); serializer.addToMessage(msg, "exDividendDays", null, obj.getExDividendDays()); serializer.addToMessageWithClassHeaders(msg, "yieldConvention", null, obj.getYieldConvention(), YieldConvention.class); serializer.addToMessage(msg, "rollToSettlement", null, obj.rollToSettlement()); serializer.addToMessage(msg, "period", null, obj.getPeriod()); serializer.addToMessage(msg, "cashSettled", null, obj.isCashSettled()); serializer.addToMessage(msg, "optionExpiryCalculator", null, obj.getOptionExpiryCalculator()); return msg; } @Override public ConventionBundle buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) { final SimpleConventionBundle obj = new SimpleConventionBundle(); FudgeField field; //CSOFF if ((field = msg.getByName("uniqueId")) != null) { obj._uniqueId = deserializer.fieldValueToObject(UniqueId.class, field); } if ((field = msg.getByName("identifiers")) != null) { obj._identifiers = deserializer.fieldValueToObject(ExternalIdBundle.class, field); } if ((field = msg.getByName("name")) != null) { obj._name = deserializer.fieldValueToObject(String.class, field); } if ((field = msg.getByName("dayCount")) != null) { obj._dayCount = deserializer.fieldValueToObject(DayCount.class, field); } if ((field = msg.getByName("businessDayConvention")) != null) { obj._businessDayConvention = deserializer.fieldValueToObject(BusinessDayConvention.class, field); } if ((field = msg.getByName("region")) != null) { obj._region = deserializer.fieldValueToObject(ExternalId.class, field); } if ((field = msg.getByName("frequency")) != null) { obj._frequency = deserializer.fieldValueToObject(Frequency.class, field); } if ((field = msg.getByName("settlementDays")) != null) { obj._settlementDays = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("cutoffTenor")) != null) { obj._cutoffTenor = deserializer.fieldValueToObject(Tenor.class, field); } if ((field = msg.getByName("shortSettlementDays")) != null) { obj._shortSettlementDays = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("longSettlementDays")) != null) { obj._longSettlementDays = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("futureYearFraction")) != null) { obj._futureYearFraction = deserializer.fieldValueToObject(Double.class, field); } if ((field = msg.getByName("swapFixedLegDayCount")) != null) { obj._swapFixedLegDayCount = deserializer.fieldValueToObject(DayCount.class, field); } if ((field = msg.getByName("swapFixedLegBusinessDayConvention")) != null) { obj._swapFixedLegBusinessDayConvention = deserializer.fieldValueToObject(BusinessDayConvention.class, field); } if ((field = msg.getByName("swapFixedLegFrequency")) != null) { obj._swapFixedLegPaymentFrequency = deserializer.fieldValueToObject(Frequency.class, field); } if ((field = msg.getByName("swapFixedLegCompoundingFrequency")) != null) { obj._swapFixedLegCompoundingFrequency = deserializer.fieldValueToObject(Frequency.class, field); } if ((field = msg.getByName("swapFixedLegCompoundingType")) != null) { obj._swapFixedLegCompoundingType = InterestRate.Type.valueOf((String) field.getValue()); } if ((field = msg.getByName("swapFixedLegSettlementDays")) != null) { obj._swapFixedLegSettlementDays = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("swapFixedLegRegion")) != null) { obj._swapFixedLegRegion = deserializer.fieldValueToObject(ExternalId.class, field); } if ((field = msg.getByName("swapFloatingLegDayCount")) != null) { obj._swapFloatingLegDayCount = deserializer.fieldValueToObject(DayCount.class, field); } if ((field = msg.getByName("swapFloatingLegBusinessDayConvention")) != null) { obj._swapFloatingLegBusinessDayConvention = deserializer.fieldValueToObject(BusinessDayConvention.class, field); } if ((field = msg.getByName("swapFloatingLegFrequency")) != null) { obj._swapFloatingLegPaymentFrequency = deserializer.fieldValueToObject(Frequency.class, field); } if ((field = msg.getByName("swapFloatingLegCompoundingFrequency")) != null) { obj._swapFloatingLegCompoundingFrequency = deserializer.fieldValueToObject(Frequency.class, field); } if ((field = msg.getByName("swapFloatingLegCompoundingType")) != null) { obj._swapFloatingLegCompoundingType = InterestRate.Type.valueOf((String) field.getValue()); } if ((field = msg.getByName("swapFloatingLegSettlementDays")) != null) { obj._swapFloatingLegSettlementDays = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("swapFloatingLegInitialRate")) != null) { obj._swapFloatingLegInitialRate = deserializer.fieldValueToObject(ExternalId.class, field); } if ((field = msg.getByName("swapFloatingLegRegion")) != null) { obj._swapFloatingLegRegion = deserializer.fieldValueToObject(ExternalId.class, field); } if ((field = msg.getByName("capmRiskFreeRate")) != null) { obj._capmRiskFreeRate = deserializer.fieldValueToObject(ExternalIdBundle.class, field); } if ((field = msg.getByName("capmMarket")) != null) { obj._capmMarket = deserializer.fieldValueToObject(ExternalIdBundle.class, field); } if ((field = msg.getByName("basisSwapPayFloatingLegDayCount")) != null) { obj._basisSwapPayFloatingLegDayCount = deserializer.fieldValueToObject(DayCount.class, field); } if ((field = msg.getByName("basisSwapPayFloatingLegBusinessDayConvention")) != null) { obj._basisSwapPayFloatingLegBusinessDayConvention = deserializer.fieldValueToObject(BusinessDayConvention.class, field); } if ((field = msg.getByName("basisSwapPayFloatingLegFrequency")) != null) { obj._basisSwapPayFloatingLegFrequency = deserializer.fieldValueToObject(Frequency.class, field); } if ((field = msg.getByName("basisSwapPayFloatingLegSettlementDays")) != null) { obj._basisSwapPayFloatingLegSettlementDays = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("basisSwapPayFloatingLegInitialRate")) != null) { obj._basisSwapPayFloatingLegInitialRate = deserializer.fieldValueToObject(ExternalId.class, field); } if ((field = msg.getByName("basisSwapPayFloatingLegRegion")) != null) { obj._basisSwapPayFloatingLegRegion = deserializer.fieldValueToObject(ExternalId.class, field); } if ((field = msg.getByName("basisSwapReceiveFloatingLegDayCount")) != null) { obj._basisSwapReceiveFloatingLegDayCount = deserializer.fieldValueToObject(DayCount.class, field); } if ((field = msg.getByName("basisSwapReceiveFloatingLegBusinessDayConvention")) != null) { obj._basisSwapReceiveFloatingLegBusinessDayConvention = deserializer.fieldValueToObject(BusinessDayConvention.class, field); } if ((field = msg.getByName("basisSwapReceiveFloatingLegFrequency")) != null) { obj._basisSwapReceiveFloatingLegFrequency = deserializer.fieldValueToObject(Frequency.class, field); } if ((field = msg.getByName("basisSwapReceiveFloatingLegSettlementDays")) != null) { obj._basisSwapReceiveFloatingLegSettlementDays = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("basisSwapReceiveFloatingLegInitialRate")) != null) { obj._basisSwapReceiveFloatingLegInitialRate = deserializer.fieldValueToObject(ExternalId.class, field); } if ((field = msg.getByName("basisSwapReceiveFloatingLegRegion")) != null) { obj._basisSwapReceiveFloatingLegRegion = deserializer.fieldValueToObject(ExternalId.class, field); } if ((field = msg.getByName("overnightIndexSwapPublicationLag")) != null) { obj._overnightIndexSwapPublicationLag = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("eomConvention")) != null) { obj._eomConvention = deserializer.fieldValueToObject(Boolean.class, field); } if ((field = msg.getByName("calculateScheduleFromMaturity")) != null) { obj._calculateScheduleFromMaturity = deserializer.fieldValueToObject(Boolean.class, field); } if ((field = msg.getByName("exDividendDays")) != null) { obj._exDividendDays = deserializer.fieldValueToObject(Integer.class, field); } if ((field = msg.getByName("yieldConvention")) != null) { obj._yieldConvention = deserializer.fieldValueToObject(YieldConvention.class, field); } if ((field = msg.getByName("rollToSettlement")) != null) { obj._rollToSettlement = deserializer.fieldValueToObject(Boolean.class, field); } if ((field = msg.getByName("period")) != null) { obj._period = deserializer.fieldValueToObject(Period.class, field); } if ((field = msg.getByName("cashSettled")) != null) { obj._cashSettled = deserializer.fieldValueToObject(Boolean.class, field); } if ((field = msg.getByName("optionExpiryCalculator")) != null) { obj._optionExpiryCalculator = deserializer.fieldValueToObject(String.class, field); } return obj; } }