Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / simulator / interfaces / html / HtmlElementTableReceiver.java
package simulator.interfaces.html;

import models.algebra.Constant;
import models.algebra.Expression;
import models.algebra.Term;
import models.dataConstraintModel.JsonTerm;
import models.dataConstraintModel.ListTerm;
import models.dataConstraintModel.MapTerm;
import simulator.Event;
import simulator.SystemState;
import simulator.interfaces.INativeReceiver;

public class HtmlElementTableReceiver implements INativeReceiver {
	
	protected HtmlElement element;
	private final IWebSocketMessageSender ws;
	
	private final String sessionId;
	
	public HtmlElementTableReceiver(HtmlElement elem, IWebSocketMessageSender ws, String sessionId) {
		this.ws = ws;
		this.sessionId = sessionId;
		element = elem;
	}

	@Override
	public void onReceiveFromModel(Event event, SystemState nextSystemState) {
		Expression message = event.getMessage();
		if (message instanceof Term) {
			Expression table = ((Term) message).getChild(0);
			if(table instanceof MapTerm) {
				MapTerm nextTable = (MapTerm)table;
				ListTerm newTableRows = new ListTerm();
				for(String key : nextTable.keySet()) {
					ListTerm row = new ListTerm();
					for(Expression colExp : ((ListTerm)element.getData().get("columns")).getChildren()) {
						String col = colExp.toString();
						col = col.substring(1, col.length() - 1);
						if (((JsonTerm)nextTable.get(key)).get(col) == null) {
							row.addChild(new Constant("\"" + key + "\""));
						} else {
							row.addChild(((JsonTerm)nextTable.get(key)).get(col));
						}
					}
					newTableRows.addChild(row);
				}
				JsonTerm nextTableData = new JsonTerm();
				nextTableData.addMember("columns", element.getData().get("columns"));
				nextTableData.addMember("rows", newTableRows);
				
				JsonTerm json = new JsonTerm();
				json.addMember("method", new Constant("\"updateTable\""));
				json.addMember("id", new Constant("\"" + element.getId() + "\""));
				MapTerm datas = new MapTerm();
				datas.insert("nextTableData", nextTableData);
				json.addMember("datas", datas);
				System.out.println("--------------------------");
				System.out.println(datas);
				System.out.println("--------------------------");
				ws.send(json.toString(), sessionId);
			}
		}
	}

}