package org.marketcetera.photon.views.fixmessagedetail.dialogs.executionreport.data;
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormatterBuilder;
import org.marketcetera.event.HasFIXMessage;
import org.marketcetera.photon.Messages;
import org.marketcetera.trade.ExecutionReport;
import quickfix.Message;
/**
* Execution report field class representing a single
* row in the execution report table
*
* @author milan
*
*/
public abstract class ExecutionReportField
{
/*YYYYMMDD-HH:MM:SS*/
protected static final DateTimeFormatter utc1 = new DateTimeFormatterBuilder().
appendYear(4, 4).
appendMonthOfYear(2).
appendDayOfMonth(2).
appendLiteral('-').
appendHourOfDay(2).
appendLiteral(':').
appendMinuteOfHour(2).
appendLiteral(':').
appendSecondOfMinute(2).
toFormatter();
/*YYYYMMDD-HH:MM:SS.sss*/
protected static final DateTimeFormatter utc2 = new DateTimeFormatterBuilder().
append(utc1).
appendLiteral('.').
appendMillisOfSecond(3).
toFormatter();
//allowed formats
protected String allowedFormats = "YYYYMMDD-HH:MM:SS, YYYYMMDD-HH:MM:SS.sss";
protected String fValue;
public static final String[] NULL_VALUE = null;
public static final String EMPTY_STRING = "";
public abstract String getFieldName();
public abstract String[] getValues();
public abstract void insertField(Message message);
public abstract void parseFromReport(ExecutionReport executionReport);
public abstract int getFieldTag();
public boolean isFixField(){
return true;
}
public boolean validateValue()
{
return fValue != null && !fValue.equals(EMPTY_STRING);
}
public void setSelectedValue(String selectedValue)
{
fValue = selectedValue;
}
public void setSelectedDateValue(Date selectedValue)
{
DateTime dt = new DateTime(selectedValue);
fValue = utc2.print(dt);
}
public String getSelectedValue()
{
return fValue;
}
@Override
public boolean equals(Object o)
{
if(o instanceof ExecutionReportField)
{
ExecutionReportField reportField = (ExecutionReportField) o;
return getFieldTag() == reportField.getFieldTag();
}
return false;
}
public String getValidateMessage()
{
return Messages.ADD_EXECUTION_REPORT_STRING_FORMAT_ERROR.getText();
}
protected Message getMessageFromExecutionReport(ExecutionReport executionReport)
{
HasFIXMessage hasFixMessage = (HasFIXMessage) executionReport;
return hasFixMessage.getMessage();
}
}