diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTableReceiver.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTableReceiver.java new file mode 100644 index 0000000..3d5f915 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTableReceiver.java @@ -0,0 +1,45 @@ +package simulator.interfaces.html; + +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 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 text = ((Term) message).getChild(0); + if(text instanceof Constant) { + element.setText(text.toString()); + + JsonTerm json = new JsonTerm(); + json.addMember("method", new Constant("\"changeText\"")); + json.addMember("id", new Constant("\"" + element.getId() + "\"")); + MapTerm datas = new MapTerm(); + datas.insert("newText", new Constant(text.toString())); + 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 436af3c..9abb876 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java @@ -36,6 +36,7 @@ public final String screenUpdateChannelName = "ScreenUpdate"; public final String setVisibleChannelName = "SetVisible"; public final String setTextChannelName = "SetText"; + public final String setTableChannelName = "OnTableChanged"; public final String mouseEventChannelName = "MouseEvent"; public final String textEventChannelName = "TextEvent"; @@ -45,6 +46,7 @@ protected DataTransferChannel mouseEventChannel; protected DataTransferChannel textEventChannel; protected DataTransferChannel setTextChannel; + protected DataTransferChannel setTableChannel; protected Map> channelAndResourcesForReceiving = new HashMap<>(); @@ -64,6 +66,7 @@ mouseEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(mouseEventChannelName); setTextChannel = (DataTransferChannel) simulator.getModel().getChannel(setTextChannelName); textEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(textEventChannelName); + setTableChannel = (DataTransferChannel) simulator.getModel().getChannel(setTableChannelName); simulator.addNativeReceiver(this, screenUpdateChannel); elements = elems; @@ -413,6 +416,16 @@ } resources.put(wid, widgetResource); + //テーブルのデータが変更されたことを通知 + HtmlElementTableReceiver nativeTableReceiver = new HtmlElementTableReceiver(table, ws, sessionId); + simulator.addNativeReceiver(nativeTableReceiver, setTableChannel, widgetResource.getChildrenMap().get("data")); + resources = channelAndResourcesForReceiving.get(setTableChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForReceiving.put(setTableChannel, resources); + } + resources.put(wid, widgetResource); + elements.put(wid, table); addElements.append(table.toMap()); }