diff --git a/AlgebraicDataflowArchitectureModel/models/DataStore.model b/AlgebraicDataflowArchitectureModel/models/DataStore.model new file mode 100644 index 0000000..7a5c17a --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/models/DataStore.model @@ -0,0 +1,94 @@ +init { + variables := { + "a" : { + "target": "w1", + "source": "a1", + "value": "_" + }, + "b": { + "target": "w3", + "source": "w2", + "value": "_" + } + } + datastore := { + "accounts": { + "a1": "hello" + } + } +} + +native channel ScreenUpdate { + in screen(curSc: Json, update(curSc, nextSc)) = nextSc +} + +native channel SetLayout { + in screen.layout(curLayout: Bool, setLayout(nextLayout)) = nextLayout +} + +native channel SetVisible(wid: Str) { + in screen.widgets.{wid}.visible(curVisible: Bool, setVisible(nextVisible)) = nextVisible +} + +native channel SetText(wid: Str) { + in screen.widgets.{wid}.text(curText: Str, setText(nextText)) = nextText +} + +native channel MouseEvent(wid: Str) { + out screen.widgets.{wid}.state(curState: Int, mouseEvent(nextState)) = nextState +} + +native channel TextEvent(wid: Str) { + out screen.widgets.{wid}.text(curText: Str, textEvent(nextText)) = nextText +} + +channel AddButton { + out screen.widgets(widgets: Map, addButton(wid: Str, text: Str)) = insert(widgets, wid, {"type": "button", "text": text, "state": 0}) +} + +channel AddTextInput { + out screen.widgets(widgets: Map, addTextInput(wid: Str)) = insert(widgets, wid, {"type": "textInput", "text": "", "state": 0}) +} + +channel signUp{ + out datastore.accounts(accounts: Map, signUp(id, name)) = insert(accounts, id, name) +} + +channel changeName(aid: Str) { + out datastore.accounts.{aid}(curName: Str, changeName(newName)) = newName +} + +channel setTarget { + out variables.a.target(curTarget: Str, setTarget(newTarget: Str)) = newTarget +} + +channel setSource { + out variables.a.source(curSource: Str, setSource(newSource: str)) = newSource +} + +channel setTargetB { + out variables.b.target(curTarget: Str, setTarget(newTarget: Str)) = newTarget +} + +channel setSourceB { + out variables.b.source(curSource: Str, setSource(newSource: str)) = newSource +} + +channel setValue { + in variables.a.source(curSource: Str, setValue(nextSource, nextName)) = nextSource + in datastore.accounts.{nextSource}(curName, setValue(nextSource, nextName)) = nextName + out variables.a.value(curValue: Str, setValue(nextSource, nextName)) = nextName +} + +channel setButtonText { + in variables.a.target(curTarget: Str, setButtonText(nextTarget, nextText)) = nextTarget + in variables.a.value(curText: Str, setButtonText(nextTarget, nextText)) = nextText + out screen.widgets.{nextTarget}.text(curText, setButtonText(nextTarget, nextText)) = nextText +} + +channel setInputTextValue { + in variables.b.source(curSource: Str, setValue2(nextSource, nextTarget, nextValue)) = nextSource + in variables.b.target(curTarget: Str, setValue2(nextTarget, nextTarget, nextValue)) = nextTarget + in screen.widgets.{nextSource}.text(curValue: Str, setValue2(nextSource, nextTarget, nextValue)) = nextValue + out screen.widgets.{nextTarget}.text(curText, setValue2(nextTarget, nextTarget, nextValue)) = nextValue +} diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementMouseSender.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementMouseSender.java index 4b05ecd..4946647 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementMouseSender.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElementMouseSender.java @@ -13,14 +13,9 @@ public class HtmlElementMouseSender extends NativeSender implements IRestEventListener{ - private HtmlScreenSender screenSender; - public HtmlElementMouseSender(Simulator simulator, DataTransferChannel channel, ResourcePath resourcePath, - Resource resource, HtmlScreenSender screenSender) { + Resource resource) { super(simulator, channel, resourcePath, resource); - this.screenSender = screenSender; - System.out.println(resource.getResourceIdentifier().getPathParams().get(0)); - System.out.println(simulator.getCurState().getResource(resource.getResourceIdentifier()).getChildrenMap().get("onPressed").getState().getValue()); } @Override @@ -38,9 +33,6 @@ Term termMessage = (Term) eventMessage.clone(); termMessage.setChild(0, zero); sendToModel(termMessage); - - JsonTerm term = (JsonTerm) simulator.getCurState().getResource(resource.getResourceIdentifier()).getChildrenMap().get("onPressed").getState().getValue(); - screenSender.changeScreen((JsonTerm)term.get(new Constant("data"))); } } diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java index 039af3e..9b40eff 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java @@ -27,7 +27,6 @@ public final String setTextChannelName = "SetText"; public final String mouseEventChannelName = "MouseEvent"; public final String textEventChannelName = "TextEvent"; - public final String changeScreenChannelName = "ChangeScreen"; protected Simulator simulator; protected DataTransferChannel screenUpdateChannel; @@ -35,7 +34,6 @@ protected DataTransferChannel mouseEventChannel; protected DataTransferChannel textEventChannel; protected DataTransferChannel setTextChannel; - protected DataTransferChannel changeScreenChannel; protected Map> channelAndResourcesForReceiving = new HashMap<>(); @@ -52,7 +50,6 @@ mouseEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(mouseEventChannelName); setTextChannel = (DataTransferChannel) simulator.getModel().getChannel(setTextChannelName); textEventChannel = (DataTransferChannel) simulator.getModel().getInputChannel(textEventChannelName); - changeScreenChannel = (DataTransferChannel) simulator.getModel().getInputChannel(changeScreenChannelName); simulator.addNativeReceiver(this, screenUpdateChannel); elements = elems; @@ -145,11 +142,9 @@ JsonTerm widget = (JsonTerm) value; Resource widgetResource = widgetsResource.getChildrenMap().get(newWid); Expression type = widget.get("type"); - HtmlScreenSender screenSender = new HtmlScreenSender(simulator, changeScreenChannel, changeScreenChannel.getOutputResources().iterator().next(), - screenResource); switch(type.toString()) { case "\"button\"": - addButton(widget, newWid, addElements, widgetResource, screenSender); + addButton(widget, newWid, addElements, widgetResource); break; case "\"label\"": addLabel(widget, newWid, addElements, widgetResource); @@ -168,7 +163,7 @@ addNewWidgets(newWidSet, screenResource, newWidgets, addElements); } - private void addButton(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource, HtmlScreenSender screenSender) { + private void addButton(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) { String text = widget.get("text").toString(); HtmlElement button = new HtmlElement("button", wid, text); @@ -189,7 +184,7 @@ //ボタンが押されたり離されたりした時を検知 ResourcePath resPath = mouseEventChannel.getOutputResources().iterator().next(); - button.setRestEventListener(new HtmlElementMouseSender(simulator, mouseEventChannel, resPath, widgetResource, screenSender)); + button.setRestEventListener(new HtmlElementMouseSender(simulator, mouseEventChannel, resPath, widgetResource)); //ボタンが透明になったことを通知 HtmlElementVisibilityReceiver nativeVisibilityReceiver = new HtmlElementVisibilityReceiver(button, ws);