diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java index 9fc2dff..0373165 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java @@ -4,6 +4,7 @@ import java.util.Map; import models.algebra.Constant; +import models.dataConstraintModel.JsonTerm; import models.dataConstraintModel.MapTerm; public class HtmlElement { @@ -12,6 +13,7 @@ private final String id; private String text; private Map styles; + private IRestEventListener restEventListener; HtmlElement(String type, String id, String text){ this.type = type; @@ -42,6 +44,11 @@ } + public void onRestEvent(String method, JsonTerm message) { + restEventListener.onEvent(method, message); + } + + public String getType() { return type; } @@ -57,5 +64,9 @@ public void setText(String text) { this.text = text; } + + public void setRestEventListener(IRestEventListener event) { + this.restEventListener = event; + } } diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementMouseSender.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementMouseSender.java new file mode 100644 index 0000000..d1f4d24 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementMouseSender.java @@ -0,0 +1,38 @@ +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 HtmlElementMouseSender extends NativeSender implements IRestEventListener{ + + public HtmlElementMouseSender(Simulator simulator, DataTransferChannel channel, ResourcePath resourcePath, + Resource resource) { + super(simulator, channel, resourcePath, resource); + } + + @Override + public void onEvent(String method, JsonTerm message) { + if(method.equals("onMousePressed")) { + Constant one = new Constant("1", DataConstraintModel.typeInt); + Expression eventMessage = channel.getOutputChannelMembers().iterator().next().getStateTransition().getMessageExpression(); + Term termMessage = (Term)eventMessage.clone(); + termMessage.setChild(0, one); + sendToModel(message); + } else if(method.equals("onMouseReleased")) { + Constant zero = new Constant("0", DataConstraintModel.typeInt); + Expression eventMessage = channel.getOutputChannelMembers().iterator().next().getStateTransition().getMessageExpression(); + Term termMessage = (Term) eventMessage.clone(); + termMessage.setChild(0, zero); + sendToModel(message); + } + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java index a4c56eb..faee114 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java @@ -11,6 +11,7 @@ import models.dataConstraintModel.JsonTerm; import models.dataConstraintModel.ListTerm; import models.dataConstraintModel.MapTerm; +import models.dataConstraintModel.ResourcePath; import models.dataFlowModel.DataTransferChannel; import simulator.Event; import simulator.Resource; @@ -36,8 +37,9 @@ protected Map elements; protected IWebSocketMessageSender ws; + - public HtmlPresenter(Simulator simulator, IWebSocketMessageSender ws) { + public HtmlPresenter(Simulator simulator, IWebSocketMessageSender ws, Map elems) { this.simulator = simulator; this.ws = ws; screenUpdateChannel = (DataTransferChannel) simulator.getModel().getChannel(screenUpdateChannelName); @@ -46,7 +48,7 @@ textEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(textEventChannelName); simulator.addNativeReceiver(this, screenUpdateChannel); - elements = new HashMap<>(); + elements = elems; } @@ -111,7 +113,7 @@ switch(type.toString()) { case "\"button\"": - addButton(widget, newWid, addElements); + addButton(widget, newWid, addElements, widgetResource); break; } } @@ -119,9 +121,11 @@ } - private void addButton(JsonTerm widget, String wid, ListTerm addElements) { + private void addButton(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) { String text = widget.get("\"text\"").toString(); HtmlElement button = new HtmlElement("button", wid, text); + ResourcePath resPath = mouseEventChannel.getOutputResources().iterator().next(); + button.setRestEventListener(new HtmlElementMouseSender(simulator, mouseEventChannel, resPath, widgetResource)); elements.put(wid, button); addElements.append(button.toMap()); } diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/IRestEventListener.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/IRestEventListener.java new file mode 100644 index 0000000..58fc999 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/IRestEventListener.java @@ -0,0 +1,9 @@ +package simulator.interfaces.html; + +import models.dataConstraintModel.JsonTerm; + +public interface IRestEventListener { + + public void onEvent(String method, JsonTerm message); + +}