You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jo...@apache.org on 2020/04/08 13:39:40 UTC
[isis] 01/03: ISIS-2324 Fix Tab layout parsing and rendering
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2324-Merge-kroviz
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 2bc21acfba7977c1aba235b3786b37cce39d58c4
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Apr 8 14:49:40 2020 +0200
ISIS-2324 Fix Tab layout parsing and rendering
---
.../apache/isis/client/kroviz/to/bs3/FieldSet.kt | 12 +-
.../org/apache/isis/client/kroviz/to/bs3/Row.kt | 23 +--
.../snapshots/demo2_0_0/DEMO_TAB_LAYOUT_XML.kt | 160 +++++++++++++++++++++
.../isis/client/kroviz/to/bs3/LayoutXmlTest.kt | 13 ++
4 files changed, 188 insertions(+), 20 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/FieldSet.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/FieldSet.kt
index d0ef987..7cbb8a9 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/FieldSet.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/FieldSet.kt
@@ -6,13 +6,17 @@ import org.w3c.dom.asList
class FieldSet(node: Node) {
var actionList = mutableListOf<Action>()
var propertyList = mutableListOf<Property>()
- var name: String
- var id: String
+ var name: String = ""
+ var id: String = ""
init {
val dyNode = node.asDynamic()
- name = dyNode.getAttribute("name") as String
- id = dyNode.getAttribute("id") as String
+ if (dyNode.hasOwnProperty("name")) {
+ name = dyNode.getAttribute("name") as String
+ }
+ if (dyNode.hasOwnProperty("id")) {
+ id = dyNode.getAttribute("id") as String
+ }
val nl = node.childNodes.asList()
val actList = nl.filter { it.nodeName.equals("cpt:action") }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Row.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Row.kt
index 2732425..cbeb3b3 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Row.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Row.kt
@@ -5,29 +5,20 @@ import org.w3c.dom.Node
class Row(node: Node) {
val colList = mutableListOf<Col>()
- var fieldSet:FieldSet? = null
- var tabGroupList = mutableListOf<TabGroup>()
- lateinit var id:String
+ var id: String = ""
init {
+ val dyNode = node.asDynamic()
+ if (dyNode.hasOwnProperty("id")) {
+ id = dyNode.getAttribute("id") as String
+ }
+
val nodeList = XmlHelper.nonTextChildren(node)
val cl = nodeList.filter { it.nodeName.equals("bs3:col") }
for (n: Node in cl) {
- val col =Col(n)
+ val col = Col(n)
colList.add(col)
}
-
- val fsList = nodeList.filter { it.nodeName.equals("cpt:fieldSet") }
- if (fsList.size == 1) {
- val n = fsList.get(0)
- fieldSet =FieldSet(n)
- }
-
- val tgList = nodeList.filter { it.nodeName.equals("cpt:fieldSet") } //FIXME
- for (n: Node in tgList) {
- val tg =TabGroup(n)
- tabGroupList.add(tg)
- }
}
fun getPropertyList(): List<Property> {
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/DEMO_TAB_LAYOUT_XML.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/DEMO_TAB_LAYOUT_XML.kt
new file mode 100644
index 0000000..8fe4544
--- /dev/null
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/DEMO_TAB_LAYOUT_XML.kt
@@ -0,0 +1,160 @@
+package org.apache.isis.client.kroviz.snapshots.demo2_0_0
+
+import org.apache.isis.client.kroviz.snapshots.Response
+
+object DEMO_TAB_LAYOUT_XML: Response() {
+ override val url = "http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/object-layout"
+ override val str = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:grid xmlns:cpt="http://isis.apache.org/applib/layout/component"
+ xmlns:lnk="http://isis.apache.org/applib/layout/links"
+ xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3">
+ <bs3:row>
+ <bs3:col span="12" unreferencedActions="true">
+ <cpt:domainObject>
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/element</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object"</lnk:type>
+ </cpt:link>
+ </cpt:domainObject>
+ <cpt:action id="clearHints">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/actions/clearHints
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
+ </cpt:link>
+ </cpt:action>
+ <cpt:action id="downloadLayoutXml">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/actions/downloadLayoutXml
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
+ </cpt:link>
+ </cpt:action>
+ <cpt:action id="openRestApi">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/actions/openRestApi
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
+ </cpt:link>
+ </cpt:action>
+ <cpt:action id="rebuildMetamodel">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/actions/rebuildMetamodel
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
+ </cpt:link>
+ </cpt:action>
+ <cpt:action id="doHideField">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/actions/doHideField
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
+ </cpt:link>
+ </cpt:action>
+ <cpt:action id="doShowField">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/actions/doShowField
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
+ </cpt:link>
+ </cpt:action>
+ <cpt:action bookmarking="NEVER" cssClassFa="fa fa-fw fa-download" cssClassFaPosition="LEFT"
+ id="downloadMetaModelXml">
+ <cpt:named>Download Meta Model Xml</cpt:named>
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/actions/downloadMetaModelXml
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
+ </cpt:link>
+ </cpt:action>
+ </bs3:col>
+ </bs3:row>
+ <bs3:row>
+ <bs3:col span="6">
+ <bs3:tabGroup>
+ <bs3:tab name="Tab 1">
+ <bs3:row>
+ <bs3:col span="12">
+ <cpt:fieldSet name="Hideable Field" id="fs1">
+ <cpt:property id="field1">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/property</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/properties/field1
+ </lnk:href>
+ <lnk:type>
+ application/json;profile="urn:org.restfulobjects:repr-types/object-property"
+ </lnk:type>
+ </cpt:link>
+ </cpt:property>
+ </cpt:fieldSet>
+ </bs3:col>
+ </bs3:row>
+ </bs3:tab>
+ <bs3:tab name="Tab 2">
+ <bs3:row>
+ <bs3:col span="12">
+ <cpt:fieldSet id="fs2">
+ <cpt:property id="field2">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/property</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/properties/field2
+ </lnk:href>
+ <lnk:type>
+ application/json;profile="urn:org.restfulobjects:repr-types/object-property"
+ </lnk:type>
+ </cpt:link>
+ </cpt:property>
+ </cpt:fieldSet>
+ </bs3:col>
+ </bs3:row>
+ </bs3:tab>
+ </bs3:tabGroup>
+ </bs3:col>
+ <bs3:col span="6" unreferencedCollections="true">
+ <cpt:fieldSet name="Description" id="description" unreferencedProperties="true">
+ <cpt:property id="description" labelPosition="NONE">
+ <cpt:link>
+ <lnk:rel>urn:org.restfulobjects:rels/property</lnk:rel>
+ <lnk:method>GET</lnk:method>
+ <lnk:href>
+ http://localhost:8080/restful/objects/demo.Tab/ADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8-CiAgICA8ZmllbGQxPmZpZWxkIDE8L2ZpZWxkMT4KICAgIDxmaWVsZDI-ZmllbGQgMjwvZmllbGQyPgogICAgPGhpZGRlbj5mYWxzZTwvaGlkZGVuPgo8L0RlbW8-Cg==/properties/description
+ </lnk:href>
+ <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-property"
+ </lnk:type>
+ </cpt:link>
+ </cpt:property>
+ </cpt:fieldSet>
+ </bs3:col>
+ </bs3:row>
+</bs3:grid>
+"""
+}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/bs3/LayoutXmlTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/bs3/LayoutXmlTest.kt
index e65dd81..e67cbab 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/bs3/LayoutXmlTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/bs3/LayoutXmlTest.kt
@@ -1,6 +1,7 @@
package org.apache.isis.client.kroviz.to.bs3
import org.apache.isis.client.kroviz.handler.LayoutXmlHandler
+import org.apache.isis.client.kroviz.snapshots.demo2_0_0.DEMO_TAB_LAYOUT_XML
import org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0.SO_LAYOUT_XML
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -8,6 +9,18 @@ import kotlin.test.assertEquals
class LayoutXmlTest {
@Test
+ fun testDemoTabGrid() {
+ //given
+ val xmlStr = DEMO_TAB_LAYOUT_XML.str
+ //when
+ val grid = LayoutXmlHandler().parse(xmlStr) as Grid
+ // then
+ console.log("[LXT.testDemoTabGrid]")
+ console.log(grid)
+ assertEquals(2, grid.rows.size) //1
+ }
+
+ @Test
fun testParseXmlLayout() {
//given
val xmlStr = SO_LAYOUT_XML.str