You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/05/21 08:30:48 UTC

[isis] branch master updated: ISIS-2684: fixes for DomainTypeReprRenderer.addMembers:

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new bb1a9c1  ISIS-2684: fixes for DomainTypeReprRenderer.addMembers:
bb1a9c1 is described below

commit bb1a9c12c78462acba0b95c16e8a7a7f9bfcfc20
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 21 10:30:31 2021 +0200

    ISIS-2684: fixes for DomainTypeReprRenderer.addMembers:
    
    - json repr is a map not a list
    - collections were rendered as Rel.PROPERTY
    - associations had no mixins included
---
 .../core/metamodel/spec/feature/ObjectFeature.java |  4 ++
 .../domaintypes/DomainTypeReprRenderer.java        | 49 ++++++++++++----------
 2 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectFeature.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectFeature.java
index c09e2de..61e660d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectFeature.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectFeature.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.metamodel.spec.feature;
 
+import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -38,6 +39,9 @@ public interface ObjectFeature extends Specification {
      * Returns the identifier of the member, which must not change. This should
      * be all camel-case with no spaces: so if the member is called 'Return
      * Date' then a suitable id would be 'returnDate'.
+     * @implNote for {@link ObjectMember}(s) this is a shortcut for
+     * {@link ObjectMember#getIdentifier()}.getMemberName()
+     * @see Identifier#getMemberName()
      */
     String getId();
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
index f06d1e4..c230c67 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
@@ -23,8 +23,6 @@ import com.fasterxml.jackson.databind.node.NullNode;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
@@ -91,28 +89,35 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
     }
 
     private void addMembers() {
-        final JsonRepresentation membersList = JsonRepresentation.newArray();
-        representation.mapPut("members", membersList);
-
-        objectSpecification.streamAssociations(MixedIn.EXCLUDED)
-        .forEach(association->{
-            if (association.isOneToOneAssociation()) {
-                final OneToOneAssociation property = (OneToOneAssociation) association;
-                final LinkBuilder linkBuilder = PropertyDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.PROPERTY, objectSpecification, property);
-                membersList.arrayAdd(linkBuilder.build());
-            } else if (association.isOneToManyAssociation()) {
-                final OneToManyAssociation collection = (OneToManyAssociation) association;
-                final LinkBuilder linkBuilder = CollectionDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.PROPERTY, objectSpecification, collection);
-                membersList.arrayAdd(linkBuilder.build());
-            }
-        });
+        final JsonRepresentation membersMap = JsonRepresentation.newMap();
+        representation.mapPut("members", membersMap);
+
+        objectSpecification.streamProperties(MixedIn.INCLUDED)
+        .forEach(property->
+            membersMap.mapPut(
+                    property.getId(),
+                    PropertyDescriptionReprRenderer
+                        .newLinkToBuilder(getResourceContext(), Rel.PROPERTY, objectSpecification, property)
+                        .build())
+        );
+
+        objectSpecification.streamCollections(MixedIn.INCLUDED)
+        .forEach(collection->
+            membersMap.mapPut(
+                    collection.getId(),
+                    CollectionDescriptionReprRenderer
+                        .newLinkToBuilder(getResourceContext(), Rel.COLLECTION, objectSpecification, collection)
+                        .build())
+        );
 
         objectSpecification.streamAnyActions(MixedIn.INCLUDED)
-        .forEach(action->{
-            final LinkBuilder linkBuilder = ActionDescriptionReprRenderer
-                    .newLinkToBuilder(getResourceContext(), Rel.ACTION, objectSpecification, action);
-            membersList.arrayAdd(linkBuilder.build());
-        });
+        .forEach(action->
+            membersMap.mapPut(
+                    action.getId(),
+                    ActionDescriptionReprRenderer
+                        .newLinkToBuilder(getResourceContext(), Rel.ACTION, objectSpecification, action)
+                        .build())
+        );
 
     }