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/04 17:40:09 UTC

[isis] branch master updated: ISIS-2641: SecMan: housekeeping ApplicationFeatureViewModel helpers

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 ed0416b  ISIS-2641: SecMan: housekeeping ApplicationFeatureViewModel helpers
ed0416b is described below

commit ed0416b99c23eac1fc43ff797ea1e1fb0c4efc12
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue May 4 19:39:52 2021 +0200

    ISIS-2641: SecMan: housekeeping ApplicationFeatureViewModel helpers
---
 .../dom/feature/ApplicationFeatureViewModel.java   | 57 +++++++++-------------
 .../dom/feature/ApplicationFeatureViewModels.java  | 13 +++--
 .../model/dom/feature/ApplicationNamespace.java    |  2 +-
 .../secman/model/dom/feature/ApplicationType.java  |  6 +--
 4 files changed, 34 insertions(+), 44 deletions(-)

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 dbcd3be..39e8e77 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
@@ -20,7 +20,6 @@ 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;
 
 import javax.inject.Inject;
@@ -48,6 +47,7 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
 
+import lombok.NonNull;
 import lombok.val;
 
 /**
@@ -280,11 +280,10 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
      */
     @Programmatic
     public ApplicationFeatureViewModel getParentNamespace() {
-        return Functions.asViewModelForId(featureRepository, factory)
-                .apply(getFeatureId().getParentNamespaceFeatureId());
+        return ApplicationFeatureViewModel
+        .newViewModel(getFeatureId().getParentNamespaceFeatureId(), featureRepository, factory);
     }
 
-
     // -- equals, hashCode, toString
 
 
@@ -313,39 +312,31 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
         return toString.toString(this);
     }
 
+    // -- FACTORY
+    
+    public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeatureId, T> factory(
+            final @NonNull ApplicationFeatureRepository featureRepository, 
+            final @NonNull FactoryService factory,
+            final @NonNull Class<T> viewmodelType) {
 
-    // -- helpers
-    <T extends ApplicationFeatureViewModel> List<T> asViewModels(final SortedSet<ApplicationFeatureId> members) {
-        val viewModelForId = Functions.<T>asViewModelForId(featureRepository, factory);
-        return _Lists.map(members, viewModelForId);
+        return featureId -> _Casts.<T>uncheckedCast(ApplicationFeatureViewModel
+                .newViewModel(featureId, featureRepository, factory));
     }
 
-
-    // -- Functions
-
-    public static final class Functions {
-        private Functions(){}
-
-        public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeatureId, T> asViewModelForId(
-                final ApplicationFeatureRepository applicationFeatureRepository,
-                final FactoryService factoryService) {
-
-            return (ApplicationFeatureId input) ->
-            _Casts.uncheckedCast(ApplicationFeatureViewModel
-                    .newViewModel(input, applicationFeatureRepository, factoryService));
-
-        }
-        public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeature, T> asViewModel(
-                final ApplicationFeatureRepository applicationFeatureRepository,
-                final FactoryService factoryService) {
-
-            return (ApplicationFeature input) ->
-            _Casts.uncheckedCast(ApplicationFeatureViewModel
-                    .newViewModel(input.getFeatureId(), applicationFeatureRepository, factoryService));
-        }
+    // -- HELPER
+    
+    protected <T extends ApplicationFeatureViewModel> List<T> asViewModels(
+            final java.util.Collection<ApplicationFeatureId> featureIds, 
+            final Class<T> viewmodelType) {
+        return featureIds.stream()
+                .map(factory(featureRepository, factory, viewmodelType))
+                .collect(_Lists.toUnmodifiable());
     }
 
-
-
+    protected <T extends ApplicationFeatureViewModel> T asViewModel(
+            final ApplicationFeatureId featureId,
+            final Class<T> viewmodelType) {
+        return factory(featureRepository, factory, viewmodelType).apply(featureId);
+    }
 
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModels.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModels.java
index dcaab67..a0b87cb 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModels.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModels.java
@@ -141,13 +141,12 @@ public class ApplicationFeatureViewModels  {
 
     private <T extends ApplicationFeatureViewModel> List<T> asViewModels(
             final Collection<ApplicationFeature> features, 
-            final Class<T> cls) {
-
-        return _Lists.map(
-                features,
-                ApplicationFeatureViewModel.Functions
-                .<T>asViewModel(featureRepository, factory)
-                );
+            final Class<T> viewmodelType) {
+        
+        return features.stream()
+                .map(ApplicationFeature::getFeatureId)
+                .map(ApplicationFeatureViewModel.factory(featureRepository, factory, viewmodelType))
+                .collect(_Lists.toUnmodifiable());
     }
 
     // -- DEPENDENCIES
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationNamespace.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationNamespace.java
index 4b8a6d7..cc43495 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationNamespace.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationNamespace.java
@@ -62,7 +62,7 @@ public class ApplicationNamespace extends ApplicationFeatureViewModel {
             sequence = "4")
     public List<ApplicationFeatureViewModel> getContents() {
         final SortedSet<ApplicationFeatureId> contents = getFeature().getContents();
-        return asViewModels(contents);
+        return asViewModels(contents, ApplicationFeatureViewModel.class);
     }
     public boolean hideContents() {
         return getSort() != ApplicationFeatureSort.NAMESPACE;
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationType.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationType.java
index 8290601..6796dcb 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationType.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationType.java
@@ -73,7 +73,7 @@ public class ApplicationType extends ApplicationFeatureViewModel {
             sequence = "20.1")
     public List<ApplicationTypeAction> getActions() {
         final SortedSet<ApplicationFeatureId> members = getFeature().getActions();
-        return asViewModels(members);
+        return asViewModels(members, ApplicationTypeAction.class);
     }
 
 
@@ -91,7 +91,7 @@ public class ApplicationType extends ApplicationFeatureViewModel {
             sequence = "20.2")
     public List<ApplicationTypeProperty> getProperties() {
         final SortedSet<ApplicationFeatureId> members = getFeature().getProperties();
-        return asViewModels(members);
+        return asViewModels(members, ApplicationTypeProperty.class);
     }
 
 
@@ -107,7 +107,7 @@ public class ApplicationType extends ApplicationFeatureViewModel {
             sequence = "20.3")
     public List<ApplicationTypeCollection> getCollections() {
         final SortedSet<ApplicationFeatureId> members = getFeature().getCollections();
-        return asViewModels(members);
+        return asViewModels(members, ApplicationTypeCollection.class);
     }