diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTextSender.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTextSender.java new file mode 100644 index 0000000..7fdf1be --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementTextSender.java @@ -0,0 +1,34 @@ +package simulator.interfaces.html; + +import models.algebra.Constant; +import models.algebra.Expression; +import models.algebra.Term; +import models.dataConstraintModel.DataConstraintModel; +import models.dataConstraintModel.JsonTerm; +import models.dataConstraintModel.ResourcePath; +import models.dataFlowModel.DataTransferChannel; +import simulator.Resource; +import simulator.Simulator; +import simulator.interfaces.NativeSender; + +public class HtmlElementTextSender extends NativeSender implements IRestEventListener{ + + public HtmlElementTextSender(Simulator simulator, DataTransferChannel channel, ResourcePath resourcePath, + Resource resource) { + super(simulator, channel, resourcePath, resource); + } + + @Override + public void onEvent(String method, JsonTerm message) { + if(method.equals("onTextChanged")) { + String newText = message.get("newText").toString(); + System.out.println(newText); + Constant text = new Constant(newText, DataConstraintModel.typeString); + Expression sendMessage = channel.getOutputChannelMembers().iterator().next().getStateTransition().getMessageExpression(); + Term termMessage = (Term)sendMessage.clone(); + termMessage.setChild(0, text); + sendToModel(termMessage); + } + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java index fc0aa6c..b6c4736 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java @@ -118,6 +118,12 @@ case "\"button\"": addButton(widget, newWid, addElements, widgetResource); break; + case "\"label\"": + addLabel(widget, newWid, addElements, widgetResource); + break; + case "\"textInput\"": + addTextInput(widget, newWid, addElements, widgetResource); + break; } } } @@ -134,8 +140,7 @@ //ボタンが透明になったことを通知 HtmlElementVisibilityReceiver nativeVisibilityReceiver = new HtmlElementVisibilityReceiver(button, ws); -// simulator.addNativeReceiver(nativeVisibilityReceiver, setVisibleChannel, widgetResource); - simulator.addNativeReceiver(nativeVisibilityReceiver, setVisibleChannel); + simulator.addNativeReceiver(nativeVisibilityReceiver, setVisibleChannel, widgetResource); Map resources = channelAndResourcesForReceiving.get(setVisibleChannel); if (resources == null) { resources = new HashMap<>(); @@ -145,8 +150,7 @@ //ボタンの文字が変わったことを通知 HtmlElementTextReceiver nativeTextReceiver = new HtmlElementTextReceiver(button, ws); -// simulator.addNativeReceiver(nativeTextReceiver, setTextChannel, widgetResource); こっちだと動かない? - simulator.addNativeReceiver(nativeTextReceiver, setTextChannel); + simulator.addNativeReceiver(nativeTextReceiver, setTextChannel, widgetResource); resources = channelAndResourcesForReceiving.get(setTextChannel); if (resources == null) { resources = new HashMap<>(); @@ -157,6 +161,67 @@ elements.put(wid, button); addElements.append(button.toMap()); } + + private void addLabel(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) { + String text = widget.get("\"text\"").toString(); + HtmlElement label = new HtmlElement("label", wid, text); + + //ボタンが透明になったことを通知 + HtmlElementVisibilityReceiver nativeVisibilityReceiver = new HtmlElementVisibilityReceiver(label, ws); + simulator.addNativeReceiver(nativeVisibilityReceiver, setVisibleChannel, widgetResource); + Map resources = channelAndResourcesForReceiving.get(setVisibleChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForReceiving.put(setVisibleChannel, resources); + } + resources.put(wid, widgetResource); + + //ボタンの文字が変わったことを通知 + HtmlElementTextReceiver nativeTextReceiver = new HtmlElementTextReceiver(label, ws); + simulator.addNativeReceiver(nativeTextReceiver, setTextChannel, widgetResource); + resources = channelAndResourcesForReceiving.get(setTextChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForReceiving.put(setTextChannel, resources); + } + resources.put(wid, widgetResource); + + elements.put(wid, label); + addElements.append(label.toMap()); + } + + private void addTextInput(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) { + String text = widget.get("\"text\"").toString(); + HtmlElement textInput = new HtmlElement("textInput", wid, text); + + //文字の変更を検知 + ResourcePath resPath = textEventChannel.getOutputResources().iterator().next(); + textInput.setRestEventListener(new HtmlElementTextSender(simulator, textEventChannel, resPath, widgetResource)); + + //ボタンが透明になったことを通知 + HtmlElementVisibilityReceiver nativeVisibilityReceiver = new HtmlElementVisibilityReceiver(textInput, ws); + simulator.addNativeReceiver(nativeVisibilityReceiver, setVisibleChannel, widgetResource); + Map resources = channelAndResourcesForReceiving.get(setVisibleChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForReceiving.put(setVisibleChannel, resources); + } + resources.put(wid, widgetResource); + + //ボタンの文字が変わったことを通知 + HtmlElementTextReceiver nativeTextReceiver = new HtmlElementTextReceiver(textInput, ws); + simulator.addNativeReceiver(nativeTextReceiver, setTextChannel, widgetResource); + resources = channelAndResourcesForReceiving.get(setTextChannel); + if (resources == null) { + resources = new HashMap<>(); + channelAndResourcesForReceiving.put(setTextChannel, resources); + } + resources.put(wid, widgetResource); + + elements.put(wid, textInput); + addElements.append(textInput.toMap()); + } + private void deleteOldWidgets(Set oldWidSet, ListTerm delElements) { for (String oldWid : oldWidSet) {