diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java index b8655a1..76a1463 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlElement.java @@ -16,6 +16,7 @@ private String text; private Map styles; private Set classes; + private JsonTerm data; private IRestEventListener restEventListener; HtmlElement(String type, String id, String text){ @@ -24,6 +25,7 @@ this.text = text; styles = new HashMap<>(); classes = new HashSet<>(); + data = new JsonTerm(); } public void setStyle(String property, String value) { @@ -42,6 +44,10 @@ classes.remove(className); } + public void setData(JsonTerm newJson) { + data = newJson; + } + public MapTerm toMap() { MapTerm res = new MapTerm(); res.insert("type", new Constant("\"" + type + "\"")); @@ -54,6 +60,7 @@ res.insert("styles", stylesMap); String classTmp = "\"" + String.join(" ", classes) + "\""; res.insert("class", new Constant(classTmp)); + res.insert("data", data); return res; } diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java index 2f8b54c..d991047 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/interfaces/html/HtmlPresenter.java @@ -263,7 +263,7 @@ private void addTextInput(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) { String text = widget.get("text").toString(); - HtmlElement textInput = new HtmlElement("table", wid, text); + HtmlElement textInput = new HtmlElement("textInput", wid, text); Set keySet = widget.keySet(); textInput.setStyle("position", "absolute"); @@ -310,29 +310,91 @@ private void addTable(JsonTerm widget, String wid, ListTerm addElements, Resource widgetResource) { String text = widget.get("text").toString(); - HtmlElement button = new HtmlElement("table", wid, text); + HtmlElement table = new HtmlElement("table", wid, text); Set keySet = widget.keySet(); - button.setStyle("position", "absolute"); + table.setStyle("position", "absolute"); if(keySet.contains("x")) { - button.setStyle("left", "" + widget.get("x") + "px"); + table.setStyle("left", "" + widget.get("x") + "px"); } if(keySet.contains("y")) { - button.setStyle("top", "" + widget.get("y") + "px"); + table.setStyle("top", "" + widget.get("y") + "px"); } if(keySet.contains("width")) { - button.setStyle("width", "" + widget.get("width") + "px"); + table.setStyle("width", "" + widget.get("width") + "px"); } if(keySet.contains("height")) { - button.setStyle("height", "" + widget.get("height") + "px"); + table.setStyle("height", "" + widget.get("height") + "px"); } + MapTerm data = (MapTerm)widget.get("data"); + ListTerm columnsList = (ListTerm)widget.get("columns"); + Constant rowNumExp = (Constant)widget.get("rowNum"); + Constant rowHeightExp = (Constant)widget.get("rowHeight"); + Constant primaryKeyNameExp = (Constant) widget.get("primaryKeyName"); + boolean primaryKeyVisible = !primaryKeyNameExp.getValue().equals(""); + int colNum = columnsList.size() + (primaryKeyVisible ? 1 : 0); + String[] columns = new String[colNum]; + String[][] tableDatas = new String[data.keySet().size()][colNum]; + if(primaryKeyVisible) { + columns[0] = (String)primaryKeyNameExp.getValue(); + for(int i = 1; i < colNum; i++) { + columns[i] = (String)((Constant)columnsList.get(i - 1)).getValue(); + } + } else { + for(int i = 0; i < colNum; i++) { + columns[i] = (String)((Constant)columnsList.get(i)).getValue(); + } + } + int dataCount = 0; + for(String dataKey : data.keySet()) { + JsonTerm rowData = (JsonTerm) data.get(dataKey); + if(primaryKeyVisible) { + tableDatas[dataCount][0] = dataKey; + for(int j = 1; j < columns.length; j++) { + Constant cellValue = (Constant) rowData.get(columns[j]); + if(cellValue == null) { + tableDatas[dataCount][j] = "error"; + } else { + tableDatas[dataCount][j] = (String)((Constant) rowData.get(columns[j])).getValue(); + } + } + } else { + for(int j = 0; j < columns.length; j++) { + Constant cellValue = (Constant) rowData.get(columns[j]); + if(cellValue == null) { + tableDatas[dataCount][j] = "error"; + } else { + tableDatas[dataCount][j] = (String)((Constant) rowData.get(columns[j])).getValue(); + } + } + } + dataCount++; + } + + JsonTerm tableDataJson = new JsonTerm(); + ListTerm columnsList2 = new ListTerm(); + for(String col: columns) { + columnsList2.addChild(new Constant("\""+ col + "\"")); + } + tableDataJson.addMember("columns", columnsList2); + ListTerm tableRows = new ListTerm(); + for(String[] row: tableDatas) { + ListTerm rowList = new ListTerm(); + for(String cell: row) { + rowList.addChild(new Constant("\"" + cell + "\"")); + } + tableRows.addChild(rowList); + } + tableDataJson.addMember("rows", tableRows); + table.setData(tableDataJson); + //ボタンが押されたり離されたりした時を検知 ResourcePath resPath = mouseEventChannel.getOutputResources().iterator().next(); - button.setRestEventListener(new HtmlElementMouseSender(simulator, mouseEventChannel, resPath, widgetResource)); + table.setRestEventListener(new HtmlElementMouseSender(simulator, mouseEventChannel, resPath, widgetResource)); //ボタンが透明になったことを通知 - HtmlElementVisibilityReceiver nativeVisibilityReceiver = new HtmlElementVisibilityReceiver(button, ws, sessionId); + HtmlElementVisibilityReceiver nativeVisibilityReceiver = new HtmlElementVisibilityReceiver(table, ws, sessionId); simulator.addNativeReceiver(nativeVisibilityReceiver, setVisibleChannel, widgetResource.getChildrenMap().get("visible")); Map resources = channelAndResourcesForReceiving.get(setVisibleChannel); if (resources == null) { @@ -342,7 +404,7 @@ resources.put(wid, widgetResource); //ボタンの文字が変わったことを通知 - HtmlElementTextReceiver nativeTextReceiver = new HtmlElementTextReceiver(button, ws, sessionId); + HtmlElementTextReceiver nativeTextReceiver = new HtmlElementTextReceiver(table, ws, sessionId); simulator.addNativeReceiver(nativeTextReceiver, setTextChannel, widgetResource.getChildrenMap().get("text")); resources = channelAndResourcesForReceiving.get(setTextChannel); if (resources == null) { @@ -351,8 +413,8 @@ } resources.put(wid, widgetResource); - elements.put(wid, button); - addElements.append(button.toMap()); + elements.put(wid, table); + addElements.append(table.toMap()); } private void deleteOldWidgets(Set oldWidSet, ListTerm delElements) {