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:13 UTC

[isis] 07/07: ISIS-2505 upgrade KVision, Kotlin, Serialization

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