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); } } }