/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.security.future; import java.util.ArrayList; import java.util.List; import org.fudgemsg.FudgeField; 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.util.fudgemsg.AbstractFudgeBuilder; import com.opengamma.util.time.ZonedDateTimeFudgeBuilder; /** * A Fudge builder for {@code BondFutureSecurity}. */ @FudgeBuilderFor(BondFutureSecurity.class) public class BondFutureSecurityFudgeBuilder extends AbstractFudgeBuilder implements FudgeBuilder<BondFutureSecurity> { /** Field name. */ public static final String BASKET_FIELD_NAME = "basket"; /** Field name. */ public static final String BOND_TYPE_FIELD_NAME = "bondType"; /** Field name. */ public static final String FIRST_DELIVERY_DATE_FIELD_NAME = "firstDeliveryDate"; /** Field name. */ public static final String LAST_DELIVERY_DATE_FIELD_NAME = "lastDeliveryDate"; /** Field name. */ public static final String FIRST_NOTICE_DATE_FIELD_NAME = "firstNoticeDate"; /** Field name. */ public static final String LAST_NOTICE_DATE_FIELD_NAME = "lastNoticeDate"; @Override public MutableFudgeMsg buildMessage(FudgeSerializer serializer, BondFutureSecurity object) { final MutableFudgeMsg msg = serializer.newMessage(); BondFutureSecurityFudgeBuilder.toFudgeMsg(serializer, object, msg); return msg; } public static void toFudgeMsg(FudgeSerializer serializer, BondFutureSecurity object, final MutableFudgeMsg msg) { FutureSecurityFudgeBuilder.toFudgeMsg(serializer, object, msg); if (object.getBasket() != null) { for (BondFutureDeliverable bfd : object.getBasket()) { addToMessage(serializer, msg, BASKET_FIELD_NAME, bfd, BondFutureDeliverable.class); } } addToMessage(msg, FIRST_DELIVERY_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getFirstDeliveryDate())); addToMessage(msg, LAST_DELIVERY_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getLastDeliveryDate())); addToMessage(msg, FIRST_NOTICE_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getFirstNoticeDate())); addToMessage(msg, LAST_NOTICE_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getLastNoticeDate())); } @Override public BondFutureSecurity buildObject(FudgeDeserializer deserializer, FudgeMsg msg) { BondFutureSecurity object = new BondFutureSecurity(); BondFutureSecurityFudgeBuilder.fromFudgeMsg(deserializer, msg, object); return object; } public static void fromFudgeMsg(FudgeDeserializer deserializer, FudgeMsg msg, BondFutureSecurity object) { FutureSecurityFudgeBuilder.fromFudgeMsg(deserializer, msg, object); List<FudgeField> basketFields = msg.getAllByName(BASKET_FIELD_NAME); List<BondFutureDeliverable> basket = new ArrayList<BondFutureDeliverable>(basketFields.size()); for (FudgeField field : basketFields) { basket.add(deserializer.fieldValueToObject(BondFutureDeliverable.class, field)); } object.setBasket(basket); object.setFirstDeliveryDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(FIRST_DELIVERY_DATE_FIELD_NAME))); object.setLastDeliveryDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(LAST_DELIVERY_DATE_FIELD_NAME))); object.setFirstNoticeDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(FIRST_NOTICE_DATE_FIELD_NAME))); object.setLastNoticeDate(ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(LAST_NOTICE_DATE_FIELD_NAME))); } }