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,