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 2021/07/06 15:21:06 UTC
[isis] branch ISIS-2505_Catch_Up_With_Demo_Examples updated
(79f5f42 -> f110a70)
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a change to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git.
from 79f5f42 ISIS-2505 Parented Table shows up with 2/4 Column headers, but no data yet
new 7faf75a ISIS-2505 all attributes in parented collections shown in table header, preparation for object-icon, response column added in EventLogTable
new 5e2ed9c ISIS-2505 Credits/Icons/Buttons in RoStatusBar
new 375f326 ISIS-2505 parentedCollection (BasicTypes->String) renders two empty entries
new 9aaf69c ISIS-2505 (some) columns hidden, Properties/PropertyFacade introduced
new b0304a2 ISIS-2505 FieldsetPanel.legend capitalized
new 8737135 ISIS-2505 CollectionProperties reklated tests fixed - data not rendered yet
new f110a70 ISIS-2505 upgrade KVision, Kotlin, Serialization
The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
incubator/clients/kroviz/build.gradle.kts | 25 +-
incubator/clients/kroviz/gradle.properties | 6 +-
incubator/clients/kroviz/settings.gradle.kts | 4 -
.../kroviz/core/aggregator/AggregatorWithLayout.kt | 9 +-
.../kroviz/core/aggregator/BaseAggregator.kt | 14 +-
.../kroviz/core/aggregator/CollectionAggregator.kt | 17 +-
.../core/aggregator/DomainTypesAggregator.kt | 2 +-
.../kroviz/core/aggregator/ObjectAggregator.kt | 2 +-
.../isis/client/kroviz/core/event/LogEntry.kt | 17 +-
.../client/kroviz/core/event/LogEntryDecorator.kt | 2 -
.../client/kroviz/core/event/RoXmlHttpRequest.kt | 2 +-
.../isis/client/kroviz/core/model/CollectionDM.kt | 21 +-
.../kroviz/core/model/CollectionProperties.kt | 99 ++++++
.../kroviz/core/model/DisplayModelWithLayout.kt | 36 +--
.../client/kroviz/handler/CollectionHandler.kt | 1 -
.../client/kroviz/handler/DomainTypesHandler.kt | 5 +-
.../isis/client/kroviz/handler/HttpErrorHandler.kt | 1 -
.../{CollectionHandler.kt => IconHandler.kt} | 16 +-
.../isis/client/kroviz/handler/LayoutHandler.kt | 4 +-
.../isis/client/kroviz/handler/LayoutXmlHandler.kt | 2 +-
.../isis/client/kroviz/handler/ResponseHandler.kt | 4 +-
.../apache/isis/client/kroviz/layout/PropertyLt.kt | 4 +-
.../org/apache/isis/client/kroviz/to/Icon.kt | 8 +
.../apache/isis/client/kroviz/to/bs3/FieldSet.kt | 12 +-
.../apache/isis/client/kroviz/to/bs3/Property.kt | 4 +-
.../isis/client/kroviz/ui/builder/ColBuilder.kt | 16 +-
.../isis/client/kroviz/ui/core/ColumnFactory.kt | 44 +--
.../apache/isis/client/kroviz/ui/core/Constants.kt | 1 +
.../isis/client/kroviz/ui/core/FormPanelFactory.kt | 6 +-
.../isis/client/kroviz/ui/core/MenuFactory.kt | 2 -
.../apache/isis/client/kroviz/ui/core/RoMenuBar.kt | 2 +-
.../isis/client/kroviz/ui/core/RoStatusBar.kt | 33 +-
.../apache/isis/client/kroviz/ui/core/RoTable.kt | 14 +
.../apache/isis/client/kroviz/ui/core/RoView.kt | 2 +-
.../apache/isis/client/kroviz/ui/core/UiManager.kt | 2 -
.../isis/client/kroviz/ui/dialog/DiagramDialog.kt | 1 +
.../isis/client/kroviz/ui/panel/EventLogTable.kt | 43 ++-
.../apache/isis/client/kroviz/utils/IconManager.kt | 3 +-
.../org/apache/isis/client/kroviz/utils/Utils.kt | 26 +-
.../kroviz/src/main/resources/css/kroviz.css | 19 +-
.../core/aggregator/CollectionAggregatorTest.kt | 7 +-
.../client/kroviz/core/model/CollectionDMTest.kt | 6 +-
.../snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt | 344 ++++++++-------------
.../kroviz/snapshots/demo2_0_0/Response2Handler.kt | 2 +-
.../org/apache/isis/client/kroviz/to/LinkTest.kt | 12 +-
.../apache/isis/client/kroviz/to/TObjectTest.kt | 6 +-
.../clients/kroviz/webpack.config.d/bootstrap.js | 6 +-
incubator/clients/kroviz/webpack.config.d/css.js | 3 +-
incubator/clients/kroviz/webpack.config.d/file.js | 5 +-
incubator/clients/kroviz/webpack.config.d/jed.js | 7 -
.../clients/kroviz/webpack.config.d/minify.js | 17 -
.../clients/kroviz/webpack.config.d/webpack.js | 9 +
52 files changed, 524 insertions(+), 431 deletions(-)
create mode 100644 incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionProperties.kt
copy incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/{CollectionHandler.kt => IconHandler.kt} (74%)
create mode 100644 incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Icon.kt
delete mode 100644 incubator/clients/kroviz/webpack.config.d/jed.js
delete mode 100644 incubator/clients/kroviz/webpack.config.d/minify.js
[isis] 05/07: ISIS-2505 FieldsetPanel.legend capitalized
Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git
commit b0304a2c50ca418f7600f26e822ab78df111f26f
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Fri Jul 2 08:33:27 2021 +0200
ISIS-2505 FieldsetPanel.legend capitalized
---
.../kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
index 5274df1..e6188c3 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
@@ -27,7 +27,6 @@ import org.apache.isis.client.kroviz.to.bs3.Col
import org.apache.isis.client.kroviz.ui.core.MenuFactory
import org.apache.isis.client.kroviz.ui.core.RoDisplay
import org.apache.isis.client.kroviz.ui.core.RoTable
-import org.apache.isis.client.kroviz.utils.Utils
class ColBuilder : UiBuilder() {
@@ -47,8 +46,9 @@ class ColBuilder : UiBuilder() {
val fsCpt = FieldSetBuilder().create(fs, tObject, dsp)!!
var legend = fs.name
if (legend.trim().length == 0) {
- legend = Utils.enCamel(fs.id) //IMPROVE uppercase firstchar
+ legend = fs.id
}
+ legend = legend.capitalize()
val fsPanel = FieldsetPanel(legend = legend).add(fsCpt)
val tto = TooltipOptions(title = fs.id)
fsPanel.enableTooltip(tto)
@@ -67,7 +67,7 @@ class ColBuilder : UiBuilder() {
console.log(collectionDM.grid)
console.log(collectionDM.layout)
val tblCpt = RoTable(collectionDM)
- val fsPanel = FieldsetPanel(legend = key).add(tblCpt)
+ val fsPanel = FieldsetPanel(legend = key.capitalize()).add(tblCpt)
panel.add(fsPanel)
collectionDM.isRendered = true
}
[isis] 04/07: ISIS-2505 (some) columns hidden,
Properties/PropertyFacade introduced
Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 9aaf69c46935190734e836f78b70469515b0fc10
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Thu Jul 1 21:20:45 2021 +0200
ISIS-2505 (some) columns hidden, Properties/PropertyFacade introduced
---
.../kroviz/core/model/DisplayModelWithLayout.kt | 40 +++--------
.../isis/client/kroviz/core/model/Properties.kt | 82 ++++++++++++++++++++++
.../apache/isis/client/kroviz/layout/PropertyLt.kt | 4 +-
.../apache/isis/client/kroviz/to/bs3/Property.kt | 4 +-
.../isis/client/kroviz/ui/builder/ColBuilder.kt | 7 +-
.../isis/client/kroviz/ui/core/ColumnFactory.kt | 24 ++++---
6 files changed, 114 insertions(+), 47 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
index b6d9f70..467680a 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
@@ -21,7 +21,6 @@ package org.apache.isis.client.kroviz.core.model
import org.apache.isis.client.kroviz.layout.Layout
import org.apache.isis.client.kroviz.layout.PropertyLt
import org.apache.isis.client.kroviz.layout.RowLt
-import org.apache.isis.client.kroviz.to.Extensions
import org.apache.isis.client.kroviz.to.Property
import org.apache.isis.client.kroviz.to.bs3.Grid
@@ -29,42 +28,20 @@ abstract class DisplayModelWithLayout : DisplayModel() {
var layout: Layout? = null
var grid: Grid? = null
- var propertyDescriptionList = mutableMapOf<String, String>()
- var propertyList = mutableListOf<Property>()
+ var propertyDescriptionList = mutableListOf<Property>()
var propertyLayoutList = mutableListOf<PropertyLt>()
+ val properties = Properties()
override fun canBeDisplayed(): Boolean {
-// testPropertyNamesMatch()
return when {
isRendered -> false
layout == null -> false
grid == null -> false
- else -> {
- val pls = propertyLayoutList.size
- val pds = propertyDescriptionList.size
- val descriptionsComplete = pds >= pls
- descriptionsComplete
- }
+ propertyDescriptionList.isEmpty() -> false
+ else -> true
}
}
- /*
- check that property names match in:
- * propertyList
- * propertyLayoutList
- * propertyDescriptionList
- */
- fun testPropertyNamesMatch() {
- val ps = propertyList.size
- val pls = propertyLayoutList.size
- val pds = propertyDescriptionList.size
- val sizeOK = (ps >= pds) && (pds >= pls)
- console.log("[DMWL.testPropertyNamesMatch] $sizeOK")
- console.log(propertyList)
- console.log(propertyLayoutList)
- console.log(propertyDescriptionList)
- }
-
fun addLayout(layout: Layout) {
this.layout = layout
initPropertyLayoutList(layout)
@@ -83,6 +60,7 @@ abstract class DisplayModelWithLayout : DisplayModel() {
console.log("[DMWL.initLayout4Row]")
console.log(fs.property)
propertyLayoutList.addAll(fs.property)
+ properties.addAllPropertyLayout(fs.property)
}
c.tabGroup.forEach { tg ->
tg.tab.forEach { t ->
@@ -95,14 +73,12 @@ abstract class DisplayModelWithLayout : DisplayModel() {
}
fun addPropertyDescription(p: Property) {
- val id = p.id
- val e: Extensions = p.extensions!!
- val friendlyName = e.friendlyName
- propertyDescriptionList.put(id, friendlyName)
+ propertyDescriptionList.add(p)
+ properties.addPropertyDescription(p)
}
fun addProperty(property: Property) {
- propertyList.add(property)
+ properties.addProperty(property)
}
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Properties.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Properties.kt
new file mode 100644
index 0000000..6c00954
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Properties.kt
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.client.kroviz.core.model
+
+import org.apache.isis.client.kroviz.layout.PropertyLt
+import org.apache.isis.client.kroviz.to.Extensions
+import org.apache.isis.client.kroviz.to.Property
+
+class Properties() {
+ val list = mutableListOf<PropertyFacade>()
+
+ fun addProperty(property: Property) {
+ val id = property.id
+ val pf = findOrCreate(id)
+ pf.property = property
+ }
+
+ fun addAllPropertyLayout(layoutList: List<PropertyLt>) {
+ fun addPropertyLayout(layout: PropertyLt) {
+ val id = layout.id!!
+ val pf = findOrCreate(id)
+ pf.layout = layout
+ }
+ layoutList.forEach { addPropertyLayout(it) }
+ }
+
+ fun addPropertyDescription(description: Property) {
+ val id = description.id
+ val pf = findOrCreate(id)
+ val e: Extensions = description.extensions!!
+ pf.friendlyName = e.friendlyName
+ }
+
+ private fun findOrCreate(id: String): PropertyFacade {
+ var pf = list.find { it.key == id }
+ if (pf == null) {
+ pf = PropertyFacade(id)
+ list.add(pf)
+ }
+ return pf
+ }
+
+}
+
+/**
+ * Properties have three aspects:
+ *
+ * - Member of a DomainObject
+ * - Description (labels, friendlyName)
+ * - Layout
+ *
+ * All three are required in order to display correctly in a table.
+ */
+class PropertyFacade(val key: String) {
+ var property: Property? = null
+ var friendlyName: String = ""
+ var layout: PropertyLt? = null
+
+ fun hidden(): Boolean {
+ if (layout != null) {
+ return (layout!!.hidden != null)
+ }
+ return false
+ }
+
+}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/layout/PropertyLt.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/layout/PropertyLt.kt
index e5c3896..8b7ce90 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/layout/PropertyLt.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/layout/PropertyLt.kt
@@ -22,12 +22,12 @@ import kotlinx.serialization.Serializable
import org.apache.isis.client.kroviz.to.Link
@Serializable
-data class PropertyLt(val named: String? = null,
+data class PropertyLt(val id: String? = null,
+ val named: String? = null,
val describedAs: String? = null,
val action: List<ActionLt> = emptyList(),
var metadataError: String? = null,
val link: Link? = null,
- val id: String? = null,
val cssClass: String? = null,
val hidden: String? = null, //ALL_TABLES
val labelPosition: String? = null,
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
index 9485d6a..d1683b2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
@@ -25,17 +25,17 @@ import org.w3c.dom.asList
//IMPROVE class differs in many aspects from org.ro.to.Property - to be refactored?
class Property(node: Node) {
var id: String
+ var named = ""
var link: Link? = null
var hidden: String = "" // USE ENUM Where? = null
var typicalLength: Int = 0
var multiLine: Int = 1
var describedAs: String? = null
- var named = ""
lateinit var action: Action
init {
val dn = node.asDynamic()
- id = dn.getAttribute("hidden")
+ hidden = dn.getAttribute("hidden")
id = dn.getAttribute("id") as String
typicalLength = dn.getAttribute("typicalLength")
multiLine = dn.getAttribute("multiLine")
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
index 91876ad..5274df1 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
@@ -27,6 +27,7 @@ import org.apache.isis.client.kroviz.to.bs3.Col
import org.apache.isis.client.kroviz.ui.core.MenuFactory
import org.apache.isis.client.kroviz.ui.core.RoDisplay
import org.apache.isis.client.kroviz.ui.core.RoTable
+import org.apache.isis.client.kroviz.utils.Utils
class ColBuilder : UiBuilder() {
@@ -44,7 +45,11 @@ class ColBuilder : UiBuilder() {
}
for (fs in col.fieldSetList) {
val fsCpt = FieldSetBuilder().create(fs, tObject, dsp)!!
- val fsPanel = FieldsetPanel(legend = fs.name).add(fsCpt)
+ var legend = fs.name
+ if (legend.trim().length == 0) {
+ legend = Utils.enCamel(fs.id) //IMPROVE uppercase firstchar
+ }
+ val fsPanel = FieldsetPanel(legend = legend).add(fsCpt)
val tto = TooltipOptions(title = fs.id)
fsPanel.enableTooltip(tto)
panel.add(fsPanel)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
index 6c3b951..31ed7d6 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
@@ -69,18 +69,22 @@ class ColumnFactory {
columns.add(icon)
}
- val propertyLabels = displayCollection.propertyDescriptionList
+ val propertyLabels = displayCollection.properties.list
for (pl in propertyLabels) {
- val id = pl.key
- val friendlyName = pl.value
- var cd = ColumnDefinition<Exposer>(
- title = friendlyName,
- field = id,
- headerFilter = Editor.INPUT)
- if (id == "object") {
- cd = buildLink()
+ console.log("[CF.buildColumns]")
+ console.log(pl.hidden())
+ if (!pl.hidden()) {
+ val id = pl.key
+ val friendlyName = pl.friendlyName
+ var cd = ColumnDefinition<Exposer>(
+ title = friendlyName,
+ field = id,
+ headerFilter = Editor.INPUT)
+ if (id == "object") {
+ cd = buildLink()
+ }
+ columns.add(cd)
}
- columns.add(cd)
}
return columns
}
[isis] 07/07: ISIS-2505 upgrade KVision, Kotlin, Serialization
Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git
commit f110a709343a841653b572c379480ec7dfe33875
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Tue Jul 6 17:20:30 2021 +0200
ISIS-2505 upgrade KVision, Kotlin, Serialization
---
incubator/clients/kroviz/build.gradle.kts | 25 ++++++++++++---------
incubator/clients/kroviz/gradle.properties | 6 ++---
incubator/clients/kroviz/settings.gradle.kts | 4 ----
.../core/aggregator/DomainTypesAggregator.kt | 1 +
.../client/kroviz/handler/CollectionHandler.kt | 1 -
.../isis/client/kroviz/handler/IconHandler.kt | 2 +-
.../isis/client/kroviz/ui/core/ColumnFactory.kt | 11 ++-------
.../isis/client/kroviz/ui/core/FormPanelFactory.kt | 2 +-
.../apache/isis/client/kroviz/ui/core/RoTable.kt | 16 ++++++++++++-
.../apache/isis/client/kroviz/ui/core/RoView.kt | 2 +-
.../apache/isis/client/kroviz/utils/IconManager.kt | 3 ++-
.../org/apache/isis/client/kroviz/utils/Utils.kt | 26 +++++++++++++---------
.../core/aggregator/CollectionAggregatorTest.kt | 3 ++-
.../kroviz/snapshots/demo2_0_0/Response2Handler.kt | 2 +-
.../clients/kroviz/webpack.config.d/bootstrap.js | 6 ++---
incubator/clients/kroviz/webpack.config.d/css.js | 3 +--
incubator/clients/kroviz/webpack.config.d/file.js | 5 +----
incubator/clients/kroviz/webpack.config.d/jed.js | 7 ------
.../clients/kroviz/webpack.config.d/minify.js | 17 --------------
.../clients/kroviz/webpack.config.d/webpack.js | 9 ++++++++
20 files changed, 72 insertions(+), 79 deletions(-)
diff --git a/incubator/clients/kroviz/build.gradle.kts b/incubator/clients/kroviz/build.gradle.kts
index 01502fd..116687c 100644
--- a/incubator/clients/kroviz/build.gradle.kts
+++ b/incubator/clients/kroviz/build.gradle.kts
@@ -48,13 +48,16 @@ kotlin {
outputFileName = "main.bundle.js"
sourceMaps = true
devServer = KotlinWebpackConfig.DevServer(
- open = false,
- port = 3000,
- proxy = mapOf(
- "/kv/*" to "http://localhost:8080",
- "/kvws/*" to mapOf("target" to "ws://localhost:8080", "ws" to true)
- ),
- contentBase = listOf("$buildDir/processedResources/js/main")
+ open = false,
+ port = 3000,
+ proxy = mutableMapOf(
+ "/kv/*" to "http://localhost:8080",
+ "/kvws/*" to mapOf(
+ "target" to "ws://localhost:8080",
+ "ws" to true
+ )
+ ),
+ static = mutableListOf("$buildDir/processedResources/js/main")
)
}
webpackTask {
@@ -127,9 +130,9 @@ afterEvaluate {
exec {
executable = getNodeJsBinaryExecutable()
args(
- "${rootProject.buildDir}/js/node_modules/gettext.js/bin/po2json",
- it.absolutePath,
- "${it.parent}/${it.nameWithoutExtension}.json"
+ "${rootProject.buildDir}/js/node_modules/gettext.js/bin/po2json",
+ it.absolutePath,
+ "${it.parent}/${it.nameWithoutExtension}.json"
)
println("Converted ${it.name} to ${it.nameWithoutExtension}.json")
}
@@ -142,7 +145,7 @@ afterEvaluate {
group = "package"
destinationDirectory.set(file("$buildDir/libs"))
val distribution =
- project.tasks.getByName("browserProductionWebpack", KotlinWebpack::class).destinationDirectory!!
+ project.tasks.getByName("browserProductionWebpack", KotlinWebpack::class).destinationDirectory!!
from(distribution) {
include("*.*")
}
diff --git a/incubator/clients/kroviz/gradle.properties b/incubator/clients/kroviz/gradle.properties
index 08feff5..0b171a6 100644
--- a/incubator/clients/kroviz/gradle.properties
+++ b/incubator/clients/kroviz/gradle.properties
@@ -18,8 +18,8 @@
#
javaVersion=1.8
#Plugins
-systemProp.kotlinVersion=1.4.32
-serializationVersion=1.1.0
+systemProp.kotlinVersion=1.5.10
+serializationVersion=1.2.1
#Dependencies
-systemProp.kvisionVersion=4.4.0
+systemProp.kvisionVersion=4.8.3
kotlin.js.compiler=ir
diff --git a/incubator/clients/kroviz/settings.gradle.kts b/incubator/clients/kroviz/settings.gradle.kts
index 0e5d180..80a9293 100644
--- a/incubator/clients/kroviz/settings.gradle.kts
+++ b/incubator/clients/kroviz/settings.gradle.kts
@@ -21,11 +21,7 @@
pluginManagement {
repositories {
mavenCentral()
- jcenter()
maven { url = uri("https://plugins.gradle.org/m2/") }
- maven { url = uri("https://dl.bintray.com/kotlin/kotlin-eap") }
- maven { url = uri("https://kotlin.bintray.com/kotlinx") }
- maven { url = uri("https://dl.bintray.com/rjaros/kotlin") }
mavenLocal()
}
resolutionStrategy {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
index 2240756..a3b2fc6 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
@@ -49,6 +49,7 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() {
}
private fun handleAction(obj: Action) {
+ console.log("[DTA.handleAction] $obj")
throw Throwable("[DomainTypesAggregator.handleAction] not implemented yet") //dsp.addData(obj)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/CollectionHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/CollectionHandler.kt
index c5e70b5..8df6429 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/CollectionHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/CollectionHandler.kt
@@ -24,7 +24,6 @@ import org.apache.isis.client.kroviz.to.TransferObject
class CollectionHandler : BaseHandler() {
-
override fun parse(response: String): TransferObject {
return Json.decodeFromString(Collection.serializer(), response)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
index 3736ad9..467954b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
@@ -29,7 +29,7 @@ class IconHandler : BaseHandler() {
}
override fun parse(response: String): TransferObject? {
- return Icon(response as Blob)
+ return Icon(response as Blob) //TODO
}
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
index 1f14de3..dadaf10 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
@@ -53,14 +53,7 @@ class ColumnFactory {
displayCollection: CollectionDM,
withCheckBox: Boolean = false): List<ColumnDefinition<dynamic>> {
- val model = mutableListOf<dynamic>()
- displayCollection.data.forEach {
- model.add(it.asDynamic())
- }
- console.log("[CF.buildColumns]")
- console.log(model::class.simpleName)
- console.log(model)
- val columns = mutableListOf<ColumnDefinition<dynamic>>()
+ val columns = mutableListOf<ColumnDefinition<Exposer>>()
if (withCheckBox) {
val checkBox = buildCheckBox()
columns.add(checkBox)
@@ -71,7 +64,7 @@ class ColumnFactory {
columns.add(menu)
val icon = buildLinkIcon()
- columns.add(icon)
+ columns.add(icon)
}
val propertyLabels = displayCollection.properties.list
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/FormPanelFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/FormPanelFactory.kt
index 833c45f..9c0a852 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/FormPanelFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/FormPanelFactory.kt
@@ -168,7 +168,7 @@ class FormPanelFactory(items: List<FormItem>) : VPanel() {
private fun createImage(fi: FormItem): VPanel {
val panel = VPanel {
when (val fc = fi.content) {
- fc is Image -> fc
+// fc is Image -> fc
fc is String -> {
// interpret as (file) URL and load locally
console.log("[FPF.createImage]")
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
index dcb68ad..be1fd79 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
@@ -42,7 +42,8 @@ class RoTable(displayCollection: CollectionDM) : SimplePanel() {
init {
title = Utils.extractTitle(displayCollection.title)
width = CssSize(100, UNIT.perc)
- val model = displayCollection.data as List<Exposer>
+ val model = displayCollection.data
+// val model = buildModel(displayCollection)
val columns = ColumnFactory().buildColumns(
displayCollection,
true)
@@ -65,6 +66,19 @@ class RoTable(displayCollection: CollectionDM) : SimplePanel() {
}
}
+ private fun buildModel(displayCollection: CollectionDM) : List<dynamic> {
+ console.log("[RT.buildModel]")
+ val model = mutableListOf<Exposer>()
+ displayCollection.data.forEach {
+ console.log(it)
+ val record = it.asDynamic()
+ console.log(record["readOnlyProperty"])
+ model.add(record)
+ console.log(record)
+ }
+ return model
+ }
+
fun <T : Any> Container.tabulator(
data: List<T>? = null,
dataUpdateOnEdit: Boolean = true,
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
index ed81588..6801f14 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt
@@ -67,7 +67,7 @@ object RoView {
val index = tabPanel.activeIndex
return if (index > 0) {
val tabs = tabPanel.getTabs()
- tabs.get(index) as SimplePanel
+ tabs.get(index)
} else {
null
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
index 62fa8bc..079afcd 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
@@ -75,7 +75,7 @@ object IconManager {
"OK" to "check",
"Open" to "book",
"Other" to "asterisk",
- "Pin" to "pin",
+ "Pin" to "map-pin",
"Primitives" to "hashtag",
"Prototyping" to "object-group",
"Queen" to "chess-queen",
@@ -98,6 +98,7 @@ object IconManager {
"Wikipedia" to "wikipedia-w"
)
+ @OptIn(ExperimentalStdlibApi::class)
fun find(query: String): String {
if (query.startsWith("fa")) return query
val actionTitle = Utils.deCamel(query)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/Utils.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/Utils.kt
index 2c64e9e..00861b2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/Utils.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/Utils.kt
@@ -21,10 +21,10 @@ package org.apache.isis.client.kroviz.utils
import org.apache.isis.client.kroviz.to.Argument
import org.apache.isis.client.kroviz.to.Link
import org.apache.isis.client.kroviz.to.TObject
-import kotlinx.serialization.json.Json
object Utils {
+ @OptIn(ExperimentalStdlibApi::class)
fun enCamel(input: String): String {
var output = ""
val words = input.split(" ")
@@ -34,15 +34,17 @@ object Utils {
return decapitalize(output)
}
+ @OptIn(ExperimentalStdlibApi::class)
private fun decapitalize(input: String): String {
val output = input.substring(1, input.length)
- return input.first().toLowerCase() + output
+ return input.first().lowercaseChar() + output
}
+ @OptIn(ExperimentalStdlibApi::class)
fun deCamel(input: String): String {
var output = ""
for ((i, c) in input.withIndex()) {
- val cuc = c.toUpperCase()
+ val cuc = c.uppercaseChar()
if (i == 0) {
output += cuc
} else {
@@ -105,10 +107,11 @@ object Utils {
}
internal fun argumentsAsString(
- args: Map<String, Argument?>?,
- start: String,
- sep: String,
- end: String): String {
+ args: Map<String, Argument?>?,
+ start: String,
+ sep: String,
+ end: String
+ ): String {
return if (args.isNullOrEmpty()) "" else {
var answer = start
args.forEach { kv ->
@@ -122,10 +125,11 @@ object Utils {
}
internal fun argumentsAsList(
- args: Map<String, Argument?>?,
- start: String,
- sep: String,
- end: String): String {
+ args: Map<String, Argument?>?,
+ start: String,
+ sep: String,
+ end: String
+ ): String {
return if (args.isNullOrEmpty()) "" else {
var answer = start
args.forEach { kv ->
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
index 541217b..b42f1d2 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
@@ -70,7 +70,8 @@ class CollectionAggregatorTest : IntegrationTest() {
val property = pdLe.getTransferObject() as Property
assertTrue(propertyLabels.size > 0) // 5
val lbl = dl.properties.find(property.id)!!
- assertEquals("ResultListResult class", lbl) // 6
+ val expected = "ResultListResult class"
+ assertEquals(expected, lbl) // 6
}
}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
index b1c6fc0..a47956c 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
@@ -24,7 +24,7 @@ object Response2Handler {
val map = mapOf(
ACTIONS_STRINGS to ActionHandler(),
-// ACTIONS_STRINGS_INVOKE to TObjectHandler(), // comented out due to issues with object-icon
+// ACTIONS_STRINGS_INVOKE to TObjectHandler(), // commented out due to issues with object-icon
ACTIONS_WHEREINTHEWORLD_INVOKE to TObjectHandler(),
ACTIONS_TEXT_INVOKE to TObjectHandler(),
ASSOCIATED_ACTION_OBJECT_LAYOUT to LayoutHandler(),
diff --git a/incubator/clients/kroviz/webpack.config.d/bootstrap.js b/incubator/clients/kroviz/webpack.config.d/bootstrap.js
index 35b28e6..46c1bca 100644
--- a/incubator/clients/kroviz/webpack.config.d/bootstrap.js
+++ b/incubator/clients/kroviz/webpack.config.d/bootstrap.js
@@ -1,3 +1,3 @@
-config.module.rules.push({test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/, loader: 'url-loader?limit=10000&mimetype=application/font-woff'});
-config.module.rules.push({test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: 'url-loader?limit=10000&mimetype=application/octet-stream'});
-config.module.rules.push({test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: 'file-loader'});
+config.module.rules.push({test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/, type: 'asset'});
+config.module.rules.push({test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, type: 'asset'});
+config.module.rules.push({test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource'});
\ No newline at end of file
diff --git a/incubator/clients/kroviz/webpack.config.d/css.js b/incubator/clients/kroviz/webpack.config.d/css.js
index 5d710d3..3b41ac1 100644
--- a/incubator/clients/kroviz/webpack.config.d/css.js
+++ b/incubator/clients/kroviz/webpack.config.d/css.js
@@ -1,2 +1 @@
-config.module.rules.push({ test: /\.css$/, loader: "style-loader!css-loader" });
-
+config.module.rules.push({ test: /\.css$/, use: ["style-loader", { loader: "css-loader", options: {sourceMap: false} } ] });
\ No newline at end of file
diff --git a/incubator/clients/kroviz/webpack.config.d/file.js b/incubator/clients/kroviz/webpack.config.d/file.js
index 653ca21..aa64925 100644
--- a/incubator/clients/kroviz/webpack.config.d/file.js
+++ b/incubator/clients/kroviz/webpack.config.d/file.js
@@ -1,9 +1,6 @@
config.module.rules.push(
{
test: /\.(jpe?g|png|gif|svg)$/i,
- loader: 'file-loader',
- options: {
- esModule: false,
- },
+ type: 'asset/resource'
}
);
diff --git a/incubator/clients/kroviz/webpack.config.d/jed.js b/incubator/clients/kroviz/webpack.config.d/jed.js
deleted file mode 100644
index 9a970dd..0000000
--- a/incubator/clients/kroviz/webpack.config.d/jed.js
+++ /dev/null
@@ -1,7 +0,0 @@
-;(function() {
- const webpack = require('webpack')
-
- config.plugins.push(new webpack.ProvidePlugin({
- Jed: "jed"
- }));
-})();
diff --git a/incubator/clients/kroviz/webpack.config.d/minify.js b/incubator/clients/kroviz/webpack.config.d/minify.js
deleted file mode 100644
index 62d97b8..0000000
--- a/incubator/clients/kroviz/webpack.config.d/minify.js
+++ /dev/null
@@ -1,17 +0,0 @@
-if (!config.devServer) {
- ;(function() {
- const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
-
- config.optimization = {
- minimizer: [
- new UglifyJSPlugin({
- uglifyOptions: {
- compress: {
- unused: false
- }
- }
- })
- ]
- }
- })();
-}
diff --git a/incubator/clients/kroviz/webpack.config.d/webpack.js b/incubator/clients/kroviz/webpack.config.d/webpack.js
index 84ade10..b7edd08 100644
--- a/incubator/clients/kroviz/webpack.config.d/webpack.js
+++ b/incubator/clients/kroviz/webpack.config.d/webpack.js
@@ -3,4 +3,13 @@ config.resolve.modules.push("../../processedResources/js/main");
if (config.devServer) {
config.devServer.hot = true;
config.devtool = 'eval-cheap-source-map';
+} else {
+ config.devtool = undefined;
}
+
+// disable bundle size warning
+config.performance = {
+ assetFilter: function (assetFilename) {
+ return !assetFilename.endsWith('.js');
+ },
+};
\ No newline at end of file
[isis] 02/07: ISIS-2505 Credits/Icons/Buttons in RoStatusBar
Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 5e2ed9ce1773d975138693297bbfeae3d9566a48
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Jun 23 15:45:24 2021 +0200
ISIS-2505 Credits/Icons/Buttons in RoStatusBar
---
.../apache/isis/client/kroviz/to/bs3/Property.kt | 6 ++--
.../apache/isis/client/kroviz/ui/core/RoMenuBar.kt | 2 +-
.../isis/client/kroviz/ui/core/RoStatusBar.kt | 33 +++++++++++++++++-----
.../kroviz/src/main/resources/css/kroviz.css | 19 +++++++++++--
4 files changed, 48 insertions(+), 12 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
index a9f245d..e42ee6e 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
@@ -26,7 +26,7 @@ import org.w3c.dom.asList
class Property(node: Node) {
var id: String
var link: Link? = null
- var hidden: String // USE ENUM Where? = null
+ var hidden: String = "" // USE ENUM Where? = null
var typicalLength: Int = 0
var multiLine: Int = 1
var describedAs: String? = null
@@ -35,7 +35,9 @@ class Property(node: Node) {
init {
val dn = node.asDynamic()
- hidden = dn.getAttribute("hidden")
+ if (dn.hasOwnProperty("hidden")) {
+ id = dn.getAttribute("hidden") as String
+ }
id = dn.getAttribute("id") as String
typicalLength = dn.getAttribute("typicalLength")
multiLine = dn.getAttribute("multiLine")
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
index c7c4565..820ae1f 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt
@@ -146,7 +146,7 @@ object RoMenuBar : SimplePanel() {
}
private fun logoButton() {
- val classes = setOf("logo-button-image", "logo-button")
+ val classes = setOf("isis-logo-button-image", "logo-button")
val logo = Button("", style = ButtonStyle.LINK, classes = classes)
.onClick {
window.open("https://isis.apache.org")
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt
index a8d0020..ee5bd00 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt
@@ -18,13 +18,6 @@
*/
package org.apache.isis.client.kroviz.ui.core
-import org.apache.isis.client.kroviz.core.event.EventState
-import org.apache.isis.client.kroviz.core.event.LogEntry
-import org.apache.isis.client.kroviz.core.model.DiagramDM
-import org.apache.isis.client.kroviz.ui.dialog.DiagramDialog
-import org.apache.isis.client.kroviz.ui.dialog.NotificationDialog
-import org.apache.isis.client.kroviz.ui.diagram.ClassDiagram
-import org.apache.isis.client.kroviz.utils.IconManager
import io.kvision.core.*
import io.kvision.html.Button
import io.kvision.html.ButtonStyle
@@ -32,6 +25,14 @@ import io.kvision.navbar.Nav
import io.kvision.navbar.Navbar
import io.kvision.navbar.NavbarType
import io.kvision.panel.SimplePanel
+import kotlinx.browser.window
+import org.apache.isis.client.kroviz.core.event.EventState
+import org.apache.isis.client.kroviz.core.event.LogEntry
+import org.apache.isis.client.kroviz.core.model.DiagramDM
+import org.apache.isis.client.kroviz.ui.diagram.ClassDiagram
+import org.apache.isis.client.kroviz.ui.dialog.DiagramDialog
+import org.apache.isis.client.kroviz.ui.dialog.NotificationDialog
+import org.apache.isis.client.kroviz.utils.IconManager
object RoStatusBar {
val navbar = Navbar(
@@ -55,6 +56,8 @@ object RoStatusBar {
init {
navbar.add(nav)
+ nav.add(isisButton())
+ nav.add(kvisionButton())
nav.add(lastError)
nav.add(classDiagram)
nav.add(userBtn)
@@ -112,4 +115,20 @@ object RoStatusBar {
notify(text)
}
+ private fun isisButton(): Button {
+ val classes = setOf("isis-logo-button-image", "logo-button")
+ return Button("", style = ButtonStyle.LINK, classes = classes)
+ .onClick {
+ window.open("https://isis.apache.org")
+ }
+ }
+
+ private fun kvisionButton(): Button {
+ val classes = setOf("kvision-logo-button-image", "logo-button")
+ return Button("", style = ButtonStyle.LINK, classes = classes)
+ .onClick {
+ window.open("https://kvision.io")
+ }
+ }
+
}
diff --git a/incubator/clients/kroviz/src/main/resources/css/kroviz.css b/incubator/clients/kroviz/src/main/resources/css/kroviz.css
index 0035168..7f6c23e 100644
--- a/incubator/clients/kroviz/src/main/resources/css/kroviz.css
+++ b/incubator/clients/kroviz/src/main/resources/css/kroviz.css
@@ -137,9 +137,9 @@ div {
/* font-family: Chicago, sans-serif;*/
}
-.logo-button-image:before {
+.isis-logo-button-image:before {
content: "";
- width: 75px;
+ width: 65px;
height: 40px;
display: inline-block;
vertical-align: text-top;
@@ -151,6 +151,21 @@ div {
background-image: url("https://svn.apache.org/repos/asf/comdev/project-logos/originals/isis.svg");
}
+.kvision-logo-button-image:before {
+ content: "";
+ width: 25px;
+ height: 40px;
+ display: inline-block;
+ vertical-align: text-top;
+ background-color: transparent;
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: contain, cover;
+ background-image: url("https://kvision.io/0cdf370d4484d5f175f0.svg");
+}
+
+
+
.kv-window {
/* background-color: rgba(255,255,255, 0) !important;*/
}
[isis] 06/07: ISIS-2505 CollectionProperties reklated tests fixed -
data not rendered yet
Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 8737135dae4d4375177ac546df44a5b413e85c98
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Sun Jul 4 10:14:14 2021 +0200
ISIS-2505 CollectionProperties reklated tests fixed - data not rendered yet
---
.../kroviz/core/aggregator/AggregatorWithLayout.kt | 2 +-
.../{Properties.kt => CollectionProperties.kt} | 61 ++--
.../kroviz/core/model/DisplayModelWithLayout.kt | 12 +-
.../isis/client/kroviz/ui/builder/ColBuilder.kt | 4 -
.../isis/client/kroviz/ui/core/ColumnFactory.kt | 19 +-
.../apache/isis/client/kroviz/ui/core/RoTable.kt | 2 +-
.../isis/client/kroviz/ui/panel/EventLogTable.kt | 5 +-
.../core/aggregator/CollectionAggregatorTest.kt | 4 +-
.../client/kroviz/core/model/CollectionDMTest.kt | 6 +-
.../snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt | 344 ++++++++-------------
.../kroviz/snapshots/demo2_0_0/Response2Handler.kt | 2 +-
.../org/apache/isis/client/kroviz/to/LinkTest.kt | 12 +-
.../apache/isis/client/kroviz/to/TObjectTest.kt | 6 +-
13 files changed, 197 insertions(+), 282 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
index 639f43f..6d98fef 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
@@ -11,7 +11,7 @@ abstract class AggregatorWithLayout : BaseAggregator() {
protected fun handleLayout(layout: Layout, dm: DisplayModelWithLayout) {
if (dm.layout == null) {
dm.addLayout(layout)
- dm.propertyLayoutList.forEach { p ->
+ dm.properties.propertyLayoutList.forEach { p ->
val l = p.link!!
val isDn = l.href.contains("datanucleus")
if (!isDn) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Properties.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionProperties.kt
similarity index 55%
rename from incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Properties.kt
rename to incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionProperties.kt
index 6c00954..d1c653d 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/Properties.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionProperties.kt
@@ -22,38 +22,56 @@ import org.apache.isis.client.kroviz.layout.PropertyLt
import org.apache.isis.client.kroviz.to.Extensions
import org.apache.isis.client.kroviz.to.Property
-class Properties() {
- val list = mutableListOf<PropertyFacade>()
+class CollectionProperties() {
+ val list = mutableListOf<ColumnProperties>()
+ var propertyDescriptionList = mutableListOf<Property>()
+ var propertyLayoutList = mutableListOf<PropertyLt>()
+ var propertyList = mutableListOf<Property>()
+
+ fun readyForDisplay(): Boolean {
+ val ps = propertyList.size
+ val pls = propertyLayoutList.size
+ val pds = propertyDescriptionList.size
+ val descriptionsComplete = (pds >= pls) && (pds >= ps)
+ return descriptionsComplete
+ }
fun addProperty(property: Property) {
+ propertyList.add(property)
val id = property.id
- val pf = findOrCreate(id)
- pf.property = property
+ val cp = findOrCreate(id)
+ cp.property = property
}
fun addAllPropertyLayout(layoutList: List<PropertyLt>) {
+ propertyLayoutList.addAll(layoutList)
fun addPropertyLayout(layout: PropertyLt) {
val id = layout.id!!
- val pf = findOrCreate(id)
- pf.layout = layout
+ val cp = findOrCreate(id)
+ cp.initLayout(layout)
}
layoutList.forEach { addPropertyLayout(it) }
}
fun addPropertyDescription(description: Property) {
+ propertyDescriptionList.add(description)
val id = description.id
- val pf = findOrCreate(id)
+ val cp = findOrCreate(id)
val e: Extensions = description.extensions!!
- pf.friendlyName = e.friendlyName
+ cp.friendlyName = e.friendlyName
}
- private fun findOrCreate(id: String): PropertyFacade {
- var pf = list.find { it.key == id }
- if (pf == null) {
- pf = PropertyFacade(id)
- list.add(pf)
+ private fun findOrCreate(id: String): ColumnProperties {
+ var cp = find(id)
+ if (cp == null) {
+ cp = ColumnProperties(id)
+ list.add(cp)
}
- return pf
+ return cp
+ }
+
+ fun find(id: String): ColumnProperties? {
+ return list.find { it.key == id }
}
}
@@ -62,21 +80,20 @@ class Properties() {
* Properties have three aspects:
*
* - Member of a DomainObject
- * - Description (labels, friendlyName)
- * - Layout
+ * - Description (friendlyName, etc.)
+ * - Layout (hidden, etc.)
*
* All three are required in order to display correctly in a table.
*/
-class PropertyFacade(val key: String) {
+class ColumnProperties(val key: String) {
var property: Property? = null
var friendlyName: String = ""
var layout: PropertyLt? = null
+ var hidden: Boolean = true
- fun hidden(): Boolean {
- if (layout != null) {
- return (layout!!.hidden != null)
- }
- return false
+ fun initLayout(layout: PropertyLt) {
+ this.layout = layout
+ hidden = (layout.hidden != null)
}
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
index 467680a..d8e591b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
@@ -19,7 +19,6 @@
package org.apache.isis.client.kroviz.core.model
import org.apache.isis.client.kroviz.layout.Layout
-import org.apache.isis.client.kroviz.layout.PropertyLt
import org.apache.isis.client.kroviz.layout.RowLt
import org.apache.isis.client.kroviz.to.Property
import org.apache.isis.client.kroviz.to.bs3.Grid
@@ -28,17 +27,14 @@ abstract class DisplayModelWithLayout : DisplayModel() {
var layout: Layout? = null
var grid: Grid? = null
- var propertyDescriptionList = mutableListOf<Property>()
- var propertyLayoutList = mutableListOf<PropertyLt>()
- val properties = Properties()
+ val properties = CollectionProperties()
override fun canBeDisplayed(): Boolean {
return when {
isRendered -> false
layout == null -> false
grid == null -> false
- propertyDescriptionList.isEmpty() -> false
- else -> true
+ else -> properties.readyForDisplay()
}
}
@@ -57,9 +53,6 @@ abstract class DisplayModelWithLayout : DisplayModel() {
r.cols.forEach { cs ->
val c = cs.getCol()
c.fieldSet.forEach { fs ->
- console.log("[DMWL.initLayout4Row]")
- console.log(fs.property)
- propertyLayoutList.addAll(fs.property)
properties.addAllPropertyLayout(fs.property)
}
c.tabGroup.forEach { tg ->
@@ -73,7 +66,6 @@ abstract class DisplayModelWithLayout : DisplayModel() {
}
fun addPropertyDescription(p: Property) {
- propertyDescriptionList.add(p)
properties.addPropertyDescription(p)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
index e6188c3..f746902 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
@@ -59,13 +59,9 @@ class ColBuilder : UiBuilder() {
panel.add(rowCpt)
}
for (c in col.collectionList) {
- console.log("[CB.create]")
- // analogous to UiManager.openCollectionView
val key = c.id // entities
val objectDM = dsp.displayModel
val collectionDM = objectDM.collections.get(key)!!
- console.log(collectionDM.grid)
- console.log(collectionDM.layout)
val tblCpt = RoTable(collectionDM)
val fsPanel = FieldsetPanel(legend = key.capitalize()).add(tblCpt)
panel.add(fsPanel)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
index 31ed7d6..1f14de3 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
@@ -53,15 +53,20 @@ class ColumnFactory {
displayCollection: CollectionDM,
withCheckBox: Boolean = false): List<ColumnDefinition<dynamic>> {
+ val model = mutableListOf<dynamic>()
+ displayCollection.data.forEach {
+ model.add(it.asDynamic())
+ }
console.log("[CF.buildColumns]")
- console.log(displayCollection)
+ console.log(model::class.simpleName)
+ console.log(model)
val columns = mutableListOf<ColumnDefinition<dynamic>>()
if (withCheckBox) {
val checkBox = buildCheckBox()
columns.add(checkBox)
}
- if (hasIcon(displayCollection)) {
+ if (hasIcon(displayCollection.data)) {
val menu = buildMenu()
columns.add(menu)
@@ -71,12 +76,11 @@ class ColumnFactory {
val propertyLabels = displayCollection.properties.list
for (pl in propertyLabels) {
- console.log("[CF.buildColumns]")
- console.log(pl.hidden())
- if (!pl.hidden()) {
+ if (!pl.hidden) {
val id = pl.key
+ console.log("id: $id")
val friendlyName = pl.friendlyName
- var cd = ColumnDefinition<Exposer>(
+ var cd = ColumnDefinition<dynamic>(
title = friendlyName,
field = id,
headerFilter = Editor.INPUT)
@@ -89,8 +93,7 @@ class ColumnFactory {
return columns
}
- private fun hasIcon(displayCollection: CollectionDM): Boolean {
- val model = displayCollection.data as List<dynamic>
+ private fun hasIcon(model: List<dynamic>): Boolean {
return (model[0].hasOwnProperty("iconName") as Boolean)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
index 9b0b750..dcb68ad 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoTable.kt
@@ -42,7 +42,7 @@ class RoTable(displayCollection: CollectionDM) : SimplePanel() {
init {
title = Utils.extractTitle(displayCollection.title)
width = CssSize(100, UNIT.perc)
- val model = displayCollection.data
+ val model = displayCollection.data as List<Exposer>
val columns = ColumnFactory().buildColumns(
displayCollection,
true)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
index 15ca0a1..e698973 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
@@ -27,10 +27,7 @@ import io.kvision.tabulator.*
import io.kvision.utils.obj
import io.kvision.utils.px
import org.apache.isis.client.kroviz.core.event.LogEntry
-import org.apache.isis.client.kroviz.to.HasLinks
-import org.apache.isis.client.kroviz.to.Relation
import org.apache.isis.client.kroviz.to.TObject
-import org.apache.isis.client.kroviz.to.TransferObject
import org.apache.isis.client.kroviz.ui.core.Constants
import org.apache.isis.client.kroviz.ui.core.UiManager
import org.apache.isis.client.kroviz.ui.dialog.EventLogDetail
@@ -116,7 +113,7 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
return b
}
- fun shorten(url: String): String {
+ private fun shorten(url: String): String {
var result = url
val signature = Constants.restInfix
if (url.contains(signature)) {
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
index 8328820..541217b 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregatorTest.kt
@@ -66,10 +66,10 @@ class CollectionAggregatorTest : IntegrationTest() {
// then
val dl = obs.dpm as CollectionDM
- val propertyLabels = dl.propertyDescriptionList
+ val propertyLabels = dl.properties.propertyDescriptionList
val property = pdLe.getTransferObject() as Property
assertTrue(propertyLabels.size > 0) // 5
- val lbl = propertyLabels.get(property.id)!!
+ val lbl = dl.properties.find(property.id)!!
assertEquals("ResultListResult class", lbl) // 6
}
}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDMTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDMTest.kt
index 7dc6ac4..2cbb74c 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDMTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDMTest.kt
@@ -43,7 +43,7 @@ class CollectionDMTest {
assertEquals(2, dl.data.size) //1
- val properties = dl.propertyLayoutList
+ val properties = dl.properties.propertyLayoutList
assertEquals(5, properties.size) //2 // includes datanucleus IdLong, VersionLong, VersionTimestamp
assertEquals("name", properties[0].id) //3
assertEquals("notes", properties[1].id) //4
@@ -61,7 +61,7 @@ class CollectionDMTest {
dl.addLayout(lt)
assertEquals(1, dl.data.size) //1
- val properties = dl.propertyLayoutList
+ val properties = dl.properties.propertyLayoutList
assertEquals("key", properties[0].id) // 2
assertEquals("value", properties[1].id) // 3
}
@@ -78,7 +78,7 @@ class CollectionDMTest {
assertEquals(1, dl.data.size)
assertNotNull(dl.layout)
- val properties = dl.propertyList
+ val properties = dl.properties.propertyList
assertNotNull(properties)
//Sequence in FR_OBJECT differs from sequence in FR_OBJECT_LAYOUT
// FR_OBJECT: fixtureScriptClassName, key, object, className
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
index c61c613..38c4d57 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
@@ -24,226 +24,132 @@ object ACTIONS_STRINGS_INVOKE : Response() {
override val url = "http://localhost:8080/restful/objects/demo.JavaLangTypesMenu/1/actions/strings/invoke"
override val str = """
{
- "links": [
- {
- "rel": "self",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
- "title": "String data type"
- },
- {
- "rel": "describedby",
- "href": "https://demo-wicket.isis.incode.work/restful/domain-types/demo.JavaLangStrings",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/domain-type\""
- },
- {
- "rel": "urn:org.apache.isis.restfulobjects:rels/object-layout",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/object-layout",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-layout-bs3\""
- },
- {
- "rel": "urn:org.apache.isis.restfulobjects:rels/object-icon",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/image",
- "method": "GET",
- "type": "image/png"
- },
- {
- "rel": "urn:org.restfulobjects:rels/update",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings:PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
- "method": "PUT",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
- "arguments": {}
- }
- ],
- "extensions": {
- "oid": "demo.JavaLangStrings:PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
- "isService": false,
- "isPersistent": true
+ "links" : [ {
+ "rel" : "self",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
+ "title" : "String data type"
+ }, {
+ "rel" : "describedby",
+ "href" : "http://localhost:8080/restful/domain-types/demo.JavaLangStrings",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/domain-type\""
+ }, {
+ "rel" : "urn:org.apache.isis.restfulobjects:rels/object-layout",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/object-layout",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-layout-bs3\""
+ }, {
+ "rel" : "urn:org.apache.isis.restfulobjects:rels/object-icon",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/object-icon",
+ "method" : "GET",
+ "type" : "image/*"
+ }, {
+ "rel" : "urn:org.restfulobjects:rels/update",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings:PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+ "method" : "PUT",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
+ "arguments" : { }
+ } ],
+ "extensions" : {
+ "oid" : "demo.JavaLangStrings:PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+ "isService" : false,
+ "isPersistent" : true
},
- "title": "String data type",
- "domainType": "demo.JavaLangStrings",
- "instanceId": "PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
- "members": {
- "description": {
- "id": "description",
- "memberType": "property",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;property=\"description\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/description",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
- }
- ],
- "value": "<div class=\"paragraph\">\n<p>The framework has built-in support for the <code>String</code> data type.</p>\n</div>\n<div class=\"paragraph\">\n<p>From here you can:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>navigate to an entity that uses the <code>String</code> datatype</p>\n</li>\n<li>\n<p>open a view model that uses the <code>String</code> datatype</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Some properties on these domain objects are mandatory, [...]
- "format": "string",
- "extensions": {
- "": "string"
- },
- "disabledReason": "Contributed property"
- },
- "objectType": {
- "id": "objectType",
- "memberType": "property",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;property=\"objectType\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/objectType",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
- }
- ],
- "value": "demo.JavaLangStrings",
- "extensions": {
- "x-isis-format": "string"
- },
- "disabledReason": "Contributed property"
- },
- "objectIdentifier": {
- "id": "objectIdentifier",
- "memberType": "property",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;property=\"objectIdentifier\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/objectIdentifier",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
- }
- ],
- "value": "»1a9012b0",
- "extensions": {
- "x-isis-format": "string"
- },
- "disabledReason": "Contributed property"
- },
- "sources": {
- "id": "sources",
- "memberType": "property",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;property=\"sources\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/sources",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
- }
- ],
- "value": "<div class=\"paragraph\">\n<p><a href=\"https://github.com/apache/isis/tree/master/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings\">Sources</a> for this demo</p>\n</div>",
- "format": "string",
- "extensions": {
- "x-isis-format": "string"
- },
- "disabledReason": "Contributed property"
- },
- "entities": {
- "id": "entities",
- "memberType": "collection",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;collection=\"entities\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/collections/entities",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-collection\""
- }
- ]
- },
- "openViewModel": {
- "id": "openViewModel",
- "memberType": "action",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;action=\"openViewModel\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openViewModel",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
- }
- ]
- },
- "clearHints": {
- "id": "clearHints",
- "memberType": "action",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;action=\"clearHints\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/clearHints",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
- }
- ]
- },
- "downloadMetamodelXml": {
- "id": "downloadMetamodelXml",
- "memberType": "action",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;action=\"downloadMetamodelXml\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadMetamodelXml",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
- }
- ]
- },
- "rebuildMetamodel": {
- "id": "rebuildMetamodel",
- "memberType": "action",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;action=\"rebuildMetamodel\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/rebuildMetamodel",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
- }
- ]
- },
- "downloadLayoutXml": {
- "id": "downloadLayoutXml",
- "memberType": "action",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;action=\"downloadLayoutXml\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadLayoutXml",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
- }
- ]
- },
- "openRestApi": {
- "id": "openRestApi",
- "memberType": "action",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;action=\"openRestApi\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openRestApi",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
- }
- ]
- },
- "inspectMetamodel": {
- "id": "inspectMetamodel",
- "memberType": "action",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;action=\"inspectMetamodel\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/inspectMetamodel",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
- }
- ]
- },
- "recentCommands": {
- "id": "recentCommands",
- "memberType": "action",
- "links": [
- {
- "rel": "urn:org.restfulobjects:rels/details;action=\"recentCommands\"",
- "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/recentCommands",
- "method": "GET",
- "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
- }
- ]
+ "title" : "String data type",
+ "domainType" : "demo.JavaLangStrings",
+ "instanceId" : "PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+ "members" : {
+ "entities" : {
+ "id" : "entities",
+ "memberType" : "collection",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;collection=\"entities\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/collections/entities",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-collection\""
+ } ]
+ },
+ "openViewModel" : {
+ "id" : "openViewModel",
+ "memberType" : "action",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;action=\"openViewModel\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openViewModel",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+ } ]
+ },
+ "clearHints" : {
+ "id" : "clearHints",
+ "memberType" : "action",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;action=\"clearHints\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/clearHints",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+ } ]
+ },
+ "downloadMetamodelXml" : {
+ "id" : "downloadMetamodelXml",
+ "memberType" : "action",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;action=\"downloadMetamodelXml\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadMetamodelXml",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+ } ]
+ },
+ "recentCommands" : {
+ "id" : "recentCommands",
+ "memberType" : "action",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;action=\"recentCommands\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/recentCommands",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+ } ]
+ },
+ "rebuildMetamodel" : {
+ "id" : "rebuildMetamodel",
+ "memberType" : "action",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;action=\"rebuildMetamodel\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/rebuildMetamodel",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+ } ]
+ },
+ "openRestApi" : {
+ "id" : "openRestApi",
+ "memberType" : "action",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;action=\"openRestApi\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openRestApi",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+ } ]
+ },
+ "inspectMetamodel" : {
+ "id" : "inspectMetamodel",
+ "memberType" : "action",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;action=\"inspectMetamodel\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/inspectMetamodel",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+ } ]
+ },
+ "downloadLayoutXml" : {
+ "id" : "downloadLayoutXml",
+ "memberType" : "action",
+ "links" : [ {
+ "rel" : "urn:org.restfulobjects:rels/details;action=\"downloadLayoutXml\"",
+ "href" : "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadLayoutXml",
+ "method" : "GET",
+ "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+ } ]
}
}
}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
index 12b161c..b1c6fc0 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
@@ -24,7 +24,7 @@ object Response2Handler {
val map = mapOf(
ACTIONS_STRINGS to ActionHandler(),
- ACTIONS_STRINGS_INVOKE to TObjectHandler(),
+// ACTIONS_STRINGS_INVOKE to TObjectHandler(), // comented out due to issues with object-icon
ACTIONS_WHEREINTHEWORLD_INVOKE to TObjectHandler(),
ACTIONS_TEXT_INVOKE to TObjectHandler(),
ASSOCIATED_ACTION_OBJECT_LAYOUT to LayoutHandler(),
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/LinkTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/LinkTest.kt
index 025206a..505f7a6 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/LinkTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/LinkTest.kt
@@ -23,6 +23,7 @@ import org.apache.isis.client.kroviz.snapshots.demo2_0_0.Response2Handler
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
+import kotlin.test.fail
class LinkTest {
@@ -88,10 +89,13 @@ class LinkTest {
if (ro is HasLinks) {
val links = ro.links
links.forEach { l ->
- console.log("[LT.testFindParsedLinkENums]")
- console.log(l)
- console.log(l.relation())
- console.log(l.representation())
+ try {
+ l.relation()
+ l.representation()
+ } catch (e: NullPointerException) {
+ console.log(l.href)
+ fail("${rh.key} Relation/Represention of $l fails")
+ }
}
}
}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/TObjectTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/TObjectTest.kt
index dcc5e2a..4b5f9ec 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/TObjectTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/TObjectTest.kt
@@ -114,13 +114,13 @@ class TObjectTest {
val to = TObjectHandler().parse(jsonStr) as TObject
// then
assertEquals("String data type", to.links[0].title)
- assertEquals(13, to.members.size)
+ assertEquals(9, to.members.size)
assertEquals(1, to.getCollections().size)
assertEquals(8, to.getActions().size)
- assertEquals(4, to.getProperties().size)
+ assertEquals(0, to.getProperties().size)
val filteredProperties = to.getProperties().filter { it.id == "description" }
- assertEquals(1, filteredProperties.size)
+ assertEquals(0, filteredProperties.size)
}
}
[isis] 01/07: ISIS-2505 all attributes in parented collections
shown in table header, preparation for object-icon,
response column added in EventLogTable
Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 7faf75ad723751095afc7d6bab7d1459d241ffcd
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Jun 23 12:37:20 2021 +0200
ISIS-2505 all attributes in parented collections shown in table header, preparation for object-icon, response column added in EventLogTable
---
.../kroviz/core/aggregator/AggregatorWithLayout.kt | 5 +++++
.../client/kroviz/core/aggregator/BaseAggregator.kt | 10 +++++++++-
.../kroviz/core/aggregator/CollectionAggregator.kt | 9 ++++++++-
.../client/kroviz/core/aggregator/ObjectAggregator.kt | 2 +-
.../isis/client/kroviz/core/model/CollectionDM.kt | 17 ++++-------------
.../client/kroviz/core/model/DisplayModelWithLayout.kt | 18 +++++++-----------
.../kotlin/org/apache/isis/client/kroviz/to/Icon.kt | 6 ++++++
.../isis/client/kroviz/ui/panel/EventLogTable.kt | 6 ++++++
8 files changed, 46 insertions(+), 27 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
index decb30b..d6d62cc 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
@@ -31,4 +31,9 @@ abstract class AggregatorWithLayout : BaseAggregator() {
}
}
+ protected fun invokeIconLink(obj: TObject, aggregator: AggregatorWithLayout) {
+ val l = obj.getIconLink()!!
+ invoke(l, aggregator)
+ }
+
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
index 7c3b47b..452f78c 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
@@ -63,6 +63,10 @@ abstract class BaseAggregator {
return links.firstOrNull { it.isLayout() }
}
+ fun TObject.getIconLink(): Link? {
+ return links.firstOrNull { it.isIcon() }
+ }
+
override fun toString(): String {
return "[${this::class} \n" +
"TObject: ${this.getObject()} ]\n"
@@ -72,7 +76,11 @@ abstract class BaseAggregator {
return href.isNotEmpty() && href.contains("layout")
}
- protected fun invoke(link:Link, aggregator: BaseAggregator, subType :String = Constants.subTypeJson) {
+ private fun Link.isIcon(): Boolean {
+ return href.isNotEmpty() && href.endsWith("object-icon")
+ }
+
+ protected fun invoke(link: Link, aggregator: BaseAggregator, subType: String = Constants.subTypeJson) {
RoXmlHttpRequest().invoke(link, aggregator, subType)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
index 89cad1b..6397569 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
@@ -54,6 +54,7 @@ class CollectionAggregator(actionTitle: String, val parent: ObjectAggregator? =
is Grid -> handleGrid(obj)
is Property -> handleProperty(obj)
is Collection -> handleCollection(obj)
+ is Icon -> handleIcon(obj)
else -> log(logEntry)
}
@@ -78,9 +79,15 @@ class CollectionAggregator(actionTitle: String, val parent: ObjectAggregator? =
}
private fun handleObject(obj: TObject) {
+ console.log("[CA.handleObject]")
+ console.log(obj)
dpm.addData(obj)
invokeLayoutLink(obj, this)
-//TODO invokeIconLink(obj)
+// invokeIconLink(obj, this)
+ }
+
+ private fun handleIcon(obj: TransferObject?) {
+ (dpm as CollectionDM).addIcon(obj)
}
private fun handleDomainType(obj: DomainType) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
index 3e4b776..3afce91 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
@@ -67,7 +67,7 @@ class ObjectAggregator(val actionTitle: String) : AggregatorWithLayout() {
if (collectionMap.isEmpty()) return true
return collectionMap.all {
val cdm = it.value.dpm as CollectionDM
- cdm.parentedCollectionCanBeDisplayed()
+ cdm.canBeDisplayed()
}
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDM.kt
index ef61c23..11e4fc2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDM.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDM.kt
@@ -34,23 +34,14 @@ class CollectionDM(override val title: String) : DisplayModelWithLayout() {
}
}
+ fun addIcon(obj: TransferObject?) {
+ TODO("Not yet implemented")
+ }
+
override fun reset() {
isRendered = false
data = observableListOf()
rawData = observableListOf()
}
- // canBeDisplayed checks for grid AND layout - for parented collection there seems to be no layout
- fun parentedCollectionCanBeDisplayed(): Boolean {
- console.log("[CDM.parentedCollectionCanBeDisplayed] propertyDescriptionList")
- console.log(propertyDescriptionList)
- return when {
- grid == null -> false
- propertyDescriptionList.isEmpty() -> false
- propertyLayoutList.isEmpty() -> false
- propertyList.isEmpty() -> false
- else -> true
- }
- }
-
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
index 7725f6f..66f6bc0 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
@@ -47,18 +47,18 @@ abstract class DisplayModelWithLayout : DisplayModel() {
}
}
- fun addLayout(layout:Layout) {
+ fun addLayout(layout: Layout) {
this.layout = layout
initPropertyLayoutList(layout)
}
- private fun initPropertyLayoutList(layout:Layout) {
+ private fun initPropertyLayoutList(layout: Layout) {
layout.row.forEach { r ->
initLayout4Row(r)
}
}
- private fun initLayout4Row(r:RowLt) {
+ private fun initLayout4Row(r: RowLt) {
r.cols.forEach { cs ->
val c = cs.getCol()
c.fieldSet.forEach { fs ->
@@ -74,18 +74,14 @@ abstract class DisplayModelWithLayout : DisplayModel() {
}
}
- fun addPropertyDescription(p:Property) {
+ fun addPropertyDescription(p: Property) {
val id = p.id
- val e:Extensions = p.extensions!!
+ val e: Extensions = p.extensions!!
val friendlyName = e.friendlyName
- addPropertyDescription(id, friendlyName)
+ propertyDescriptionList.put(id, friendlyName)
}
- fun addPropertyDescription(key: String, value: String) {
- propertyDescriptionList.put(key, value)
- }
-
- fun addProperty(property:Property) {
+ fun addProperty(property: Property) {
propertyList.add(property)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Icon.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Icon.kt
new file mode 100644
index 0000000..e7bd8ec
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Icon.kt
@@ -0,0 +1,6 @@
+package org.apache.isis.client.kroviz.to
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class Icon(val image: String) : TransferObject
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
index 338c7e2..37c119b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
@@ -61,6 +61,12 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
headerFilter = Editor.INPUT,
width = "20"),
ColumnDefinition("req.len", field = "requestLength", width = "100", hozAlign = Align.RIGHT, download = false),
+ ColumnDefinition(
+ download = false,
+ title = "response",
+ field = "response",
+ headerFilter = Editor.INPUT,
+ width = "200"),
ColumnDefinition("resp.len", field = "responseLength", width = "100", hozAlign = Align.RIGHT, download = false),
ColumnDefinition("cacheHits", field = "cacheHits", width = "100", hozAlign = Align.RIGHT, download = false),
ColumnDefinition("duration", field = "duration", width = "100", hozAlign = Align.RIGHT, download = false),
[isis] 03/07: ISIS-2505 parentedCollection (BasicTypes->String)
renders two empty entries
Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
joergrade pushed a commit to branch ISIS-2505_Catch_Up_With_Demo_Examples
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 375f3262efe3a90a04be12024c72570d1340eba3
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Jun 30 18:01:05 2021 +0200
ISIS-2505 parentedCollection (BasicTypes->String) renders two empty entries
---
.../kroviz/core/aggregator/AggregatorWithLayout.kt | 2 +-
.../kroviz/core/aggregator/BaseAggregator.kt | 4 ++-
.../kroviz/core/aggregator/CollectionAggregator.kt | 12 +++----
.../core/aggregator/DomainTypesAggregator.kt | 1 -
.../isis/client/kroviz/core/event/LogEntry.kt | 17 ++++++++-
.../client/kroviz/core/event/LogEntryDecorator.kt | 2 --
.../client/kroviz/core/event/RoXmlHttpRequest.kt | 2 +-
.../isis/client/kroviz/core/model/CollectionDM.kt | 4 ++-
.../kroviz/core/model/DisplayModelWithLayout.kt | 20 +++++++++++
.../client/kroviz/handler/DomainTypesHandler.kt | 5 ++-
.../isis/client/kroviz/handler/HttpErrorHandler.kt | 1 -
.../{HttpErrorHandler.kt => IconHandler.kt} | 18 +++++-----
.../isis/client/kroviz/handler/LayoutHandler.kt | 4 +--
.../isis/client/kroviz/handler/LayoutXmlHandler.kt | 2 +-
.../isis/client/kroviz/handler/ResponseHandler.kt | 4 ++-
.../org/apache/isis/client/kroviz/to/Icon.kt | 4 ++-
.../apache/isis/client/kroviz/to/bs3/FieldSet.kt | 12 +++----
.../apache/isis/client/kroviz/to/bs3/Property.kt | 4 +--
.../isis/client/kroviz/ui/builder/ColBuilder.kt | 9 +++--
.../isis/client/kroviz/ui/core/ColumnFactory.kt | 20 +++++++----
.../apache/isis/client/kroviz/ui/core/Constants.kt | 1 +
.../isis/client/kroviz/ui/core/FormPanelFactory.kt | 4 +--
.../isis/client/kroviz/ui/core/MenuFactory.kt | 2 --
.../apache/isis/client/kroviz/ui/core/UiManager.kt | 2 --
.../isis/client/kroviz/ui/dialog/DiagramDialog.kt | 1 +
.../isis/client/kroviz/ui/panel/EventLogTable.kt | 42 ++++++++++++++++++----
.../snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt | 2 +-
27 files changed, 132 insertions(+), 69 deletions(-)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
index d6d62cc..639f43f 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/AggregatorWithLayout.kt
@@ -14,7 +14,7 @@ abstract class AggregatorWithLayout : BaseAggregator() {
dm.propertyLayoutList.forEach { p ->
val l = p.link!!
val isDn = l.href.contains("datanucleus")
- if (isDn) {
+ if (!isDn) {
//invoking DN links leads to an error
invoke(l, this)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
index 452f78c..bb129dc 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
@@ -56,7 +56,9 @@ abstract class BaseAggregator {
protected fun log(logEntry: LogEntry) {
logEntry.setUndefined("no handler found")
- throw Throwable("[BaseAggregator.log] no handler found: ${this::class.simpleName}")
+ console.log("[BaseAggregator.log] ")
+ console.log(logEntry)
+ throw Throwable("no handler found: ${this::class.simpleName}")
}
fun TObject.getLayoutLink(): Link? {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
index 6397569..12c0a46 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/CollectionAggregator.kt
@@ -79,8 +79,6 @@ class CollectionAggregator(actionTitle: String, val parent: ObjectAggregator? =
}
private fun handleObject(obj: TObject) {
- console.log("[CA.handleObject]")
- console.log(obj)
dpm.addData(obj)
invokeLayoutLink(obj, this)
// invokeIconLink(obj, this)
@@ -91,7 +89,6 @@ class CollectionAggregator(actionTitle: String, val parent: ObjectAggregator? =
}
private fun handleDomainType(obj: DomainType) {
- console.log("[CA.handleDomainType]")
obj.links.forEach {
if (it.relation() == Relation.LAYOUT) {
invoke(it, this)
@@ -100,7 +97,6 @@ class CollectionAggregator(actionTitle: String, val parent: ObjectAggregator? =
obj.members.forEach {
val m = it.value
if (m.isProperty()) {
- console.log(m)
invoke(m, this)
}
}
@@ -112,12 +108,14 @@ class CollectionAggregator(actionTitle: String, val parent: ObjectAggregator? =
private fun handleProperty(p: Property) {
val dm = dpm as CollectionDM
- console.log("[CA.handleProperty]")
if (p.isPropertyDescription()) {
dm.addPropertyDescription(p)
} else {
dm.addProperty(p)
- invoke(p.descriptionLink()!!, this)
+ val pdl = p.descriptionLink()
+ if (pdl != null) {
+ invoke(pdl, this)
+ }
}
}
@@ -138,8 +136,6 @@ class CollectionAggregator(actionTitle: String, val parent: ObjectAggregator? =
}
private fun Property.descriptionLink(): Link? {
- console.log("[CA.Property.descriptionLink]")
- console.log(this)
return links.find {
it.relation() == Relation.ELEMENT_TYPE
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
index fdaa6ca..2240756 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
@@ -49,7 +49,6 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() {
}
private fun handleAction(obj: Action) {
- console.log(obj)
throw Throwable("[DomainTypesAggregator.handleAction] not implemented yet") //dsp.addData(obj)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
index 2b07b50..60e1d0f 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntry.kt
@@ -30,6 +30,8 @@ import org.apache.isis.client.kroviz.to.Link
import org.apache.isis.client.kroviz.to.Relation
import org.apache.isis.client.kroviz.to.TransferObject
import org.apache.isis.client.kroviz.ui.core.Constants
+import org.apache.isis.client.kroviz.ui.core.UiManager
+import org.apache.isis.client.kroviz.utils.Utils
import kotlin.js.Date
// use color codes from css instead?
@@ -63,10 +65,11 @@ data class LogEntry(
var requestLength: Int = 0 // must be accessible (public) for LogEntryTable
var response = ""
var responseLength: Int = 0 // must be accessible (public) for LogEntryTable
+ var type: String = ""
init {
state = EventState.RUNNING
- title = url // stripHostPort(url)
+ title = url
requestLength = request?.length
?: 0 // ?. is required, otherwise Tabulator.js/EventLogTable shows no entries
}
@@ -152,8 +155,20 @@ data class LogEntry(
fun setTransferObject(to: TransferObject) {
this.obj = to
+ initType()
}
+ fun initType() {
+ if (obj != null && obj is HasLinks) {
+ val self = (obj as HasLinks).getLinks().firstOrNull() { it.relation() == Relation.SELF }
+ if (self != null) {
+ val t = self.type.removePrefix("application/json;profile=\"urn:org.restfulobjects:repr-types/")
+ this.type = t.removeSuffix("\"")
+ }
+ }
+ }
+
+
// region response
/**
* This is for access from the views only.
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntryDecorator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntryDecorator.kt
index 945755f..82cb8be 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntryDecorator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/LogEntryDecorator.kt
@@ -104,11 +104,9 @@ class LogEntryDecorator(val logEntry: LogEntry) {
private fun findChildrenByReference(): Set<LogEntry> {
val str = logEntry.response
- console.log("[LED.findChildrenByReference]")
val children = mutableSetOf<LogEntry>()
linked.forEach {
if (it != logEntry && str.contains(it.url)) {
- console.log(it.url)
children.add(it)
}
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
index a716a09..d824b1d 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
@@ -69,7 +69,7 @@ class RoXmlHttpRequest {
xhr.open(method, url, true)
xhr.setRequestHeader("Authorization", "Basic $credentials")
xhr.setRequestHeader(CONTENT_TYPE, "application/$subType;charset=UTF-8")
- xhr.setRequestHeader(ACCEPT, "application/$subType")
+ xhr.setRequestHeader(ACCEPT, "application/$subType, ${Constants.pngMimeType}")
val body = buildBody(link, aggregator)
val rs = buildResourceSpecificationAndSetupHandler(url, subType, body, xhr)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDM.kt
index 11e4fc2..21ed913 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDM.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/CollectionDM.kt
@@ -30,11 +30,13 @@ class CollectionDM(override val title: String) : DisplayModelWithLayout() {
if (!rawData.contains(obj)) {
rawData.add(obj)
val exo = Exposer(obj as TObject)
- data.add(exo.dynamise()) //if exposer is not dynamised, data access in tables won't work
+ data.add(exo.dynamise()) //if exposer is not dynamised, data access in Tabulator tables won't work
}
}
fun addIcon(obj: TransferObject?) {
+ console.log("[CDM.addIcon]")
+ console.log(obj)
TODO("Not yet implemented")
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
index 66f6bc0..b6d9f70 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/DisplayModelWithLayout.kt
@@ -34,6 +34,7 @@ abstract class DisplayModelWithLayout : DisplayModel() {
var propertyLayoutList = mutableListOf<PropertyLt>()
override fun canBeDisplayed(): Boolean {
+// testPropertyNamesMatch()
return when {
isRendered -> false
layout == null -> false
@@ -47,6 +48,23 @@ abstract class DisplayModelWithLayout : DisplayModel() {
}
}
+ /*
+ check that property names match in:
+ * propertyList
+ * propertyLayoutList
+ * propertyDescriptionList
+ */
+ fun testPropertyNamesMatch() {
+ val ps = propertyList.size
+ val pls = propertyLayoutList.size
+ val pds = propertyDescriptionList.size
+ val sizeOK = (ps >= pds) && (pds >= pls)
+ console.log("[DMWL.testPropertyNamesMatch] $sizeOK")
+ console.log(propertyList)
+ console.log(propertyLayoutList)
+ console.log(propertyDescriptionList)
+ }
+
fun addLayout(layout: Layout) {
this.layout = layout
initPropertyLayoutList(layout)
@@ -62,6 +80,8 @@ abstract class DisplayModelWithLayout : DisplayModel() {
r.cols.forEach { cs ->
val c = cs.getCol()
c.fieldSet.forEach { fs ->
+ console.log("[DMWL.initLayout4Row]")
+ console.log(fs.property)
propertyLayoutList.addAll(fs.property)
}
c.tabGroup.forEach { tg ->
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/DomainTypesHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/DomainTypesHandler.kt
index 8e3ca73..19e9188 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/DomainTypesHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/DomainTypesHandler.kt
@@ -24,8 +24,7 @@ import org.apache.isis.client.kroviz.to.DomainTypes
import org.apache.isis.client.kroviz.to.TransferObject
import org.apache.isis.client.kroviz.ui.core.UiManager
-class DomainTypesHandler : org.apache.isis.client.kroviz.handler.BaseHandler() {
-
+class DomainTypesHandler : BaseHandler() {
override fun parse(response: String): TransferObject {
return Json.decodeFromString(DomainTypes.serializer(), response)
@@ -39,5 +38,5 @@ class DomainTypesHandler : org.apache.isis.client.kroviz.handler.BaseHandler() {
update()
}
}
-}
+}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/HttpErrorHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/HttpErrorHandler.kt
index c37b56c..1a6524e 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/HttpErrorHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/HttpErrorHandler.kt
@@ -30,7 +30,6 @@ class HttpErrorHandler : BaseHandler() {
update()
}
-
override fun parse(response: String): TransferObject {
return Json.decodeFromString(HttpError.serializer(), response)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/HttpErrorHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
similarity index 68%
copy from incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/HttpErrorHandler.kt
copy to incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
index c37b56c..3736ad9 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/HttpErrorHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/IconHandler.kt
@@ -18,20 +18,18 @@
*/
package org.apache.isis.client.kroviz.handler
-import kotlinx.serialization.json.Json
-import org.apache.isis.client.kroviz.core.aggregator.ErrorDispatcher
-import org.apache.isis.client.kroviz.to.HttpError
+import org.apache.isis.client.kroviz.to.Icon
import org.apache.isis.client.kroviz.to.TransferObject
+import org.w3c.files.Blob
-class HttpErrorHandler : BaseHandler() {
+class IconHandler : BaseHandler() {
- override fun doHandle() {
- logEntry.addAggregator(ErrorDispatcher())
- update()
+ override fun canHandle(response: String): Boolean {
+ return logEntry.url.endsWith("object-icon")
}
-
- override fun parse(response: String): TransferObject {
- return Json.decodeFromString(HttpError.serializer(), response)
+ override fun parse(response: String): TransferObject? {
+ return Icon(response as Blob)
}
+
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt
index 72fa0f7..0d5316b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutHandler.kt
@@ -23,7 +23,7 @@ import org.apache.isis.client.kroviz.layout.Layout
import org.apache.isis.client.kroviz.to.TransferObject
import org.apache.isis.client.kroviz.utils.XmlHelper
-class LayoutHandler : org.apache.isis.client.kroviz.handler.BaseHandler() {
+class LayoutHandler : BaseHandler() {
override fun canHandle(response: String): Boolean {
val isJsonLayout = !XmlHelper.isXml(response)
@@ -34,7 +34,7 @@ class LayoutHandler : org.apache.isis.client.kroviz.handler.BaseHandler() {
return false
}
-
+
override fun parse(response: String): TransferObject {
return Json.decodeFromString(Layout.serializer(), response)
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutXmlHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutXmlHandler.kt
index ec1ddad..89af96d 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutXmlHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/LayoutXmlHandler.kt
@@ -22,7 +22,7 @@ import org.apache.isis.client.kroviz.to.TransferObject
import org.apache.isis.client.kroviz.to.bs3.Grid
import org.apache.isis.client.kroviz.utils.XmlHelper
-class LayoutXmlHandler : org.apache.isis.client.kroviz.handler.BaseHandler() {
+class LayoutXmlHandler : BaseHandler() {
override fun canHandle(response: String): Boolean {
val isLayoutXml = XmlHelper.isXml(response)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/ResponseHandler.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/ResponseHandler.kt
index 316cc47..7391cf0 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/ResponseHandler.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/handler/ResponseHandler.kt
@@ -47,6 +47,7 @@ object ResponseHandler {
private var _12 = DomainTypesHandler()
private var _13 = DomainTypeHandler()
private var _14 = DiagramHandler()
+ private var _15 = IconHandler()
private var last = DefaultHandler()
init {
@@ -69,7 +70,8 @@ object ResponseHandler {
_11.successor = _12
_12.successor = _13
_13.successor = _14
- _14.successor = last
+ _14.successor = _15
+ _15.successor = last
}
fun handle(logEntry: LogEntry) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Icon.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Icon.kt
index e7bd8ec..2a41dba 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Icon.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Icon.kt
@@ -1,6 +1,8 @@
package org.apache.isis.client.kroviz.to
+import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
+import org.w3c.files.Blob
@Serializable
-data class Icon(val image: String) : TransferObject
+data class Icon(@Contextual val image: Blob) : TransferObject
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 0f8841d..8d6f16d 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
@@ -29,12 +29,8 @@ class FieldSet(node: Node) {
init {
val dyNode = node.asDynamic()
- if (dyNode.hasOwnProperty("name")) {
- name = dyNode.getAttribute("name") as String
- }
- if (dyNode.hasOwnProperty("id")) {
- id = dyNode.getAttribute("id") as String
- }
+ name = dyNode.getAttribute("name") as String
+ id = dyNode.getAttribute("id") as String
val nl = node.childNodes.asList()
val actList = nl.filter { it.nodeName.equals("cpt:action") }
@@ -46,7 +42,9 @@ class FieldSet(node: Node) {
val pNl = nl.filter { it.nodeName.equals("cpt:property") }
for (n: Node in pNl) {
val p = Property(n)
- propertyList.add(p)
+ if (p.hidden != "") {
+ propertyList.add(p)
+ }
}
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
index e42ee6e..9485d6a 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/bs3/Property.kt
@@ -35,9 +35,7 @@ class Property(node: Node) {
init {
val dn = node.asDynamic()
- if (dn.hasOwnProperty("hidden")) {
- id = dn.getAttribute("hidden") as String
- }
+ id = dn.getAttribute("hidden")
id = dn.getAttribute("id") as String
typicalLength = dn.getAttribute("typicalLength")
multiLine = dn.getAttribute("multiLine")
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
index dddb061..91876ad 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/ColBuilder.kt
@@ -45,6 +45,8 @@ class ColBuilder : UiBuilder() {
for (fs in col.fieldSetList) {
val fsCpt = FieldSetBuilder().create(fs, tObject, dsp)!!
val fsPanel = FieldsetPanel(legend = fs.name).add(fsCpt)
+ val tto = TooltipOptions(title = fs.id)
+ fsPanel.enableTooltip(tto)
panel.add(fsPanel)
}
for (row in col.rowList) {
@@ -53,14 +55,15 @@ class ColBuilder : UiBuilder() {
}
for (c in col.collectionList) {
console.log("[CB.create]")
- console.log(c)
// analogous to UiManager.openCollectionView
val key = c.id // entities
val objectDM = dsp.displayModel
val collectionDM = objectDM.collections.get(key)!!
- console.log(collectionDM)
+ console.log(collectionDM.grid)
+ console.log(collectionDM.layout)
val tblCpt = RoTable(collectionDM)
- panel.add(tblCpt)
+ val fsPanel = FieldsetPanel(legend = key).add(tblCpt)
+ panel.add(fsPanel)
collectionDM.isRendered = true
}
return panel
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
index bb8dbcd..6c3b951 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/ColumnFactory.kt
@@ -18,9 +18,6 @@
*/
package org.apache.isis.client.kroviz.ui.core
-import org.apache.isis.client.kroviz.core.event.EventStore
-import org.apache.isis.client.kroviz.core.model.Exposer
-import org.apache.isis.client.kroviz.core.model.CollectionDM
import io.kvision.html.Button
import io.kvision.html.ButtonStyle
import io.kvision.tabulator.Align
@@ -29,6 +26,9 @@ import io.kvision.tabulator.Editor
import io.kvision.tabulator.Formatter
import io.kvision.tabulator.js.Tabulator
import io.kvision.utils.obj
+import org.apache.isis.client.kroviz.core.event.EventStore
+import org.apache.isis.client.kroviz.core.model.CollectionDM
+import org.apache.isis.client.kroviz.core.model.Exposer
/**
* Create ColumnDefinitions for Tabulator tables
@@ -53,17 +53,18 @@ class ColumnFactory {
displayCollection: CollectionDM,
withCheckBox: Boolean = false): List<ColumnDefinition<dynamic>> {
+ console.log("[CF.buildColumns]")
+ console.log(displayCollection)
val columns = mutableListOf<ColumnDefinition<dynamic>>()
if (withCheckBox) {
val checkBox = buildCheckBox()
columns.add(checkBox)
}
- val menu = buildMenu()
- columns.add(menu)
+ if (hasIcon(displayCollection)) {
+ val menu = buildMenu()
+ columns.add(menu)
- val model = displayCollection.data as List<dynamic>
- if (model[0].hasOwnProperty("iconName") as Boolean) {
val icon = buildLinkIcon()
columns.add(icon)
}
@@ -84,6 +85,11 @@ class ColumnFactory {
return columns
}
+ private fun hasIcon(displayCollection: CollectionDM): Boolean {
+ val model = displayCollection.data as List<dynamic>
+ return (model[0].hasOwnProperty("iconName") as Boolean)
+ }
+
private fun buildLinkIcon(): ColumnDefinition<Exposer> {
return ColumnDefinition<dynamic>(
"",
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/Constants.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/Constants.kt
index 2165c4a..8e7207a 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/Constants.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/Constants.kt
@@ -23,6 +23,7 @@ object Constants {
const val restInfix = "restful/"
const val stdMimeType = "text/plain"
const val svgMimeType = "image/svg+xml"
+ const val pngMimeType = "image/png"
const val xmlMimeType = "application/xml"
const val calcHeight = "calc(100vh - 88px)"
const val actionSeparator = "\n"
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/FormPanelFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/FormPanelFactory.kt
index 2c6b4d5..833c45f 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/FormPanelFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/FormPanelFactory.kt
@@ -203,7 +203,7 @@ class FormPanelFactory(items: List<FormItem>) : VPanel() {
}
panel.height = auto
panel.width = auto
- panel.overflow = Overflow.SCROLL
+ panel.overflow = Overflow.AUTO
return panel
}
@@ -211,7 +211,7 @@ class FormPanelFactory(items: List<FormItem>) : VPanel() {
val panel = SvgPanel()
panel.height = auto
panel.width = auto
- panel.overflow = Overflow.SCROLL
+ panel.overflow = Overflow.AUTO
fi.callBack = panel
return panel
}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
index a1c0f4c..03df4db 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/MenuFactory.kt
@@ -53,8 +53,6 @@ object MenuFactory {
val link = buildActionLink(it.id, text)
val invokeLink = it.getInvokeLink()!!
link.onClick {
- console.log("[MF.buildForObject]")
- console.log(invokeLink)
RoXmlHttpRequest().invoke(invokeLink)
}
dd.add(link)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
index 47c95cf..7809922 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt
@@ -113,8 +113,6 @@ object UiManager {
}
fun closeView(tab: SimplePanel) {
- console.log("[UM.closeView]")
- console.log(tab)
val tt = tab.title
if (tt != null) {
EventStore.closeView(tt)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
index 02eb6f5..447b97a 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/DiagramDialog.kt
@@ -47,6 +47,7 @@ class DiagramDialog(
dialog = RoDialog(
widthPerc = 80,
+ heightPerc = 80,
caption = "Diagram",
items = formItems,
command = this,
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
index 37c119b..15ca0a1 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/EventLogTable.kt
@@ -27,15 +27,20 @@ import io.kvision.tabulator.*
import io.kvision.utils.obj
import io.kvision.utils.px
import org.apache.isis.client.kroviz.core.event.LogEntry
+import org.apache.isis.client.kroviz.to.HasLinks
+import org.apache.isis.client.kroviz.to.Relation
import org.apache.isis.client.kroviz.to.TObject
+import org.apache.isis.client.kroviz.to.TransferObject
import org.apache.isis.client.kroviz.ui.core.Constants
+import org.apache.isis.client.kroviz.ui.core.UiManager
import org.apache.isis.client.kroviz.ui.dialog.EventLogDetail
+import org.apache.isis.client.kroviz.utils.Utils
class EventLogTable(val model: List<LogEntry>) : VPanel() {
val tabulator: Tabulator<LogEntry>
private val columns = listOf(
- ColumnDefinition(
+ ColumnDefinition<LogEntry>(
download = false,
title = "",
field = "state",
@@ -44,17 +49,24 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
hozAlign = Align.CENTER,
formatterComponentFunction = { _, _, data -> buildActionButton(data) }
),
- ColumnDefinition<LogEntry>(
+ ColumnDefinition(
download = false,
title = "Title",
field = "title",
headerFilter = Editor.INPUT,
- width = "450",
+ width = "700",
formatterComponentFunction = { _, _, data -> buildObjectButton(data) }
),
+ ColumnDefinition(
+ download = false,
+ title = "Type",
+ field = "type",
+ headerFilter = Editor.INPUT,
+ width = "200"
+ ),
ColumnDefinition("State", "state", width = "100", headerFilter = Editor.INPUT, download = false),
ColumnDefinition("Method", "method", width = "100", headerFilter = Editor.INPUT, download = false),
- ColumnDefinition<LogEntry>(
+ ColumnDefinition(
download = false,
title = "# of Agg.",
field = "nOfAggregators",
@@ -66,7 +78,9 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
title = "response",
field = "response",
headerFilter = Editor.INPUT,
- width = "200"),
+ width = "200",
+// tooltip = { (data) -> data.response }
+ ),
ColumnDefinition("resp.len", field = "responseLength", width = "100", hozAlign = Align.RIGHT, download = false),
ColumnDefinition("cacheHits", field = "cacheHits", width = "100", hozAlign = Align.RIGHT, download = false),
ColumnDefinition("duration", field = "duration", width = "100", hozAlign = Align.RIGHT, download = false),
@@ -90,16 +104,30 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
private fun buildObjectButton(data: LogEntry): Button {
val b = Button(
- text = data.title,
+ text = shorten(data.title),
icon = data.state.iconName,
style = ButtonStyle.LINK)
b.onClick {
- console.log(data)
+ kotlinx.browser.window.open(data.title) //IMPROVE should be URL
}
+ val tto = TooltipOptions(title = data.title)
+ b.enableTooltip(tto)
if (data.obj is TObject) b.setDragDropData(Constants.stdMimeType, data.url)
return b
}
+ fun shorten(url: String): String {
+ var result = url
+ val signature = Constants.restInfix
+ if (url.contains(signature)) {
+ // strip off protocol, host, port
+ val protocolHostPort = UiManager.getUrl()
+ result = result.replace(protocolHostPort + signature, "")
+ result = Utils.removeHexCode(result)
+ }
+ return result
+ }
+
private fun buildActionButton(data: LogEntry): Button {
val b = Button(
text = "",
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
index cfc56fb..c61c613 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
@@ -81,7 +81,7 @@ object ACTIONS_STRINGS_INVOKE : Response() {
"value": "<div class=\"paragraph\">\n<p>The framework has built-in support for the <code>String</code> data type.</p>\n</div>\n<div class=\"paragraph\">\n<p>From here you can:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>navigate to an entity that uses the <code>String</code> datatype</p>\n</li>\n<li>\n<p>open a view model that uses the <code>String</code> datatype</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Some properties on these domain objects are mandatory, [...]
"format": "string",
"extensions": {
- "x-isis-format": "string"
+ "": "string"
},
"disabledReason": "Contributed property"
},