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 2022/04/07 07:25:59 UTC

[isis] branch master updated: ISIS-2994: further remove direct uses of facets in vaadin and wicket

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 1a7c9d3f10 ISIS-2994: further remove direct uses of facets in vaadin and wicket
1a7c9d3f10 is described below

commit 1a7c9d3f107c426125108d38691b9e6bfde6e183
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Apr 7 09:25:50 2022 +0200

    ISIS-2994: further remove direct uses of facets in vaadin and wicket
---
 .../apache/isis/core/metamodel/util/Facets.java    | 48 ++++++++++++++++++++++
 .../ui/components/collection/TableViewVaa.java     |  7 +---
 .../wicket/model/models/ManagedObjectModel.java    | 24 ++++-------
 .../viewer/wicket/model/models/ScalarModel.java    | 20 +--------
 .../interaction/HasBookmarkedOwnerAbstract.java    | 16 +++-----
 .../wicket/model/util/PageParameterUtils.java      |  8 ++--
 6 files changed, 67 insertions(+), 56 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
index 964f403041..8ea2391a69 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
@@ -21,8 +21,13 @@ package org.apache.isis.core.metamodel.util;
 import java.util.Optional;
 import java.util.OptionalInt;
 import java.util.function.Predicate;
+import java.util.stream.Stream;
 
+import org.springframework.lang.Nullable;
+
+import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.layout.grid.bootstrap.BSGrid;
 import org.apache.isis.commons.collections.Can;
@@ -31,11 +36,15 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
+import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
+import org.apache.isis.core.metamodel.facets.object.projection.ProjectionFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
@@ -75,6 +84,18 @@ public final class Facets {
         .orElseGet(OptionalInt::empty);
     }
 
+    public Optional<BookmarkPolicy> bookmarkPolicy(final @Nullable ObjectSpecification objectSpec) {
+        return Optional.ofNullable(objectSpec)
+        .flatMap(spec->spec.lookupFacet(BookmarkPolicyFacet.class))
+        .map(BookmarkPolicyFacet::value);
+    }
+
+    public Predicate<ObjectSpecification> bookmarkPolicyMatches(final Predicate<BookmarkPolicy> matcher) {
+        return feature->Facets.bookmarkPolicy(feature)
+        .map(matcher::test)
+        .orElse(false);
+    }
+
     public Optional<BSGrid> bootstrapGrid(
             final ObjectSpecification objectSpec, final ManagedObject objectAdapter) {
         return objectSpec.lookupFacet(GridFacet.class)
@@ -82,6 +103,11 @@ public final class Facets {
         .flatMap(grid->_Casts.castTo(BSGrid.class, grid));
     }
 
+    //XXX could be moved to ManagedObject directly, there be an utility already under a different name
+    public Stream<ManagedObject> collectionStream(final @Nullable ManagedObject collection) {
+        return CollectionFacet.streamAdapters(collection);
+    }
+
     public Optional<String> cssClassFor(
             final FacetHolder objectSpec, final ManagedObject objectAdapter) {
         return objectSpec.lookupFacet(CssClassFacet.class)
@@ -181,6 +207,27 @@ public final class Facets {
                 .orElseGet(OptionalInt::empty);
     }
 
+    //XXX could be moved to ManagedObject directly
+    public ManagedObject projected(final ManagedObject objectAdapter) {
+        return objectAdapter.getSpecification().lookupFacet(ProjectionFacet.class)
+        .map(projectionFacet->projectionFacet.projected(objectAdapter))
+        .orElse(objectAdapter);
+    }
+
+    public Optional<PromptStyle> promptStyle(final ObjectFeature feature) {
+        return feature.lookupFacet(PromptStyleFacet.class)
+        .map(PromptStyleFacet::value);
+    }
+
+    public PromptStyle promptStyleOrElse(final ObjectFeature feature, final PromptStyle fallback) {
+        return Facets.promptStyle(feature)
+        .map(promptStyle->
+            promptStyle == PromptStyle.AS_CONFIGURED
+            ? fallback
+            : promptStyle)
+        .orElse(fallback);
+    }
+
     public OptionalInt typicalLength(
             final ObjectSpecification objectSpec, final OptionalInt maxLength) {
         val typicalLength = objectSpec
@@ -203,4 +250,5 @@ public final class Facets {
     }
 
 
+
 }
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
index baa1d7e8bf..bb157aa824 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
@@ -28,7 +28,6 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.Oid;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.collections._Multimaps;
-import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedCollection;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
@@ -36,6 +35,7 @@ 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.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.core.metamodel.util.Facets;
 import org.apache.isis.incubator.viewer.vaadin.model.context.UiContextVaa;
 
 import lombok.AccessLevel;
@@ -66,10 +66,7 @@ public class TableViewVaa extends VerticalLayout {
             final @NonNull ManagedObject collection,
             final @NonNull Where where) {
 
-        val collectionFacet = collection.getSpecification()
-                .getFacet(CollectionFacet.class);
-
-        val objects = collectionFacet.stream(collection)
+        val objects = Facets.collectionStream(collection)
                 .collect(Can.toCan());
 
         return ManagedObjects.commonSpecification(objects)
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
index 242d8c9ba0..2fa4c1c879 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ManagedObjectModel.java
@@ -28,13 +28,12 @@ import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Collections;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.PackedManagedObject;
+import org.apache.isis.core.metamodel.util.Facets;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 
 import lombok.NonNull;
@@ -152,23 +151,14 @@ extends ModelAbstract<ManagedObject> {
     }
 
 
-    public boolean hasAsRootPolicy() {
-        return hasBookmarkPolicy(BookmarkPolicy.AS_ROOT);
+    public final boolean hasAsRootPolicy() {
+        return Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_ROOT::equals)
+                .test(getTypeOfSpecification());
     }
 
-    public boolean hasAsChildPolicy() {
-        return hasBookmarkPolicy(BookmarkPolicy.AS_CHILD);
-    }
-
-    private boolean hasBookmarkPolicy(final BookmarkPolicy policy) {
-        return lookupFacet(BookmarkPolicyFacet.class)
-                .map(facet->facet.value() == policy)
-                .orElse(false);
-    }
-
-    public <T extends Facet> Optional<T> lookupFacet(final Class<T> facetClass) {
-        return Optional.ofNullable(getTypeOfSpecification())
-                .map(objectSpec->objectSpec.getFacet(facetClass));
+    public final boolean hasAsChildPolicy() {
+        return Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_CHILD::equals)
+                .test(getTypeOfSpecification());
     }
 
     public boolean isEmpty() {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index ebc8e4e8cb..48a42164dd 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -34,13 +34,13 @@ import org.apache.isis.commons.internal.debug.xray.XrayUi;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedValue;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.util.Facets;
 import org.apache.isis.viewer.common.model.feature.ScalarUiModel;
 import org.apache.isis.viewer.common.model.object.ObjectUiModel;
 import org.apache.isis.viewer.common.model.object.ObjectUiModel.HasRenderingHints;
@@ -242,23 +242,7 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
 
     @Override
     public final PromptStyle getPromptStyle() {
-        return getPromptStyleOrElse(PromptStyle.INLINE);
-    }
-
-    private final PromptStyle getPromptStyleOrElse(final PromptStyle fallback) {
-        final PromptStyleFacet facet = getFacet(PromptStyleFacet.class);
-        if(facet == null) {
-            // don't think this can happen actually, see PromptStyleFacetFallback
-            return fallback;
-        }
-        val promptStyle = facet.value();
-        if (promptStyle == PromptStyle.AS_CONFIGURED) {
-            // I don't think this can happen, actually...
-            // when the metamodel is built, it should replace AS_CONFIGURED with one of the other prompts
-            // (see PromptStyleConfiguration and PromptStyleFacetFallback)
-            return fallback;
-        }
-        return promptStyle;
+        return Facets.promptStyleOrElse(getMetaModel(), PromptStyle.INLINE);
     }
 
     public boolean canEnterEditMode() {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
index 35be23cb5a..35c40a457c 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
@@ -20,9 +20,9 @@ package org.apache.isis.viewer.wicket.model.models.interaction;
 
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.util.Facets;
 import org.apache.isis.viewer.wicket.model.models.ModelAbstract;
 
 import lombok.RequiredArgsConstructor;
@@ -54,11 +54,13 @@ implements
     // -- SHORTCUTS
 
     public final boolean hasAsRootPolicy() {
-        return hasBookmarkPolicy(BookmarkPolicy.AS_ROOT);
+        return Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_ROOT::equals)
+                .test(getTypeOfSpecification());
     }
 
     public final boolean hasAsChildPolicy() {
-        return hasBookmarkPolicy(BookmarkPolicy.AS_CHILD);
+        return Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_CHILD::equals)
+                .test(getTypeOfSpecification());
     }
 
     public final ObjectSpecification getTypeOfSpecification() {
@@ -66,12 +68,4 @@ implements
         return bookmarkedObject.getObject().getSpecification(); // serving this from an unattached entity seems safe
     }
 
-    // -- HELPER
-
-    private boolean hasBookmarkPolicy(final BookmarkPolicy policy) {
-        return getTypeOfSpecification().lookupFacet(BookmarkPolicyFacet.class)
-                .map(facet->facet.value() == policy)
-                .orElse(false);
-    }
-
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
index 274049a682..92fff493f5 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
@@ -35,13 +35,13 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facets.object.projection.ProjectionFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueSerializer;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.util.Facets;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ObjectAdapterModel;
@@ -138,19 +138,17 @@ public class PageParameterUtils {
     public static PageParameters createPageParametersForBookmarkablePageLink(
             final @NonNull ObjectAdapterModel callingEntityModel,
             final ManagedObject adapter) {
+
         return
                 ManagedObjects.isIdentifiable(adapter)
                     && !ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)
                 ? EntityModel.ofAdapter(
                     callingEntityModel.getCommonContext(),
-                    adapter.getSpecification().lookupFacet(ProjectionFacet.class)
-                    .map(projectionFacet->projectionFacet.projected(adapter))
-                    .orElse(adapter))
+                    Facets.projected(adapter))
                     .getPageParametersWithoutUiHints()
                 : callingEntityModel.getPageParametersWithoutUiHints();
     }
 
-
     public static PageParameters createPageParametersForAction(
             final ManagedObject adapter,
             final ObjectAction objectAction,