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