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/03/05 09:43:15 UTC

[isis] branch master updated: ISIS-2553: ApplicationFeatureDefault: simplify and improve formal api

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 3611617  ISIS-2553: ApplicationFeatureDefault: simplify and improve formal api
3611617 is described below

commit 36116173046e1d2c5fd42cd1b9c9f42c3589e7dd
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 5 10:43:02 2021 +0100

    ISIS-2553: ApplicationFeatureDefault: simplify and improve formal api
---
 .../services/appfeat/ApplicationFeature.java       |  6 ++-
 .../appfeat/ApplicationFeatureDefault.java         | 47 +++++++++++++---------
 .../dom/feature/ApplicationFeatureViewModel.java   | 13 ++++--
 .../jdo/dom/permission/ApplicationPermission.java  |  2 +-
 .../jpa/dom/permission/ApplicationPermission.java  |  2 +-
 5 files changed, 43 insertions(+), 27 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
index aa787b8..4e7988b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.applib.services.appfeat;
 
+import java.util.Optional;
 import java.util.SortedSet;
 
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -34,7 +35,10 @@ public interface ApplicationFeature {
         return getFeatureId().getFullyQualifiedName();
     }
 
-    ApplicationMemberSort getMemberSort();
+    /**
+     * Optionally the member sort, based on whether this feature is a member.
+     */
+    Optional<ApplicationMemberSort> getMemberSort();
     
     SortedSet<ApplicationFeatureId> membersOfSort(ApplicationMemberSort memberSort);
     
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
index 459bdad..c3edc6d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
@@ -18,7 +18,9 @@
  */
 package org.apache.isis.core.metamodel.services.appfeat;
 
+import java.util.Collections;
 import java.util.Comparator;
+import java.util.Optional;
 import java.util.SortedSet;
 
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -26,7 +28,6 @@ import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.appfeat.ApplicationFeature;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
 import org.apache.isis.applib.util.Equality;
 import org.apache.isis.applib.util.Hashing;
@@ -35,6 +36,7 @@ import org.apache.isis.applib.util.ToString;
 import org.apache.isis.commons.internal.collections._Sets;
 
 import lombok.Getter;
+import lombok.NonNull;
 import lombok.Setter;
 
 /**
@@ -57,15 +59,18 @@ implements
     public ApplicationFeatureDefault(final ApplicationFeatureId featureId) {
         this.featureId = featureId;
     }
+    
+    // -- FIELDS
 
-    @Getter
+    @Getter(onMethod_ = {@Override})
     private final ApplicationFeatureId featureId;
 
-    /**
-     * Only for {@link ApplicationFeatureSort#MEMBER member}s.
-     */
-    @Getter @Setter
-    private ApplicationMemberSort memberSort;
+    @Getter(onMethod_ = {@Override})
+    private Optional<ApplicationMemberSort> memberSort = Optional.empty();
+    
+    void setMemberSort(final @NonNull ApplicationMemberSort memberSort) {
+        this.memberSort = Optional.of(memberSort);
+    }
 
     /**
      * Only for {@link ApplicationMemberSort#ACTION action}s.
@@ -97,66 +102,68 @@ implements
     @Getter @Setter
     private SemanticsOf actionSemantics;
 
-    // -- packages: Contents
+    // -- NAMESPACE
+    
     private final SortedSet<ApplicationFeatureId> contents = _Sets.newTreeSet();
 
     @Override
     public SortedSet<ApplicationFeatureId> getContents() {
-        _Asserts.ensureNamespace(this.getFeatureId());
         return contents;
     }
 
-    public void addToContents(final ApplicationFeatureId contentId) {
+    void addToContents(final ApplicationFeatureId contentId) {
         _Asserts.ensureNamespace(this.getFeatureId());
         _Asserts.ensureNamespaceOrType(contentId);
         this.contents.add(contentId);
     }
 
-
-    // -- classes: Properties, Collections, Actions
+    // -- PROPERTIES
+    
     private final SortedSet<ApplicationFeatureId> properties = _Sets.newTreeSet();
 
     @Override
     public SortedSet<ApplicationFeatureId> getProperties() {
-        _Asserts.ensureType(this.getFeatureId());
         return properties;
     }
 
-
+    // -- COLLECTIONS
+    
     private final SortedSet<ApplicationFeatureId> collections = _Sets.newTreeSet();
     
     @Override
     public SortedSet<ApplicationFeatureId> getCollections() {
-        _Asserts.ensureType(this.getFeatureId());
         return collections;
     }
 
-
+    // -- ACTIONS
+    
     private final SortedSet<ApplicationFeatureId> actions = _Sets.newTreeSet();
     
     @Override
     public SortedSet<ApplicationFeatureId> getActions() {
-        _Asserts.ensureType(this.getFeatureId());
         return actions;
     }
     
-    public void addToMembers(final ApplicationFeatureId memberId, final ApplicationMemberSort memberSort) {
+    void addToMembers(final ApplicationFeatureId memberId, final ApplicationMemberSort memberSort) {
         _Asserts.ensureType(this.getFeatureId());
         _Asserts.ensureMember(memberId);
 
         membersOfSort(memberSort).add(memberId);
     }
     
+    // -- MEMBERS OF SORT
+    
     @Override
     public SortedSet<ApplicationFeatureId> membersOfSort(final ApplicationMemberSort memberSort) {
-        _Asserts.ensureType(this.getFeatureId());
         switch (memberSort) {
         case PROPERTY:
             return properties;
         case COLLECTION:
             return collections;
-        default: // case ACTION:
+        case ACTION:
             return actions;
+        default:
+            return Collections.emptySortedSet();
         }
     }
 
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
index 9a14f6d..52d0110 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
@@ -19,6 +19,7 @@
 package org.apache.isis.extensions.secman.model.dom.feature;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.SortedSet;
 import java.util.function.Function;
 
@@ -86,10 +87,14 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
         case TYPE:
             return ApplicationType.class;
         case MEMBER:
-            final ApplicationFeature feature = applicationFeatureRepository.findFeature(featureId);
-
-            if(feature != null) {
-                switch(feature.getMemberSort()) {
+            
+            val memberSort = 
+            Optional.ofNullable(applicationFeatureRepository.findFeature(featureId))
+                .flatMap(ApplicationFeature::getMemberSort)
+                .orElse(null);
+
+            if(memberSort != null) {
+                switch(memberSort) {
                 case PROPERTY:
                     return ApplicationTypeProperty.class;
                 case COLLECTION:
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
index 285b02e..32e7a50 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
@@ -192,7 +192,7 @@ public class ApplicationPermission implements org.apache.isis.extensions.secman.
     @Programmatic
     private Optional<ApplicationMemberSort> getMemberSort() {
         return getFeature()
-                .map(ApplicationFeature::getMemberSort);
+                .flatMap(ApplicationFeature::getMemberSort);
     }
 
 
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
index 15ecf28..724cc52 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
@@ -207,7 +207,7 @@ implements
     @Programmatic
     private Optional<ApplicationMemberSort> getMemberSort() {
         return getFeature()
-                .map(ApplicationFeature::getMemberSort);
+                .flatMap(ApplicationFeature::getMemberSort);
     }