package com.activequant.trading.datamodel;
import java.util.List;
import com.activequant.trading.AbstractTSBase;
@SuppressWarnings("serial")
public class QuoteTable extends AQTableDataBaseAlpha {
public enum Columns {
INSTRUMENTID(0), BIDSIZE(1), BID(2), ASK(3), ASKSIZE(4), TRADE(5), TRADESIZE(
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 QuoteTable() {
super();
header = new String[Columns.values().length];
for (int i = 0; i < header.length; i++) {
header[i] = Columns.values()[i].name();
}
}
public QuoteTable(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 deleteInstrument(String instrumentId) {
if (containsInstrumentId(instrumentId)) {
int pos = getPosition(instrumentId);
//
List<Object[]> l = c(data);
l.remove(pos);
data = c(l);
}
}
@Override
public Object getValueAt(int row, int col) {
Object o = getCell(row, col);
if (o == null)
return "";
if (o.getClass().isAssignableFrom(Double.class)) {
// adding a formatter.
Double val = (Double) o;
return dcf.format(val);
}
return o;
}
public boolean containsInstrumentId(String instId) {
for (Object[] row : data) {
if (row[Columns.INSTRUMENTID.colIdx].equals(instId))
return true;
}
return false;
}
/**
* delegates to get Position
*
* @param instrumentId
* @return
*/
public int getRowIndex(String instrumentId) {
int pos = -1;
for (Object[] row : data) {
pos++;
if (row[Columns.INSTRUMENTID.colIdx].equals(instrumentId))
return pos;
}
throw new RuntimeException(
"Instrument ID not present in current system configuration. Cannot continue. ");
}
/**
* deprecated, users please use getRowIndex in the future ..
*
* @param instId
* @return
*/
@Deprecated
public int getPosition(String instId) {
return getRowIndex(instId);
}
public void addInstrument(String instrumentId) {
// convert data to list.
List<Object[]> l = c(data);
Object[] row = new Object[header.length];
row[Columns.INSTRUMENTID.colIdx] = instrumentId;
l.add(row);
data = c(l);
}
@Override
public Object[][] getData() {
return data;
}
@Override
public String[] getHeader() {
return header;
}
@Override
public void signalUpdate() {
super.signalUpdate();
if (getAbstractTSBase().getQuoteViz() == null) {
return;
}
getAbstractTSBase().getQuoteViz().changeSelection(getRowSelected(),
getColSelected(), false, false);
}
}