package simulator.interfaces.swing;
import javax.swing.table.DefaultTableModel;
import models.algebra.Constant;
import models.algebra.Expression;
import models.algebra.Term;
import models.dataConstraintModel.JsonTerm;
import models.dataConstraintModel.MapTerm;
import simulator.Event;
import simulator.SystemState;
import simulator.interfaces.INativeReceiver;
public class TableDataReceiver implements INativeReceiver{
protected DefaultTableModel tableModel;
protected String[] columns;
protected String primaryKeyName;
protected boolean primaryKeyVisible;
public TableDataReceiver(DefaultTableModel table, String[] columns, String primaryKeyName) {
this.tableModel = table;
this.columns = columns;
this.primaryKeyName = primaryKeyName;
this.primaryKeyVisible = !primaryKeyName.equals("");
}
@Override
public void onReceiveFromModel(Event event, SystemState nextSystemState) {
Expression message = event.getMessage();
System.out.println(message);
if(message instanceof Term) {
MapTerm data = (MapTerm)((Term) message).getChild(0);
int colNum = columns.length + (primaryKeyVisible ? 1 : 0);
String[][] tableDatas = new String[data.keySet().size()][colNum];
int dataCount = 0;
for(String dataKey : data.keySet()) {
JsonTerm rowData = (JsonTerm) data.get(dataKey);
if(primaryKeyVisible) {
tableDatas[dataCount][0] = dataKey;
for(int j = 1; j < columns.length; j++) {
tableDatas[dataCount][j] = (String)((Constant) rowData.get(columns[j])).getValue();
}
} else {
for(int j = 0; j < columns.length; j++) {
tableDatas[dataCount][j] = (String)((Constant) rowData.get(columns[j])).getValue();
}
}
dataCount++;
}
tableModel.setDataVector(tableDatas, columns);
}
}
}