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/05/25 17:06:09 UTC

[isis] 02/04: ISIS-2682 change member type from Listto Map

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 3d21882af5f8d65477b7e3cf771bdb5bddb0a817
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Tue May 25 14:07:33 2021 +0200

    ISIS-2682 change member type from List<Link>to Map<String, Member>
---
 .../core/aggregator/DomainTypesAggregator.kt       |  9 ++-
 .../client/kroviz/core/model/meta/MetaClass.kt     |  9 ++-
 .../org/apache/isis/client/kroviz/to/DomainType.kt | 33 ++++++++
 .../org/apache/isis/client/kroviz/to/Link.kt       |  6 +-
 .../org/apache/isis/client/kroviz/to/Member.kt     | 10 ++-
 .../isis/client/kroviz/to/PlainTransferObjects.kt  |  9 ---
 .../isis/client/kroviz/ui/diagram/ClassDiagram.kt  |  7 +-
 .../snapshots/demo2_0_0/COLLECTIONS_ENTITIES.kt    | 91 +++++++++++-----------
 8 files changed, 104 insertions(+), 70 deletions(-)

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 2f0f8b4..1326124 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
@@ -59,11 +59,16 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() {
         } else {
             dpm.addData(obj)
             val propertyList = obj.members.filter {
-                it.isProperty()
+                it.value.memberType == MemberType.PROPERTY.type
             }
             (dpm as DiagramDM).incNumberOfProperties(propertyList.size)
             propertyList.forEach { p ->
-                invoke(p, this)
+                val links = p.value.links
+                links.forEach {
+                    if (it.isProperty()) {
+                        invoke(it, this)
+                    }
+                }
             }
         }
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/meta/MetaClass.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/meta/MetaClass.kt
index fe62f17..507b899 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/meta/MetaClass.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/meta/MetaClass.kt
@@ -33,13 +33,14 @@ class MetaClass(val domainType: DomainType) {
         pkg = MetaPackage(pkgName)
 
         domainType.members.forEach { m ->
-            val memberName = m.name()
+            val member = m.value
+            val name = member.id
             when {
-                m.isProperty() -> properties.add(MetaProperty(memberName))
-                m.isAction() -> actions.add(MetaAction(memberName))
+                member.isProperty() -> properties.add(MetaProperty(name))
+                member.isAction() -> actions.add(MetaAction(name))
                 else -> {
                     console.log("[MetaClass.init] unexpected member type")
-                    console.log(memberName)
+                    console.log(name)
                 }
             }
         }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/DomainType.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/DomainType.kt
new file mode 100644
index 0000000..7c56bd7
--- /dev/null
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/DomainType.kt
@@ -0,0 +1,33 @@
+/*
+ *  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.to
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class DomainType(
+        override val links: List<Link>,
+        val canonicalName: String,
+        val members: Map<String, Member>,
+        val typeActions: List<Link>,
+        val extensions: Extensions
+) : TransferObject, HasLinks {
+
+}
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt
index e2cdb82..8938380 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Link.kt
@@ -26,7 +26,7 @@ data class Link(val rel: String = "",
                 val method: String = Method.GET.operation,
                 val href: String,
                 val type: String = "",
-        //IMPROVE RO SPEC? "args" should be changed to "arguments" - RO spec or SimpleApp?
+        //RO SPEC OR ISIS IMPL? can "args" be folded into "arguments"
                 val args: Map<String, Argument> = emptyMap(),
         /* arguments can either be:
          * -> empty Map {}
@@ -60,10 +60,6 @@ data class Link(val rel: String = "",
         return relation() == Relation.PROPERTY
     }
 
-    fun isAction(): Boolean {
-        return relation() == Relation.ACTION
-    }
-
     fun name(): String {
         return href.split("/").last()
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Member.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Member.kt
index 6be38dd..199704e 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Member.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/Member.kt
@@ -36,7 +36,7 @@ data class Member(val id: String,
     var type: String? = ValueType.TEXT.type
 
     init {
-        if (memberType == MemberType.PROPERTY.type
+        if (isProperty()
                 && value == null
                 && extensions != null
                 && extensions.xIsisFormat == "string") {
@@ -45,6 +45,14 @@ data class Member(val id: String,
         type = TypeMapper().match(this)
     }
 
+    fun isProperty(): Boolean {
+        return memberType == MemberType.PROPERTY.type
+    }
+
+    fun isAction(): Boolean {
+        return memberType == MemberType.ACTION.type
+    }
+
     fun isReadOnly(): Boolean {
         return !isReadWrite()
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
index 353cb8c..24e8217 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
@@ -29,15 +29,6 @@ enum class ActionSemantics(val type: String) {
 }
 
 @Serializable
-data class DomainType(
-        override val links: List<Link>,
-        val canonicalName: String,
-        val members: List<Link>,   // change to Map<String, Member>, once https://issues.apache.org/jira/browse/ISIS-2684 is fixed
-        val typeActions: List<Link>,
-        val extensions: Extensions
-) : TransferObject, HasLinks
-
-@Serializable
 data class DomainTypes(override val links: List<Link> = emptyList(),
                        val values: List<Link> = emptyList(),
                        val extensions: Extensions? = null
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/ClassDiagram.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/ClassDiagram.kt
index 94991a4..7924e5e 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/ClassDiagram.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/diagram/ClassDiagram.kt
@@ -86,11 +86,12 @@ object ClassDiagram {
         var pumlCode = "$Q@startuml$NL package $pkg {$NL" +
                 "class $cls$NL"
         domainType.members.forEach { m ->
-            val memberName = m.name()
+            val member = m.value
+            val name = member.id
             pumlCode += when {
-                m.isProperty() -> "$cls : $memberName$NL"
+                member.isProperty() -> "$cls : $name$NL"
                 else -> {
-                    "$cls : $memberName()$NL"
+                    "$cls : $name()$NL"
                 }
             }
         }
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/COLLECTIONS_ENTITIES.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/COLLECTIONS_ENTITIES.kt
index 760a8ae..eac8bfc 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/COLLECTIONS_ENTITIES.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/COLLECTIONS_ENTITIES.kt
@@ -22,52 +22,51 @@ package org.apache.isis.client.kroviz.snapshots.demo2_0_0
 import org.apache.isis.client.kroviz.snapshots.Response
 
 object COLLECTIONS_ENTITIES: Response(){
-    override val url = "http://localhost:8080/restful/services/simple.SimpleObjectMenu/actions/findByName"
+    override val url = "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/collections/entities"
     override val str = """
-        {
-          "id": "entities",
-          "memberType": "collection",
-          "links": [
-            {
-              "rel": "self",
-              "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\""
-            },
-            {
-              "rel": "up",
-              "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/collections/entities",
-              "method": "GET",
-              "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/collection-description\""
-            }
-          ],
-          "extensions": {
-            "collectionSemantics": "list"
-          },
-          "value": [
-            {
-              "rel": "urn:org.restfulobjects:rels/value",
-              "href": "http://localhost:8080/restful/objects/demo.JavaLangStringJdo/1",
-              "method": "GET",
-              "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
-              "title": "StringJDO entity: Hello"
-            },
-            {
-              "rel": "urn:org.restfulobjects:rels/value",
-              "href": "http://localhost:8080/restful/objects/demo.JavaLangStringJdo/2",
-              "method": "GET",
-              "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
-              "title": "StringJDO entity: world"
-            }
-          ],
-          "disabledReason": "Immutable"
-        }
+{
+  "id": "entities",
+  "memberType": "collection",
+  "links": [
+    {
+      "rel": "self",
+      "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\""
+    },
+    {
+      "rel": "up",
+      "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/collections/entities",
+      "method": "GET",
+      "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/collection-description\""
+    }
+  ],
+  "extensions": {
+    "collectionSemantics": "list"
+  },
+  "value": [
+    {
+      "rel": "urn:org.restfulobjects:rels/value",
+      "href": "http://localhost:8080/restful/objects/demo.JavaLangStringEntity/1",
+      "method": "GET",
+      "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
+      "title": "StringJDO entity: Hello"
+    },
+    {
+      "rel": "urn:org.restfulobjects:rels/value",
+      "href": "http://localhost:8080/restful/objects/demo.JavaLangStringEntity/2",
+      "method": "GET",
+      "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
+      "title": "StringJDO entity: world"
+    }
+  ]
+}
     """
 }