/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.currency;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
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.id.UniqueId;
/**
* Fudge builder for {@link CurrencyPairs}.
*/
@FudgeBuilderFor(CurrencyPairs.class)
public class CurrencyPairsFudgeBuilder implements FudgeBuilder<CurrencyPairs> {
/**
* Field name for the unique ID
*/
public static final String UNIQUE_ID_FIELD_NAME = "uniqueId";
/**
* Field name for the set of currency pairs
*/
public static final String CURRENCY_PAIRS_FIELD_NAME = "currencyPairs";
@Override
public MutableFudgeMsg buildMessage(FudgeSerializer serializer, CurrencyPairs object) {
MutableFudgeMsg msg = serializer.newMessage();
serializer.addToMessage(msg, UNIQUE_ID_FIELD_NAME, null, object.getUniqueId());
Set<CurrencyPair> pairs = object.getPairs();
// sort the names so it's more obvious when messages are equal
Set<String> pairNames = new TreeSet<>();
for (CurrencyPair pair : pairs) {
pairNames.add(pair.getName());
}
serializer.addToMessage(msg, CURRENCY_PAIRS_FIELD_NAME, null, pairNames);
return msg;
}
@SuppressWarnings("unchecked")
@Override
public CurrencyPairs buildObject(FudgeDeserializer deserializer, FudgeMsg message) {
FudgeField pairsField = message.getByName(CURRENCY_PAIRS_FIELD_NAME);
Set<String> pairNames = deserializer.fieldValueToObject(Set.class, pairsField);
Set<CurrencyPair> pairs = new HashSet<CurrencyPair>(pairNames.size());
for (String pairName : pairNames) {
pairs.add(CurrencyPair.parse(pairName));
}
CurrencyPairs currencyPairs = CurrencyPairs.of(pairs);
FudgeField uniqueIdField = message.getByName(UNIQUE_ID_FIELD_NAME);
if (uniqueIdField != null) {
currencyPairs.setUniqueId(deserializer.fieldValueToObject(UniqueId.class, uniqueIdField));
}
return currencyPairs;
}
}