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/12 10:30:44 UTC
[isis] branch master updated: ISIS-2661: adds
AssociatedWithFacetFromLayoutXml that is derived from layout.xml
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 c99092d ISIS-2661: adds AssociatedWithFacetFromLayoutXml that is derived from layout.xml
c99092d is described below
commit c99092d0ef717fffa4859214d4950a8ba0a2512e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed May 12 12:30:25 2021 +0200
ISIS-2661: adds AssociatedWithFacetFromLayoutXml that is derived from
layout.xml
---
.../isis/core/metamodel/facetapi/FacetUtil.java | 24 +++++----
.../AssociatedWithFacetFromLayoutXml.java | 59 ++++++++++++++++++++++
.../services/grid/GridSystemServiceAbstract.java | 3 ++
.../core/metamodel/spec/feature/ObjectAction.java | 35 ++++++-------
.../wicket/model/models/EntityCollectionModel.java | 4 +-
.../entity/header/EntityHeaderPanel.java | 2 +-
6 files changed, 94 insertions(+), 33 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
index db73476..fe9e60d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
@@ -22,26 +22,29 @@ package org.apache.isis.core.metamodel.facetapi;
import java.util.List;
import java.util.function.BiConsumer;
+import javax.annotation.Nullable;
+
import org.apache.isis.core.metamodel.util.snapshot.XmlSchema;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import lombok.NonNull;
import lombok.val;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class FacetUtil {
- public static void addIfNotAlreadyPresent(final Facet facet) {
+ public static void addIfNotAlreadyPresent(final @Nullable Facet facet) {
if (facet == null) {
return;
}
val facetHolder = facet.getFacetHolder();
if(!facetHolder.containsFacet(facet.facetType())) {
- facetHolder.addFacet(facet);
+ facetHolder.addFacet(facet);
}
}
-
- public static void replaceIfAlreadyPresent(final Facet facet) {
+
+ public static void replaceIfAlreadyPresent(final @Nullable Facet facet) {
if (facet == null) {
return;
}
@@ -49,16 +52,15 @@ public final class FacetUtil {
facetHolder.addOrReplaceFacet(facet);
// second call sets the underlying facet as well to this type
// hacky, to pass validation
- facetHolder.addOrReplaceFacet(facet);
+ facetHolder.addOrReplaceFacet(facet);
}
-
- public static void addOrReplaceFacet(final Facet facet) {
+
+ public static void addOrReplaceFacet(final @Nullable Facet facet) {
if (facet == null) {
return;
}
- val facetHolder = facet.getFacetHolder();
- facetHolder.addOrReplaceFacet(facet);
+ facet.getFacetHolder().addOrReplaceFacet(facet);
}
/**
@@ -68,7 +70,7 @@ public final class FacetUtil {
* @return <tt>true</tt> if a non-<tt>null</tt> facet was added,
* <tt>false</tt> otherwise.
*/
- public static boolean addFacet(final Facet facet) {
+ public static boolean addFacet(final @Nullable Facet facet) {
if (facet == null) {
return false;
}
@@ -82,7 +84,7 @@ public final class FacetUtil {
*
* @return <tt>true</tt> if any facets were added, <tt>false</tt> otherwise.
*/
- public static boolean addFacets(final List<Facet> facetList) {
+ public static boolean addFacets(final @NonNull List<Facet> facetList) {
boolean addedFacets = false;
for (val facet : facetList) {
addedFacets = addFacet(facet) | addedFacets;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/AssociatedWithFacetFromLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/AssociatedWithFacetFromLayoutXml.java
new file mode 100644
index 0000000..2d4cbde
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/AssociatedWithFacetFromLayoutXml.java
@@ -0,0 +1,59 @@
+/*
+ * 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.core.metamodel.facets.actions.action.associateWith;
+
+import javax.annotation.Nullable;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.layout.group.GroupIdAndName;
+
+import lombok.NonNull;
+
+public class AssociatedWithFacetFromLayoutXml extends AssociatedWithFacetAbstract {
+
+ // -- FACTORIES
+
+ public static @Nullable AssociatedWithFacetFromLayoutXml create(
+ final @Nullable GroupIdAndName groupIdAndName,
+ final @NonNull FacetHolder holder) {
+
+ return groupIdAndName!=null
+ ? new AssociatedWithFacetFromLayoutXml(groupIdAndName.getId(), holder)
+ : null;
+ }
+
+// public static @Nullable AssociatedWithFacetFromLayoutXml create(
+// final @NonNull FieldSet fieldSet,
+// final @NonNull FacetHolder holder) {
+//
+// return GroupIdAndName.forFieldSet(fieldSet)
+// .map(groupIdAndName->create(groupIdAndName, holder))
+// .orElse(null);
+// }
+
+ // -- IMPLEMENTATION
+
+ private AssociatedWithFacetFromLayoutXml(
+ final String value,
+ final FacetHolder holder) {
+ super(value, holder);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 9e16b10..4cf5dba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -40,6 +40,7 @@ import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.core.config.environment.IsisSystemEnvironment;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facets.actions.action.associateWith.AssociatedWithFacetFromLayoutXml;
import org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionXml;
import org.apache.isis.core.metamodel.facets.actions.layout.BookmarkPolicyFacetForActionXml;
import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFaFacetForActionXml;
@@ -81,6 +82,7 @@ import org.apache.isis.core.metamodel.spec.feature.MixedIn;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import static org.apache.isis.core.metamodel.facetapi.FacetUtil.addIfNotAlreadyPresent;
import static org.apache.isis.core.metamodel.facetapi.FacetUtil.addOrReplaceFacet;
import lombok.Value;
@@ -237,6 +239,7 @@ implements GridSystemService<G> {
}
addOrReplaceFacet(LayoutOrderFacetFromXml.create(memberOrderSequence, objectAction));
addOrReplaceFacet(LayoutGroupFacetFromXml.create(groupIdAndName, objectAction));
+ addIfNotAlreadyPresent(AssociatedWithFacetFromLayoutXml.create(groupIdAndName, objectAction));
// fix up the action position if required
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index bd07219..ab21017 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -341,18 +341,19 @@ public interface ObjectAction extends ObjectMember {
}
/**
- * Those to be rendered with the entity header panel.
+ * Returns a Stream of those to be rendered with the entity header panel.
*/
- public static Stream<ObjectAction> streamTopLevelActions(
+ public static Stream<ObjectAction> streamTopBarActions(
final ManagedObject adapter) {
val spec = adapter.getSpecification();
- return spec.streamRuntimeActions(MixedIn.INCLUDED)
- .filter(ObjectAction.Predicates.memberOrderNotAssociationOf(spec))
- .filter(ObjectAction.Predicates.dynamicallyVisible(adapter,
- InteractionInitiatedBy.USER, Where.ANYWHERE))
- .filter(ObjectAction.Predicates.excludeWizardActions(spec));
+ val all = spec.streamRuntimeActions(MixedIn.INCLUDED).collect(Can.toCan());
+ val a = all.filter(ObjectAction.Predicates.memberOrderNotAssociationOf(spec));
+ val b = a.filter(ObjectAction.Predicates.dynamicallyVisible(adapter,
+ InteractionInitiatedBy.USER, Where.ANYWHERE));
+ val c = b.filter(ObjectAction.Predicates.excludeWizardActions(spec));
+ return c.stream();
}
public static Stream<ObjectAction> findForAssociation(
@@ -418,12 +419,12 @@ public interface ObjectAction extends ObjectMember {
}
public static class AssociatedWith implements Predicate<ObjectAction> {
- private final String memberId;
- private final String memberName;
+ private final @NonNull String memberId;
+ private final @NonNull String memberName;
- public AssociatedWith(final ObjectAssociation objectAssociation) {
- this.memberId = objectAssociation.getId();
- this.memberName = objectAssociation.getName();
+ public AssociatedWith(final @NonNull ObjectAssociation objectAssociation) {
+ this.memberId = _Strings.nullToEmpty(objectAssociation.getId()).toLowerCase();
+ this.memberName = _Strings.nullToEmpty(objectAssociation.getName()).toLowerCase();;
}
@Override
@@ -436,13 +437,9 @@ public interface ObjectAction extends ObjectMember {
if (associatedMemberName == null) {
return false;
}
- val memberOrderNameLowerCase = associatedMemberName.toLowerCase();
- return equalWhenLowerCase(memberName, memberOrderNameLowerCase)
- || equalWhenLowerCase(memberId, memberOrderNameLowerCase);
- }
-
- private boolean equalWhenLowerCase(@Nullable String string, String lowerCaseString) {
- return string != null && Objects.equals(string.toLowerCase(), lowerCaseString);
+ val memberNameLowerCase = associatedMemberName.toLowerCase();
+ return Objects.equals(memberName, memberNameLowerCase)
+ || Objects.equals(memberId, memberNameLowerCase);
}
}
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index 400c790..05438fe 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -139,7 +139,7 @@ extends
String getName();
int getPageSize();
- // -- PARENTED STUFF
+ // -- PARENTED SPECIFICS
default Optional<EntityCollectionModelParented> parented() {
return this instanceof EntityCollectionModelParented
@@ -158,7 +158,7 @@ extends
}
/**
- * Returns optionally the a {@link ManagedCollection}, based on whether
+ * Optionally returns a {@link ManagedCollection}, based on whether
* this is a parented collection.
*/
default Optional<ManagedCollection> parentedManagedCollection() {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index c60cdd0..4c1628f 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -80,7 +80,7 @@ extends PanelAbstract<ManagedObject, EntityModel> {
final EntityModel model = getModel();
val adapter = model.getObject();
if (adapter != null) {
- val topLevelActions = ObjectAction.Util.streamTopLevelActions(adapter);
+ val topLevelActions = ObjectAction.Util.streamTopBarActions(adapter);
val entityActionLinks = LinkAndLabelUtil
.asActionLinksForAdditionalLinksPanel(model, topLevelActions, null)
.collect(Can.toCan());