package org.marketcetera.quickfix.cficode;
public abstract class CFICode implements CharSequence{
public static final char UNKNOWN_UNUSED = 'X';
public static final char CATEGORY_POSITION = 0;
public static final char GROUP_POSITION = 0;
public static final char CATEGORY_EQUITY = 'E';
public static final char CATEGORY_DEBT = 'D';
public static final char CATEGORY_ENTITLEMENT = 'R';
public static final char CATEGORY_OPTION = 'O';
public static final char CATEGORY_FUTURE = 'F';
public static final char CATEGORY_OTHER = 'M';
public static final char CATEGORY_CURRENCY = 'C';
private char [] chars = new char[6];
/**
*
* @param seq
* @throws StringIndexOutOfBoundsException if seq is shorter than 6 chars
*/
public CFICode(CharSequence seq){
for (int i = 0; i < 6; i++){
chars[i] = seq.charAt(i);
}
}
public char charAt(int index) {
return chars [index];
}
public void setChar(int index, char theChar){
chars[index]=theChar;
}
public int length() {
return chars.length;
}
public CharSequence subSequence(int start, int end) {
return new String(chars, start, end-start);
}
public char getAttribute(int attributeIndex){
return chars[attributeIndex+2];
}
public abstract boolean isValid();
public static CFICode newCFICode(CharSequence codes){
switch (codes.charAt(0)){
case CATEGORY_DEBT:
return new DebtCFICode(codes);
case CATEGORY_EQUITY:
return new EquityCFICode(codes);
case CATEGORY_ENTITLEMENT:
return new EntitlementCFICode(codes);
case CATEGORY_FUTURE:
return new FutureCFICode(codes);
case CATEGORY_OPTION:
return new OptionCFICode(codes);
case CATEGORY_OTHER:
return new OtherCFICode(codes);
default:
throw new IllegalArgumentException();
}
}
public char getCategory()
{
return chars[CATEGORY_POSITION];
}
@Override
public String toString(){
return new String(chars);
}
}