package org.marketcetera.core.instruments;
import org.marketcetera.core.Messages;
import org.marketcetera.trade.Currency;
import org.marketcetera.trade.Instrument;
import org.marketcetera.util.misc.ClassVersion;
import quickfix.FieldNotFound;
import quickfix.Message;
import quickfix.field.FutSettDate;
import quickfix.field.FutSettDate2;
import quickfix.field.SecurityType;
import quickfix.field.Symbol;
/**
* Extracts <code>Currency</code> from a <code>Message</code>.
*
* @author <a href="mailto:richard.obrien@qmscapital.com">Richard O'Brien</a>
* @version $Id: CurrencyFromMessage.java 16901 2014-05-11 16:14:11Z colin $
* @since 2.4.0
*/
@ClassVersion("$Id: CurrencyFromMessage.java 16901 2014-05-11 16:14:11Z colin $")
public class CurrencyFromMessage extends InstrumentFromMessage
{
/* (non-Javadoc)
* @see org.marketcetera.core.instruments.InstrumentFromMessage#extract(quickfix.Message)
*/
@Override
public Instrument extract(Message m)
{
Currency instrument=null;
try{
String symbol = m.getString(Symbol.FIELD);
String baseCCY = symbol.substring(0, 3);
String plCCY = symbol.substring(symbol.length()-3,symbol.length());
String nearTenor = "SP";
if(m.isSetField(FutSettDate.FIELD)){
nearTenor = m.getString(FutSettDate.FIELD);
}
if(m.isSetField(FutSettDate2.FIELD)){
String farTenor = m.getString(FutSettDate2.FIELD);
instrument = new Currency(baseCCY, plCCY, nearTenor, farTenor);
}else{
instrument = new Currency(baseCCY, plCCY, nearTenor);
}
if(m.isSetField(quickfix.field.Currency.FIELD)){
String tradedCCY = m.getString(quickfix.field.Currency.FIELD);
instrument.setTradedCCY(tradedCCY);
}
}catch(Exception e){
Messages.ERROR_CURRENCY_FROM_MESSAGE.getText(e.toString());
}
return instrument;
}
/* (non-Javadoc)
* @see org.marketcetera.core.instruments.DynamicInstrumentHandler#isHandled(java.lang.Object)
*/
@Override
protected boolean isHandled(Message inValue)
{
try {
return (inValue.isSetField(SecurityType.FIELD) &&
SecurityType.FOREIGN_EXCHANGE_CONTRACT.equals(inValue.getString(SecurityType.FIELD)));
} catch (FieldNotFound ignore) {
return false;
}
}
}