Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / simulator / interfaces / swing / TableDataReceiver.java
Sakoda2269 on 22 Dec 1 KB エラー処理の追加
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);
		}
	}

}