package com.activequant.trading.datamodel; import java.util.List; import com.activequant.trading.AbstractTSBase; @SuppressWarnings("serial") public class AccountTable extends AQTableDataBase { public enum Columns{ VARIABLE(0, "Variable"), VALUE(1, "Value"); // int colIdx; String colname; private Columns(int pos, String colname){ this.colIdx = pos; this.colname = colname; } public int colIdx(){return colIdx;} public String colName(){return colname;} } private Object[][] data = new Object[0][]; private String[] header; public AccountTable(){ super(); header = new String[Columns.values().length]; for(int i=0;i<header.length;i++){ header[i] = Columns.values()[i].name(); } } public AccountTable(AbstractTSBase abstractTSBase) { super(abstractTSBase); header = new String[Columns.values().length]; for(int i=0;i<header.length;i++){ header[i] = Columns.values()[i].colName(); } } public void deleteVariable(String variableId){ if(containsVariable(variableId)){ int pos = getRowIdx(variableId); // List<Object[]> l = c(data); l.remove(pos); data = c(l); } } public boolean containsVariable(String instId){ for(Object[] row : data){ if(row[Columns.VARIABLE.colIdx].equals(instId))return true; } return false; } /** * returns the row index in which information is stored. * This information never changes unless the table is emptied and new instruments are added. * * @param variable * @return */ public int getRowIdx(String variable){ int pos = -1; for(Object[] row : data){ pos++; if(row[Columns.VARIABLE.colIdx].equals(variable))return pos; } throw new RuntimeException("Instrument ID not present in current system configuration. Cannot continue. "); } /** * Adds a variable to be shown in the account table. * * @param variableId */ public void addVariable(String variableId){ // convert data to list. List<Object[]> l = c(data); Object[] row = new Object[header.length]; row[Columns.VARIABLE.colIdx] = variableId; row[Columns.VALUE.colIdx] = ""; l.add(row); data = c(l); } /** * stores a variable value * * @param variableId * @param value */ public void setVariable(String variableId, Object value){ // List<Object[]> rows = c(data); Object[] row = null; int rowIndex = -1; for(int i=0;i<rows.size();i++) { if(rows.get(i)[Columns.VARIABLE.colIdx].equals(variableId)){ row = rows.get(i); rowIndex = i; break; } } if(row == null){ row =new Object[header.length]; rows.add(row); rowIndex = rows.size()-1; } // row[Columns.VARIABLE.colIdx] = variableId; row[Columns.VALUE.colIdx] = value; // data = c(rows); getRowUpdateEvent().fire(rowIndex); } /** * returns the current position for a variable. * * @param variableId * @return */ public Object getCurrentValue(String variableId){ int pos = -1; for(Object[] row : data){ pos++; if(row[Columns.VARIABLE.colIdx].equals(variableId))break; } if(pos!=-1){ return data[pos][Columns.VALUE.colIdx]; } return null; } @Override public Object[][] getData() { return data; } @Override public String[] getHeader() { return header; } }