diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java index 76a1463..a5af5fa 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java @@ -48,6 +48,10 @@ data = newJson; } + public JsonTerm getData() { + return data; + } + public MapTerm toMap() { MapTerm res = new MapTerm(); res.insert("type", new Constant("\"" + type + "\"")); diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTableReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTableReceiver.java index 3d5f915..37e5173 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTableReceiver.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTableReceiver.java @@ -4,6 +4,7 @@ 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; @@ -26,15 +27,32 @@ public void onReceiveFromModel(Event event, SystemState nextSystemState) { Expression message = event.getMessage(); if (message instanceof Term) { - Expression text = ((Term) message).getChild(0); - if(text instanceof Constant) { - element.setText(text.toString()); + 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("\"changeText\"")); + json.addMember("method", new Constant("\"updateTable\"")); json.addMember("id", new Constant("\"" + element.getId() + "\"")); MapTerm datas = new MapTerm(); - datas.insert("newText", new Constant(text.toString())); + datas.insert("nextTableData", nextTableData); json.addMember("datas", datas); ws.send(json.toString(), sessionId); diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java index 9abb876..c620566 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java @@ -34,6 +34,7 @@ public class HtmlPresenter implements INativeReceiver{ public final String screenUpdateChannelName = "ScreenUpdate"; + public final String screenTemplateUpdateChannelName = "ScreenTemplateUpdate"; public final String setVisibleChannelName = "SetVisible"; public final String setTextChannelName = "SetText"; public final String setTableChannelName = "OnTableChanged"; @@ -42,6 +43,7 @@ protected Simulator simulator; protected DataTransferChannel screenUpdateChannel; + protected DataTransferChannel screenTemplateUpdateChannel; protected DataTransferChannel setVisibleChannel; protected DataTransferChannel mouseEventChannel; protected DataTransferChannel textEventChannel; @@ -62,6 +64,7 @@ this.ws = ws; this.sessionId = sessionId; screenUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(screenUpdateChannelName); + screenTemplateUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(screenTemplateUpdateChannelName); setVisibleChannel = (DataTransferChannel) simulator.getModel().getChannel(setVisibleChannelName); mouseEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(mouseEventChannelName); setTextChannel = (DataTransferChannel) simulator.getModel().getChannel(setTextChannelName); @@ -115,6 +118,8 @@ JsonTerm nextSc = (JsonTerm) nextScExp; Expression oldWidgets = curSc.get("widgets"); Expression newWidgets = nextSc.get("widgets"); + String nextScId = nextSc.get("screenId").toString(); + nextScId = nextScId.substring(1, nextScId.length() - 1); if (oldWidgets instanceof MapTerm && newWidgets instanceof MapTerm) { @@ -128,7 +133,8 @@ } if (!newWidSet.isEmpty()) { - addNewWidgets(newWidSet, nextSystemState, event.getInputResource().getResourceIdentifier(), newWidgets, addElements); + nextSystemState.getResource("screenTemplates").getChildrenMap().get(nextScId).getResourceIdentifier(); + addNewWidgets(newWidSet, nextSystemState, event.getInputResource().getResourceIdentifier(), newWidgets, addElements, nextSystemState.getResource("screenTemplates").getChildrenMap().get(nextScId).getResourceIdentifier()); } } @@ -141,7 +147,7 @@ } - private void addNewWidgets(Set newWidSet, Resource screenResource, Expression newWidgets, ListTerm addElements) { + private void addNewWidgets(Set newWidSet, Resource screenResource, Expression newWidgets, ListTerm addElements, Resource screenTemplateResource) { Resource widgetsResource = screenResource.getChildrenMap().get("widgets"); for(String newWid: newWidSet) { @@ -161,7 +167,7 @@ addTextInput(widget, newWid, addElements, widgetResource); break; case "\"table\"": - addTable(widget, newWid, addElements, widgetResource); + addTable(widget, newWid, addElements, screenTemplateResource.getChildrenMap().get("widgets").getChildrenMap().get(newWid)); break; } } @@ -169,9 +175,10 @@ } - private void addNewWidgets(Set newWidSet, SystemState nextSystemState, ResourceIdentifier ri, Expression newWidgets, ListTerm addElements) { + private void addNewWidgets(Set newWidSet, SystemState nextSystemState, ResourceIdentifier ri, Expression newWidgets, ListTerm addElements, ResourceIdentifier screenIdentifier) { Resource screenResource = nextSystemState.getResource(ri); - addNewWidgets(newWidSet, screenResource, newWidgets, addElements); + Resource screenTemplateResource = nextSystemState.getResource(screenIdentifier); + addNewWidgets(newWidSet, screenResource, newWidgets, addElements, screenTemplateResource); } private void addButton(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) {