diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java index 1f2480d..2d34a76 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java @@ -30,14 +30,14 @@ public MapTerm toMap() { MapTerm res = new MapTerm(); - res.insert("type", new Constant(type)); - res.insert("id", new Constant(id)); - res.insert("text", new Constant(text)); + res.insert("\"type\"", new Constant(type)); + res.insert("\"id\"", new Constant(id)); + res.insert("\"text\"", new Constant("\"" + text + "\"")); MapTerm stylesMap = new MapTerm(); for(String prop : styles.keySet()) { stylesMap.insert(prop, new Constant(styles.get(prop))); } - res.insert("styles", stylesMap); + res.insert("\"styles\"", stylesMap); return res; } diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java index bd32c17..8997834 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java @@ -7,6 +7,7 @@ import models.algebra.Constant; import models.algebra.Expression; +import models.algebra.Term; import models.dataConstraintModel.JsonTerm; import models.dataConstraintModel.ListTerm; import models.dataConstraintModel.MapTerm; @@ -54,77 +55,81 @@ Expression message = event.getMessage(); - // Remove old native receivers. - if (message instanceof JsonTerm) { + if (message instanceof Term && ((Term) message).getChildren().size() == 1) { + message = ((Term)message).getChild(0); - for (DataTransferChannel channel : channelAndResourcesForReceiving.keySet()) { - for (Resource resource : channelAndResourcesForReceiving.get(channel)) { - simulator.removeNativeReceiver(channel, resource); - } - } - - channelAndResourcesForReceiving.clear(); - - JsonTerm screenContent = (JsonTerm) message; //受け取ったmessageをjsonとして扱う - Resource screenResource = simulator.getCurState().getResource(event.getInputResource().getResourceIdentifier()); //出力チャンネルに接続されたresourceを取得? - Expression widgets = screenContent.get("widgets"); //json化したmessageから"widgets"を取得 - Resource widgetsResource = screenResource.getChildrenMap().get("widgets");//??? - - elements.clear(); - - if(widgets instanceof MapTerm) { - for(String key : ((MapTerm) widgets).keySet()) { // keyはなに? どうやって決められる? - Expression value = ((MapTerm) widgets).get(key); //widgetの構成要素(text, typeなど)を持つjson, 一つのwidgetを表す? - if(value instanceof JsonTerm) { - JsonTerm widget = (JsonTerm) value; //jsonとして扱えるように - Resource widgetResouce = widgetsResource.getChildrenMap().get(key); //??? - Expression type = widget.get("\"type\""); //widgetのtypeを取得 - if(type.toString().equals("\"button\"")) { - - //こんな感じになりそう - Expression text = widget.get("\"text\""); - HtmlElement button = new HtmlElement(type.toString(), key, text.toString().replace("\"", "")); - elements.put(key, button); - - //ボタンが押された時の処理 - //ボタンが押されたかどうかをどうやって確認するか - //そもそもボタンが押されたらREST API が叩かれるのでは? - - //可視化、不可視化のやつ - HtmlElementVisibilityReceiver nativeReceiver = new HtmlElementVisibilityReceiver(button, ws); - simulator.addNativeReceiver(nativeReceiver, setVisibleChannel, widgetResouce); - Set resources = channelAndResourcesForReceiving.get(setVisibleChannel);//この辺謎 - if (resources == null) { - resources = new HashSet<>(); - channelAndResourcesForReceiving.put(setVisibleChannel, resources); - } - resources.add(widgetsResource); - - } else if(type.toString().equals("label")) { - - Expression text = widget.get("\"text\""); - HtmlElement elem = new HtmlElement(type.toString(), key, text.toString().replace("\"", "")); - elements.put(key, elem); - - } else if(type.toString().equals("inputText")) { - - HtmlElement elem = new HtmlElement(type.toString(), key, ""); - elements.put(key, elem); - - } + // Remove old native receivers. + if (message instanceof JsonTerm) { + + for (DataTransferChannel channel : channelAndResourcesForReceiving.keySet()) { + for (Resource resource : channelAndResourcesForReceiving.get(channel)) { + simulator.removeNativeReceiver(channel, resource); } } - JsonTerm json = new JsonTerm(); - json.addMember("method", new Constant("updateHtml")); - ListTerm elements = new ListTerm(); - for(String id : this.elements.keySet()) { - elements.append(this.elements.get(id).toMap()); + channelAndResourcesForReceiving.clear(); + + JsonTerm screenContent = (JsonTerm) message; //受け取ったmessageをjsonとして扱う + Resource screenResource = simulator.getCurState().getResource(event.getInputResource().getResourceIdentifier()); //出力チャンネルに接続されたresourceを取得? + Expression widgets = screenContent.get("widgets"); //json化したmessageから"widgets"を取得 + Resource widgetsResource = screenResource.getChildrenMap().get("widgets");//??? + + elements.clear(); + + if(widgets instanceof MapTerm) { + for(String key : ((MapTerm) widgets).keySet()) { // keyはなに? どうやって決められる? + Expression value = ((MapTerm) widgets).get(key); //widgetの構成要素(text, typeなど)を持つjson, 一つのwidgetを表す? + if(value instanceof JsonTerm) { + JsonTerm widget = (JsonTerm) value; //jsonとして扱えるように + Resource widgetResouce = widgetsResource.getChildrenMap().get(key); //??? + Expression type = widget.get("\"type\""); //widgetのtypeを取得 + if(type.toString().equals("\"button\"")) { + + //こんな感じになりそう + Expression text = widget.get("\"text\""); + HtmlElement button = new HtmlElement(type.toString(), key, text.toString().replace("\"", "")); + elements.put(key, button); + + //ボタンが押された時の処理 + //ボタンが押されたかどうかをどうやって確認するか + //そもそもボタンが押されたらREST API が叩かれるのでは? + + //可視化、不可視化のやつ + HtmlElementVisibilityReceiver nativeReceiver = new HtmlElementVisibilityReceiver(button, ws); + simulator.addNativeReceiver(nativeReceiver, setVisibleChannel, widgetResouce); + Set resources = channelAndResourcesForReceiving.get(setVisibleChannel);//この辺謎 + if (resources == null) { + resources = new HashSet<>(); + channelAndResourcesForReceiving.put(setVisibleChannel, resources); + } + resources.add(widgetsResource); + + } else if(type.toString().equals("label")) { + + Expression text = widget.get("\"text\""); + HtmlElement elem = new HtmlElement(type.toString(), key, text.toString().replace("\"", "")); + elements.put(key, elem); + + } else if(type.toString().equals("inputText")) { + + HtmlElement elem = new HtmlElement(type.toString(), key, ""); + elements.put(key, elem); + + } + } + } + + JsonTerm json = new JsonTerm(); + json.addMember("\"method\"", new Constant("\"updateHtml\"")); + ListTerm elements = new ListTerm(); + for(String id : this.elements.keySet()) { + elements.append(this.elements.get(id).toMap()); + } + json.addMember("\"elements\"",elements); + ws.send(json.toString()); } - ws.send(json.toString()); + } - - } }