package org.marketcetera.trade;
import org.marketcetera.util.misc.ClassVersion;
import quickfix.Message;
import quickfix.Field;
import quickfix.StringField;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Collections;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/* $License$ */
/**
* Base class for all messages that wrap a FIX Message.
*
* @author anshul@marketcetera.com
* @version $Id: FIXMessageWrapper.java 16543 2013-04-11 16:02:00Z colin $
* @since 1.0.0
*/
@XmlAccessorType(XmlAccessType.FIELD)
@ClassVersion("$Id: FIXMessageWrapper.java 16543 2013-04-11 16:02:00Z colin $")
public class FIXMessageWrapper implements FIXMessageSupport {
/**
* Creates an instance.
*
* @param inMessage The FIX Message instance.
*/
public FIXMessageWrapper(Message inMessage) {
if(inMessage == null) {
throw new NullPointerException();
}
mMessage = inMessage;
}
/**
* Creates an instance. This empty constructor is intended for use
* by JAXB.
*/
protected FIXMessageWrapper() {
mMessage = null;
}
@Override
public Message getMessage() {
return mMessage;
}
@Override
public synchronized Map<Integer, String> getFields() {
if(mFields == null) {
Map<Integer, String> map = new HashMap<Integer, String>();
Iterator<Field<?>> iterator = getMessage().iterator();
while(iterator.hasNext()) {
Field<?> f = iterator.next();
if(f instanceof StringField) {
map.put(f.getTag(),((StringField)f).getValue());
}
}
mFields = Collections.unmodifiableMap(map);
}
return mFields;
}
private transient Map<Integer,String> mFields;
@XmlJavaTypeAdapter(FIXMessageAdapter.class)
private final Message mMessage;
private static final long serialVersionUID = 1L;
}