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