/**
* Copyright (C) 2012 - 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 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.LocalDate;
import com.google.common.collect.Maps;
import com.opengamma.financial.analytics.cashflow.FixedPaymentMatrix;
import com.opengamma.util.money.MultipleCurrencyAmount;
/**
*
*/
@FudgeBuilderFor(FixedPaymentMatrix.class)
public class FixedPaymentMatrixBuilder extends AbstractFudgeBuilder<FixedPaymentMatrix> {
private static final String DATES_FIELD = "dates";
private static final String MCA_FIELD = "mca";
private static final String MAX_AMOUNTS_FIELD = "maxAmounts";
@Override
public FixedPaymentMatrix buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
final List<FudgeField> dateFields = message.getAllByName(DATES_FIELD);
final List<FudgeField> mcaFields = message.getAllByName(MCA_FIELD);
final Map<LocalDate, MultipleCurrencyAmount> values = Maps.newHashMapWithExpectedSize(dateFields.size());
for (int i = 0; i < dateFields.size(); i++) {
final LocalDate date = deserializer.fieldValueToObject(LocalDate.class, dateFields.get(i));
final MultipleCurrencyAmount mca = deserializer.fieldValueToObject(MultipleCurrencyAmount.class, mcaFields.get(i));
values.put(date, mca);
}
final int maxAmounts = message.getInt(MAX_AMOUNTS_FIELD);
return new FixedPaymentMatrix(values, maxAmounts);
}
@Override
protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final FixedPaymentMatrix object) {
for (final Map.Entry<LocalDate, MultipleCurrencyAmount> entry : object.getValues().entrySet()) {
serializer.addToMessageWithClassHeaders(message, DATES_FIELD, null, entry.getKey());
serializer.addToMessageWithClassHeaders(message, MCA_FIELD, null, entry.getValue());
}
message.add(MAX_AMOUNTS_FIELD, object.getMaxCurrencyAmounts());
}
}