package com.activequant.trading.datamodel;
import java.util.List;
import com.activequant.trading.AbstractTSBase;
@SuppressWarnings("serial")
public class OrderTable extends AQTableDataBase {
public enum Columns {
ORDERID(0), INSTRUMENTID(1),
ORDERTYPE(2), SIDE(3), PRICE(4), ORDERQUANTITY(5),
FILLEDQUANTITY(6);
//
int colIdx;
private Columns(int pos) {
this.colIdx = pos;
}
public int colIdx() {
return colIdx;
}
}
private Object[][] data = new Object[0][];
private String[] header;
public OrderTable(){
super();
header = new String[Columns.values().length];
for(int i=0;i<header.length;i++){
header[i] = Columns.values()[i].name();
}
}
public OrderTable(AbstractTSBase abstractTSBase) {
super(abstractTSBase);
header = new String[Columns.values().length];
for(int i=0;i<header.length;i++){
header[i] = Columns.values()[i].name();
}
}
public void addOrder(String orderId, String instrumentId, String orderType, String side, double price,
double totalQuantity, double filledQuantity) {
Object[] row = new Object[header.length];
// convert data to list.
List<Object[]> l = c(data);
int index = getOrderPos(orderId);
if(index!=-1){
// order already known, not re-adding.
row = l.get(index);
}
row[Columns.ORDERID.colIdx] = orderId;
row[Columns.INSTRUMENTID.colIdx] = instrumentId;
row[Columns.ORDERTYPE.colIdx] = orderType;
row[Columns.SIDE.colIdx] = side;
row[Columns.PRICE.colIdx] = price;
row[Columns.ORDERQUANTITY.colIdx] = totalQuantity;
row[Columns.FILLEDQUANTITY.colIdx] = filledQuantity * 1.0;
if(index==-1)l.add(row);
data = c(l);
}
public void delOrder(String orderId){
int i = getOrderPos(orderId);
if(i!=-1){
List<Object[]> l = c(data);
l.remove(i);
data = c(l);
}
}
private int getOrderPos(String orderId){
int index = -1;
for(int i=0;i<data.length;i++){
if(orderId.equals(data[i][Columns.ORDERID.colIdx]))
return i;
}
return index;
}
@Override
public Object[][] getData() {
return data;
}
@Override
public String[] getHeader() {
return header;
}
}