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/04/09 08:19:18 UTC
[isis] branch master updated: ISIS-2602: layout groups: polishing
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 8767529 ISIS-2602: layout groups: polishing
8767529 is described below
commit 8767529034175313f2ecd2a6e2fc97758986035c
Author: ahuber@apache.org <ah...@luna>
AuthorDate: Fri Apr 9 10:19:04 2021 +0200
ISIS-2602: layout groups: polishing
---
.../isis/applib/annotation/ActionLayout.java | 10 ++++-
.../action/ActionAnnotationFacetFactory.java | 2 +
.../members/layout/group/GroupIdAndName.java | 11 +++++-
.../members/layout/group/LayoutGroupFacet.java | 20 +++++++---
.../LayoutGroupFacetFromActionAnnotation.java | 43 ++++++++++++++++++++++
.../services/grid/GridSystemServiceAbstract.java | 17 ++++-----
6 files changed, 83 insertions(+), 20 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
index b246ecc..a3643f2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
@@ -111,11 +111,14 @@ public @interface ActionLayout {
default "";
/**
- * Specifies the <b>id</b> of associated <i>FieldSet</i>.
+ * Specifies the <b>id</b> of associated <i>FieldSet</i>.
* <p>
* For a more in depth description see the analogous {@link PropertyLayout#fieldSetId()}.
* </p>
*
+ * To associate an <i>Action</i> with a <i>Collection</i>, use {@link Action#associateWith()}
+ * instead.
+ *
* @apiNote An <i>Action</i> can be associated with with a <i>Property</i> or <i>Collection</i>
* its so called <i>peer</i>.
* It will then be positioned close to its <i>peer</i>, either under it or on the header panel
@@ -133,11 +136,14 @@ public @interface ActionLayout {
default "__infer";
/**
- * Specifies the <b>friendly-name</b> of associated <i>FieldSet</i>.
+ * Specifies the <b>friendly-name</b> of associated <i>FieldSet</i> or <i>Collection</i>.
* <p>
* For a more in depth description see the analogous {@link PropertyLayout#fieldSetId()};
* </p>
*
+ * To associate an <i>Action</i> with a <i>Collection</i>, use {@link Action#associateWith()}
+ * instead.
+ *
* @see Action#associateWith()
* @see ActionLayout#fieldSetId()
* @see PropertyLayout#fieldSetId()
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index 9f9b072..5b5dbba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -42,6 +42,7 @@ import org.apache.isis.core.metamodel.facets.actions.action.prototype.PrototypeF
import org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation;
import org.apache.isis.core.metamodel.facets.actions.action.typeof.TypeOfFacetForActionAnnotation;
import org.apache.isis.core.metamodel.facets.actions.fileaccept.FileAcceptFacetForActionAnnotation;
+import org.apache.isis.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromActionAnnotation;
import org.apache.isis.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation;
import org.apache.isis.core.metamodel.facets.members.publish.execution.ExecutionPublishingActionFacetForActionAnnotation;
import org.apache.isis.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation;
@@ -270,6 +271,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract {
val associateWith = action.associateWith();
if(_Strings.isNotEmpty(associateWith)) {
super.addFacet(new AssociatedWithFacetForActionAnnotation(associateWith, facetedMethod));
+ super.addFacet(LayoutGroupFacetFromActionAnnotation.create(actionIfAny, facetedMethod));
}
});
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/GroupIdAndName.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/GroupIdAndName.java
index 25f5bf3..6025d2c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/GroupIdAndName.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/GroupIdAndName.java
@@ -23,6 +23,7 @@ import java.util.Optional;
import javax.annotation.Nullable;
+import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.PropertyLayout;
import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -43,12 +44,12 @@ implements
private static final long serialVersionUID = 1L;
/**
- * Id of a layout group.
+ * Id of a layout group (a <i>FieldSet</i> or a <i>Collection</i>).
*/
private final @NonNull String id;
/**
- * (Friendly) name of a layout group.
+ * (Friendly) name of a layout group (a <i>FieldSet</i> or a <i>Collection</i>).
*/
private final @NonNull String name;
@@ -62,6 +63,12 @@ implements
// -- FACTORIES FOR ANNOTATIONS
+ public static Optional<GroupIdAndName> forAction(
+ final @NonNull Action action) {
+ return GroupIdAndName.inferIfOneMissing(
+ action.associateWith(), null);
+ }
+
public static Optional<GroupIdAndName> forActionLayout(
final @NonNull ActionLayout actionLayout) {
return GroupIdAndName.inferIfOneMissing(
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacet.java
index 6d6cde2..3c3900b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacet.java
@@ -19,22 +19,30 @@
package org.apache.isis.core.metamodel.facets.members.layout.group;
import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.PropertyLayout;
import org.apache.isis.core.metamodel.facetapi.Facet;
/**
- * In the framework's default programming model corresponds to annotations
- * {@link Action#associateWith()} and {@link PropertyLayout#fieldSetId()}.
- * <br>
- * Collections don't support grouping.
+ * With the framework's default programming model corresponds to annotations
+ * {@link ActionLayout#fieldSetId()} and {@link PropertyLayout#fieldSetId()},
+ * with friendly names
+ * {@link ActionLayout#fieldSetName()} and {@link PropertyLayout#fieldSetName()}.
* <p>
- * An alternative is to use the <code>Xxx.layout.xml</code> file,
- * where <code>Xxx</code> is the domain object name.
+ * Collections don't support grouping, but can be associated using
+ * {@link ActionLayout#associateWith()}.
+ * </p><p>
+ * An alternative is to use the <code>Xxx.layout.xml</code> file,
+ * where <code>Xxx</code> is the domain object name.
+ * </p><p>
+ * For a more in depth description see {@link PropertyLayout#fieldSetId()}.
* </p>
*
* @see Action#associateWith()
* @see ActionLayout#fieldSetId()
+ * @see ActionLayout#fieldSetName()
* @see PropertyLayout#fieldSetId()
+ * @see PropertyLayout#fieldSetName()
*
* @since 2.0
*/
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetFromActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetFromActionAnnotation.java
new file mode 100644
index 0000000..26340e8
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/layout/group/LayoutGroupFacetFromActionAnnotation.java
@@ -0,0 +1,43 @@
+/*
+ * 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.members.layout.group;
+
+import java.util.Optional;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class LayoutGroupFacetFromActionAnnotation
+extends LayoutGroupFacetAbstract {
+
+ public static LayoutGroupFacetFromActionAnnotation create(
+ final Optional<Action> actionIfAny,
+ final FacetHolder holder) {
+
+ return actionIfAny
+ .flatMap(GroupIdAndName::forAction)
+ .map(groupIdAndName->new LayoutGroupFacetFromActionAnnotation(groupIdAndName, holder))
+ .orElse(null);
+ }
+
+ private LayoutGroupFacetFromActionAnnotation(GroupIdAndName groupIdAndName, FacetHolder holder) {
+ super(groupIdAndName, 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 1581f60..5373b53 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
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.services.grid;
import static org.apache.isis.core.metamodel.facetapi.FacetUtil.addOrReplaceFacet;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;
@@ -215,12 +214,10 @@ implements GridSystemService<G> {
GroupIdAndName groupIdAndName = null;
int memberOrderSequence;
if(actionLayoutDataOwner instanceof FieldSet) {
- final FieldSet fieldSet = (FieldSet) actionLayoutDataOwner;
- final List<PropertyLayoutData> properties = fieldSet.getProperties();
- for (PropertyLayoutData propertyLayoutData : properties) {
- final String propertyId = propertyLayoutData.getId();
+ val fieldSet = (FieldSet) actionLayoutDataOwner;
+ for (val propertyLayoutData : fieldSet.getProperties()) {
// any will do; choose the first one that we know is valid
- if(oneToOneAssociationById.containsKey(propertyId)) {
+ if(oneToOneAssociationById.containsKey(propertyLayoutData.getId())) {
groupIdAndName = GroupIdAndName.forPropertyLayoutData(propertyLayoutData)
.orElse(null);
break;
@@ -228,13 +225,13 @@ implements GridSystemService<G> {
}
memberOrderSequence = actionPropertyGroupSequence++;
} else if(actionLayoutDataOwner instanceof PropertyLayoutData) {
- final PropertyLayoutData propertyLayoutData = (PropertyLayoutData) actionLayoutDataOwner;
- groupIdAndName = GroupIdAndName.forPropertyLayoutData(propertyLayoutData)
+ groupIdAndName = GroupIdAndName
+ .forPropertyLayoutData((PropertyLayoutData) actionLayoutDataOwner)
.orElse(null);
memberOrderSequence = actionPropertySequence++;
} else if(actionLayoutDataOwner instanceof CollectionLayoutData) {
- final CollectionLayoutData collectionLayoutData = (CollectionLayoutData) actionLayoutDataOwner;
- groupIdAndName = GroupIdAndName.forCollectionLayoutData(collectionLayoutData)
+ groupIdAndName = GroupIdAndName
+ .forCollectionLayoutData((CollectionLayoutData) actionLayoutDataOwner)
.orElse(null);
memberOrderSequence = actionCollectionSequence++;
} else {