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 11:33:59 UTC

[isis] branch master updated: ISIS-2553: don't inject concrete ApplicationFeatureRepositoryDefault

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 f8f5733  ISIS-2553: don't inject concrete ApplicationFeatureRepositoryDefault
f8f5733 is described below

commit f8f5733d86bd9386d8101aa2b58a0875e87da1ee
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 5 12:33:45 2021 +0100

    ISIS-2553: don't inject concrete ApplicationFeatureRepositoryDefault
    
    use interface instead
---
 .../appfeat/ApplicationFeatureRepository.java      | 15 +++++++++++++++
 .../services/appfeat/ApplicationMemberSort.java    |  4 +---
 .../ApplicationFeatureRepositoryDefault.java       | 21 +++++++++++----------
 .../metamodel/services/appfeat/_Predicates.java    |  3 ++-
 .../dom/feature/ApplicationFeatureViewModel.java   | 22 +++++++++++-----------
 .../dom/feature/ApplicationFeatureViewModels.java  | 16 ++++++++--------
 ...OrphanedPermissionManager_relocateSelected.java | 10 +++++-----
 .../permission/ApplicationPermission_feature.java  |  8 ++++----
 .../user/ApplicationUser_filterPermissions.java    | 10 +++++-----
 .../dom/user/ApplicationUser_permissions.java      |  4 ++--
 .../model/dom/user/UserPermissionViewModel.java    |  6 +++---
 .../jdo/dom/permission/ApplicationPermission.java  |  6 +++---
 .../ApplicationPermissionRepository.java           |  4 ++--
 .../jpa/dom/permission/ApplicationPermission.java  |  6 +++---
 .../ApplicationPermissionRepository.java           | 16 ++++++++--------
 15 files changed, 83 insertions(+), 68 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureRepository.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureRepository.java
index 73e171e..01293e9 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureRepository.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureRepository.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.applib.services.appfeat;
 
+import java.util.Collection;
 import java.util.Map;
 import java.util.SortedSet;
 
@@ -54,4 +55,18 @@ public interface ApplicationFeatureRepository  {
     
     Map<String, ApplicationFeatureId> getFeatureIdentifiersByName();
 
+    ApplicationFeature findFeature(ApplicationFeatureId featureId);
+
+    Collection<ApplicationFeature> allActions();
+
+    Collection<ApplicationFeature> allCollections();
+
+    Collection<ApplicationFeature> allProperties();
+
+    Collection<ApplicationFeature> allNamespaces();
+
+    Collection<ApplicationFeature> allTypes();
+    
+    Collection<ApplicationFeature> allMembers();
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationMemberSort.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationMemberSort.java
index 5498c0e..3270c1a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationMemberSort.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationMemberSort.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.applib.services.appfeat;
 
-import org.apache.isis.commons.internal.base._Strings;
-
 /**
  * 
  * @since 1.x renamed in 2.0 {@index}
@@ -31,7 +29,7 @@ public enum ApplicationMemberSort {
 
     @Override
     public String toString() {
-        return _Strings.capitalize(name());
+        return name();
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index 9e0ea72..6311636 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -373,6 +373,7 @@ implements ApplicationFeatureRepository {
 
     // -- packageFeatures, classFeatures, memberFeatures
 
+    @Override
     public ApplicationFeature findFeature(final ApplicationFeatureId featureId) {
         initializeIfRequired();
         switch (featureId.getSort()) {
@@ -415,46 +416,46 @@ implements ApplicationFeatureRepository {
         }
         switch (featureType) {
         case NAMESPACE:
-            return allPackages();
+            return allNamespaces();
         case TYPE:
-            return allClasses();
+            return allTypes();
         case MEMBER:
             return allMembers();
         }
         throw new IllegalArgumentException("Unknown feature type " + featureType);
     }
 
-
-    public Collection<ApplicationFeature> allPackages() {
+    @Override
+    public Collection<ApplicationFeature> allNamespaces() {
         initializeIfRequired();
         return packageFeatures.values();
     }
 
-
-    public Collection<ApplicationFeature> allClasses() {
+    @Override
+    public Collection<ApplicationFeature> allTypes() {
         initializeIfRequired();
         return classFeatures.values();
     }
 
-
+    @Override
     public Collection<ApplicationFeature> allMembers() {
         initializeIfRequired();
         return memberFeatures.values();
     }
 
-
+    @Override
     public Collection<ApplicationFeature> allProperties() {
         initializeIfRequired();
         return propertyFeatures.values();
     }
 
-
+    @Override
     public Collection<ApplicationFeature> allCollections() {
         initializeIfRequired();
         return collectionFeatures.values();
     }
 
-
+    @Override
     public Collection<ApplicationFeature> allActions() {
         initializeIfRequired();
         return actionFeatures.values();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/_Predicates.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/_Predicates.java
index 76eaa9c..674085e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/_Predicates.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/_Predicates.java
@@ -23,6 +23,7 @@ import java.util.function.Predicate;
 
 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;
 
@@ -30,7 +31,7 @@ final class _Predicates {
 
     public static Predicate<ApplicationFeatureId> isLogicalTypeContaining(
             final ApplicationMemberSort memberSort, 
-            final ApplicationFeatureRepositoryDefault applicationFeatures) {
+            final ApplicationFeatureRepository applicationFeatures) {
         
         return (final ApplicationFeatureId featureId) -> {
                 if(featureId.getSort() != ApplicationFeatureSort.TYPE) {
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 52d0110..4f463ec 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
@@ -36,6 +36,7 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
 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.factory.FactoryService;
 import org.apache.isis.applib.util.Equality;
@@ -44,7 +45,6 @@ import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ToString;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 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;
@@ -66,13 +66,13 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
     public static abstract class ActionDomainEvent<S extends ApplicationFeatureViewModel> extends IsisModuleExtSecmanApi.ActionDomainEvent<S> {}
 
     @Inject private FactoryService factory;
-    @Inject private ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject private ApplicationFeatureRepository featureRepository;
     @Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
 
     // -- constructors
     public static ApplicationFeatureViewModel newViewModel(
             final ApplicationFeatureId featureId,
-            final ApplicationFeatureRepositoryDefault applicationFeatureRepository,
+            final ApplicationFeatureRepository applicationFeatureRepository,
             final FactoryService factoryService) {
         final Class<? extends ApplicationFeatureViewModel> cls = viewModelClassFor(featureId, applicationFeatureRepository);
         return factoryService.viewModel(cls, featureId.asEncodedString());
@@ -80,7 +80,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
 
     private static Class<? extends ApplicationFeatureViewModel> viewModelClassFor(
             final ApplicationFeatureId featureId,
-            final ApplicationFeatureRepositoryDefault applicationFeatureRepository) {
+            final ApplicationFeatureRepository applicationFeatureRepository) {
         switch (featureId.getSort()) {
         case NAMESPACE:
             return ApplicationNamespace.class;
@@ -158,7 +158,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
     // -- feature (property, programmatic)
     @Programmatic
     ApplicationFeature getFeature() {
-        return applicationFeatureRepository.findFeature(getFeatureId());
+        return featureRepository.findFeature(getFeatureId());
     }
 
 
@@ -247,12 +247,12 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
         if(parentId == null) {
             return null;
         }
-        final ApplicationFeature feature = applicationFeatureRepository.findFeature(parentId);
+        final ApplicationFeature feature = featureRepository.findFeature(parentId);
         if (feature == null) {
             return null;
         }
         final Class<? extends ApplicationFeatureViewModel> cls = 
-                viewModelClassFor(parentId, applicationFeatureRepository);
+                viewModelClassFor(parentId, featureRepository);
         return factory.viewModel(cls, parentId.asEncodedString());
     }
 
@@ -279,7 +279,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
      */
     @Programmatic
     public ApplicationFeatureViewModel getParentNamespace() {
-        return Functions.asViewModelForId(applicationFeatureRepository, factory)
+        return Functions.asViewModelForId(featureRepository, factory)
                 .apply(getFeatureId().getParentNamespaceFeatureId());
     }
 
@@ -315,7 +315,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
 
     // -- helpers
     <T extends ApplicationFeatureViewModel> List<T> asViewModels(final SortedSet<ApplicationFeatureId> members) {
-        val viewModelForId = Functions.<T>asViewModelForId(applicationFeatureRepository, factory);
+        val viewModelForId = Functions.<T>asViewModelForId(featureRepository, factory);
         return _Lists.map(members, viewModelForId);
     }
 
@@ -326,7 +326,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
         private Functions(){}
 
         public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeatureId, T> asViewModelForId(
-                final ApplicationFeatureRepositoryDefault applicationFeatureRepository, 
+                final ApplicationFeatureRepository applicationFeatureRepository, 
                 final FactoryService factoryService) {
 
             return (ApplicationFeatureId input) -> 
@@ -335,7 +335,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
 
         }
         public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeature, T> asViewModel(
-                final ApplicationFeatureRepositoryDefault applicationFeatureRepository, 
+                final ApplicationFeatureRepository applicationFeatureRepository, 
                 final FactoryService factoryService) {
 
             return (ApplicationFeature input) ->
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 154f06d..bf7db8f 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
@@ -32,10 +32,10 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.appfeat.ApplicationFeature;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 @DomainService(
@@ -77,7 +77,7 @@ public class ApplicationFeatureViewModels  {
             )
     @MemberOrder(sequence = "100.40.1")
     public List<ApplicationNamespace> allNamespaces() {
-        return asViewModels(applicationFeatureRepository.allPackages(), ApplicationNamespace.class);
+        return asViewModels(featureRepository.allNamespaces(), ApplicationNamespace.class);
     }
 
     // -- ALL CLASSES
@@ -94,7 +94,7 @@ public class ApplicationFeatureViewModels  {
             )
     @MemberOrder(sequence = "100.40.2")
     public List<ApplicationType> allTypes() {
-        return asViewModels(applicationFeatureRepository.allClasses(), ApplicationType.class);
+        return asViewModels(featureRepository.allTypes(), ApplicationType.class);
     }
 
     // -- ALL ACTIONS
@@ -111,7 +111,7 @@ public class ApplicationFeatureViewModels  {
             )
     @MemberOrder(sequence = "100.40.3")
     public List<ApplicationTypeAction> allActions() {
-        return asViewModels(applicationFeatureRepository.allActions(), ApplicationTypeAction.class);
+        return asViewModels(featureRepository.allActions(), ApplicationTypeAction.class);
     }
 
     // -- ALL PROPERTIES
@@ -128,7 +128,7 @@ public class ApplicationFeatureViewModels  {
             )
     @MemberOrder(sequence = "100.40.4")
     public List<ApplicationTypeProperty> allProperties() {
-        return asViewModels(applicationFeatureRepository.allProperties(), ApplicationTypeProperty.class);
+        return asViewModels(featureRepository.allProperties(), ApplicationTypeProperty.class);
     }
 
     // -- ALL COLLECTIONS
@@ -145,7 +145,7 @@ public class ApplicationFeatureViewModels  {
             )
     @MemberOrder(sequence = "100.40.5")
     public List<ApplicationTypeCollection> allCollections() {
-        return asViewModels(applicationFeatureRepository.allCollections(), ApplicationTypeCollection.class);
+        return asViewModels(featureRepository.allCollections(), ApplicationTypeCollection.class);
     }
 
     // -- HELPERS
@@ -157,13 +157,13 @@ public class ApplicationFeatureViewModels  {
         return _Lists.map(
                 features,
                 ApplicationFeatureViewModel.Functions
-                .<T>asViewModel(applicationFeatureRepository, factory)
+                .<T>asViewModel(featureRepository, factory)
                 );
     }
 
     // -- DEPENDENCIES
 
-    @Inject ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject ApplicationFeatureRepository featureRepository;
     @Inject RepositoryService repository;
     @Inject FactoryService factory;
 
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager_relocateSelected.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager_relocateSelected.java
index f0e769f..e45289c 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager_relocateSelected.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager_relocateSelected.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermission.RelocateNamespaceDomainEvent;
 
@@ -43,9 +43,9 @@ import lombok.val;
 @RequiredArgsConstructor
 public class ApplicationOrphanedPermissionManager_relocateSelected {
 
-    @Inject private ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject private ApplicationFeatureRepository featureRepository;
     
-    private final ApplicationOrphanedPermissionManager holder;
+    private final ApplicationOrphanedPermissionManager target;
     
     public ApplicationOrphanedPermissionManager act(
             final Collection<ApplicationPermission> permissions,
@@ -54,11 +54,11 @@ public class ApplicationOrphanedPermissionManager_relocateSelected {
             final String targetNamespace) {
         
         permissions.forEach(perm->relocate(perm, targetNamespace));
-        return holder;
+        return target;
     }
 
     public Collection<String> choices1Act() {
-        return applicationFeatureRepository.namespaceNames();
+        return featureRepository.namespaceNames();
     }
     
     private void relocate(
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationPermission_feature.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationPermission_feature.java
index 89d207a..70e3a968 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationPermission_feature.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationPermission_feature.java
@@ -25,9 +25,9 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
 import org.apache.isis.extensions.secman.model.dom.feature.ApplicationFeatureViewModel;
@@ -46,7 +46,7 @@ public class ApplicationPermission_feature {
     public static class PropertyDomainEvent 
     extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationPermission_feature, ApplicationFeatureViewModel> {}
 
-    final ApplicationPermission holder;
+    final ApplicationPermission target;
 
     @MemberOrder(name="Feature", sequence = "4")
     public ApplicationFeatureViewModel prop(final ApplicationPermission permission) {
@@ -54,7 +54,7 @@ public class ApplicationPermission_feature {
             return null;
         }
         final ApplicationFeatureId featureId = getFeatureId(permission);
-        return ApplicationFeatureViewModel.newViewModel(featureId, applicationFeatureRepository, factory);
+        return ApplicationFeatureViewModel.newViewModel(featureId, featureRepository, factory);
     }
 
     private static ApplicationFeatureId getFeatureId(final ApplicationPermission permission) {
@@ -63,6 +63,6 @@ public class ApplicationPermission_feature {
 
     @Inject RepositoryService repository;
     @Inject FactoryService factory;
-    @Inject ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject ApplicationFeatureRepository featureRepository;
 
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_filterPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_filterPermissions.java
index 4908870..1f3e7e0 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_filterPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_filterPermissions.java
@@ -33,9 +33,9 @@ import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 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.factory.FactoryService;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 import org.apache.isis.extensions.secman.api.user.ApplicationUser;
 import org.apache.isis.extensions.secman.model.dom.feature.ApplicationFeatureConstants;
 
@@ -51,7 +51,7 @@ import lombok.val;
 public class ApplicationUser_filterPermissions {
 
     @Inject private FactoryService factory;
-    @Inject private ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject private ApplicationFeatureRepository featureRepository;
 
     private final ApplicationUser target;
 
@@ -65,7 +65,7 @@ public class ApplicationUser_filterPermissions {
             @ParameterLayout(named="Type", typicalLength=ApplicationFeatureConstants.TYPICAL_LENGTH_TYPE_SIMPLE_NAME)
             final String logicalTypeSimpleName) {
         
-        val allMembers = applicationFeatureRepository.allMembers();
+        val allMembers = featureRepository.allMembers();
         val filtered = _Lists.filter(allMembers, within(namespace, logicalTypeSimpleName));
         return asViewModels(filtered);
     }
@@ -75,7 +75,7 @@ public class ApplicationUser_filterPermissions {
      */
     @Model
     public Collection<String> choices0Act() {
-        return applicationFeatureRepository.namespaceNames();
+        return featureRepository.namespaceNames();
     }
 
 
@@ -84,7 +84,7 @@ public class ApplicationUser_filterPermissions {
      */
     @Model
     public Collection<String> choices1Act(final String namespace) {
-        return applicationFeatureRepository.classNamesRecursivelyContainedIn(namespace);
+        return featureRepository.classNamesRecursivelyContainedIn(namespace);
     }
 
 
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_permissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_permissions.java
index 0e0e238..1534b6f 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_permissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_permissions.java
@@ -27,9 +27,9 @@ import javax.inject.Inject;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeature;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 import org.apache.isis.extensions.secman.api.user.ApplicationUser;
 
@@ -49,7 +49,7 @@ public class ApplicationUser_permissions {
     extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationUser_permissions, UserPermissionViewModel> {}
     
     @Inject private FactoryService factory;
-    @Inject private ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject private ApplicationFeatureRepository applicationFeatureRepository;
 
     private final ApplicationUser target;
 
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/UserPermissionViewModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/UserPermissionViewModel.java
index 537813d..614a449 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/UserPermissionViewModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/UserPermissionViewModel.java
@@ -39,13 +39,13 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
 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.factory.FactoryService;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ToString;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 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.ApplicationPermissionMode;
@@ -81,7 +81,7 @@ public class UserPermissionViewModel implements ViewModel {
     
     @Inject private ApplicationUserRepository<? extends ApplicationUser> applicationUserRepository;
     @Inject private FactoryService factory;
-    @Inject private ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject private ApplicationFeatureRepository featureRepository;
     @Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
 
     // -- constructors, factory methods
@@ -298,7 +298,7 @@ public class UserPermissionViewModel implements ViewModel {
         if(getFeatureId() == null) {
             return null;
         }
-        return ApplicationFeatureViewModel.newViewModel(getFeatureId(), applicationFeatureRepository, factory);
+        return ApplicationFeatureViewModel.newViewModel(getFeatureId(), featureRepository, factory);
     }
 
 
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 32e7a50..a04b71a 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
@@ -39,13 +39,13 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
 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.ObjectContracts;
 import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValue;
@@ -166,7 +166,7 @@ public class ApplicationPermission implements org.apache.isis.extensions.secman.
 
     private Optional<ApplicationFeature> getFeature() {
         return createFeatureId()
-                .map(featureId -> applicationFeatureRepository.findFeature(featureId));
+                .map(featureId -> featureRepository.findFeature(featureId));
     }
 
     // region > type (derived, memberSort of associated feature)
@@ -298,6 +298,6 @@ public class ApplicationPermission implements org.apache.isis.extensions.secman.
 
     }
 
-    @Inject private ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject private ApplicationFeatureRepository featureRepository;
 
 }
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissionRepository.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissionRepository.java
index 8660445..d22e4bc 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissionRepository.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissionRepository.java
@@ -32,6 +32,7 @@ import org.springframework.stereotype.Repository;
 import org.apache.isis.applib.query.Query;
 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.services.factory.FactoryService;
@@ -45,7 +46,6 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Multimaps;
 import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
 import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValue;
@@ -61,7 +61,7 @@ public class ApplicationPermissionRepository
 implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository<ApplicationPermission> {
 
     @Inject private RepositoryService repository;
-    @Inject private ApplicationFeatureRepositoryDefault featureRepository;
+    @Inject private ApplicationFeatureRepository featureRepository;
     @Inject private FactoryService factory;
     @Inject private MessageService messages;
     
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 724cc52..8b0f1e6 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
@@ -47,13 +47,13 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
 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.ObjectContracts;
 import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValue;
@@ -123,7 +123,7 @@ implements
 
     private static final int TYPICAL_LENGTH_TYPE = 7;  // ApplicationFeatureType.PACKAGE is longest
     
-    @Inject private transient ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject private transient ApplicationFeatureRepository featureRepository;
     
     @Id
     @GeneratedValue
@@ -181,7 +181,7 @@ implements
 
     private Optional<ApplicationFeature> getFeature() {
         return createFeatureId()
-                .map(featureId -> applicationFeatureRepository.findFeature(featureId));
+                .map(featureId -> featureRepository.findFeature(featureId));
     }
 
     // region > type (derived, memberSort of associated feature)
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermissionRepository.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermissionRepository.java
index 6af3c65..f776a3b 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermissionRepository.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermissionRepository.java
@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.query.Query;
 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.services.factory.FactoryService;
@@ -46,7 +47,6 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Multimaps;
 import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
 import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValue;
@@ -64,7 +64,7 @@ public class ApplicationPermissionRepository
 implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository<ApplicationPermission> {
 
     @Inject private RepositoryService repository;
-    @Inject private ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+    @Inject private ApplicationFeatureRepository featureRepository;
     @Inject private FactoryService factory;
     @Inject private MessageService messages;
     
@@ -249,7 +249,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
         val role = _Casts.<ApplicationRole>uncheckedCast(genericRole);
 
         final ApplicationFeatureId featureId = ApplicationFeatureId.newFeature(featureSort, featureFqn);
-        final ApplicationFeature feature = applicationFeatureRepository.findFeature(featureId);
+        final ApplicationFeature feature = featureRepository.findFeature(featureId);
         if(feature == null) {
             messages.warnUser("No such " + featureSort.name().toLowerCase() + ": " + featureFqn);
             return null;
@@ -304,7 +304,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
         val featureSort = featureId.getSort();
         val featureFqn = featureId.getFullyQualifiedName();
 
-        val feature = applicationFeatureRepository.findFeature(featureId);
+        val feature = featureRepository.findFeature(featureId);
         if(feature == null) {
             messages.warnUser("No such " + featureSort.name().toLowerCase() + ": " + featureFqn);
             return null;
@@ -335,9 +335,9 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     @Override
     public Collection<ApplicationPermission> findOrphaned() {
 
-        applicationFeatureRepository.getFeatureIdentifiersByName();
+        featureRepository.getFeatureIdentifiersByName();
         
-        final Collection<String> namespaceNames = applicationFeatureRepository.namespaceNames();
+        final Collection<String> namespaceNames = featureRepository.namespaceNames();
         final Set<String> availableClasses = _Sets.newTreeSet();
         for (String packageName : namespaceNames) {
             appendLogicalTypes(packageName, ApplicationMemberSort.PROPERTY, availableClasses);
@@ -392,7 +392,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             final String packageName, 
             final ApplicationMemberSort memberSort, 
             final Set<String> availableClasses) {
-        final Collection<String> classNames = applicationFeatureRepository.classNamesContainedIn(packageName, memberSort);
+        final Collection<String> classNames = featureRepository.classNamesContainedIn(packageName, memberSort);
         for (String className : classNames) {
             availableClasses.add(packageName + "." + className);
         }
@@ -412,7 +412,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             final ApplicationMemberSort getMemberSort,
             final List<String> memberNames) {
         final Collection<String> memberNamesOf =
-                applicationFeatureRepository.memberNamesOf(packageName, className, getMemberSort);
+                featureRepository.memberNamesOf(packageName, className, getMemberSort);
         memberNames.addAll(memberNamesOf);
     }