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/04 12:04:49 UTC

[isis] 02/02: ISIS-2553: remove redundant mixins

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

commit 99efb645615c2dc252fc684076aad08ab6bbfa2b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Mar 4 13:04:32 2021 +0100

    ISIS-2553: remove redundant mixins
---
 .../appfeat/ApplicationFeatureRepository.java      |  13 ++-
 .../services/appfeat/ApplicationFeature.java       |   2 +-
 .../ApplicationFeatureRepositoryDefault.java       |  53 ++++-----
 .../ApplicationFeatureRepositoryDefaultTest.java   |  10 +-
 .../user/ApplicationUser_filterPermissions.java    |  19 ++--
 ...OrphanedPermissionManager_relocateSelected.java |   2 +-
 .../model/dom/role/ApplicationRole_addAction.java  | 108 ------------------
 .../dom/role/ApplicationRole_addCollection.java    | 111 -------------------
 .../dom/role/ApplicationRole_addNamespace.java     |  86 ---------------
 .../dom/role/ApplicationRole_addProperty.java      | 121 ---------------------
 .../model/dom/role/ApplicationRole_addType.java    |  82 --------------
 .../ApplicationPermissionRepository.java           |  20 ++--
 .../secman/jdo/dom/role/ApplicationRole.java       |  24 ----
 .../ApplicationPermissionRepository.java           |  22 ++--
 .../secman/jpa/dom/role/ApplicationRole.java       |  24 ----
 15 files changed, 79 insertions(+), 618 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 a5974c8..73e171e 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
@@ -26,27 +26,32 @@ import java.util.SortedSet;
  * class members (collectively: "application features") of the domain classes
  * within the framework's internal metamodel.
  *
- * @since 1.x {@index}
+ * @since 1.x revised for 2.0 {@index}
  */
 public interface ApplicationFeatureRepository  {
 
-    SortedSet<String> packageNames();
+    //TODO[2553] why return String, when AppFeatId is now API
+    SortedSet<String> namespaceNames();
 
-    SortedSet<String> packageNamesContainingClasses(
-            ApplicationMemberSort memberSort);
+//    SortedSet<String> namespaceNamesContainingSort(
+//            ApplicationMemberSort memberSort);
 
+    //TODO[2553] remove, only used by orphaned search, which can be done much simpler
     SortedSet<String> classNamesContainedIn(
             String packageFqn,
             ApplicationMemberSort memberSort);
 
+    //TODO[2553] remove or rename->logicalTypeSimpleNamesRecursivelyContainedInNamespace
     SortedSet<String> classNamesRecursivelyContainedIn(
             String packageFqn);
 
+    //TODO[2553] why return String, when AppFeatId is now API
     SortedSet<String> memberNamesOf(
             String packageFqn,
             String className,
             ApplicationMemberSort memberSort);
 
+    
     Map<String, ApplicationFeatureId> getFeatureIdentifiersByName();
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeature.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeature.java
index 4921d48..0c930f3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeature.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeature.java
@@ -48,7 +48,7 @@ import lombok.experimental.UtilityClass;
  *
  * <p>
  *     Note that this is NOT a view model; instead it can be converted to a string using methods of
- *     {@link ApplicationFeatureRepository}, eg {@link ApplicationFeatureRepository#classNamesContainedIn(String, ApplicationMemberSort)}.
+ *     {@link ApplicationFeatureRepository}.
  * </p>
  */
 @Value
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 b568f10..70c9de4 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
@@ -235,7 +235,7 @@ implements ApplicationFeatureRepository {
     }
 
     private ApplicationFeature findPackageElseCreate(final ApplicationFeatureId parentPackageId) {
-        ApplicationFeature parentPackage = findPackage(parentPackageId);
+        ApplicationFeature parentPackage = findNamespace(parentPackageId);
         if (parentPackage == null) {
             parentPackage = newPackage(parentPackageId);
         }
@@ -314,7 +314,7 @@ implements ApplicationFeatureRepository {
         // also cache per memberSort
         featuresMapFor(memberSort).put(featureId, memberFeature);
 
-        final ApplicationFeature classFeature = findClass(classFeatureId);
+        final ApplicationFeature classFeature = findLogicalType(classFeatureId);
         classFeature.addToMembers(featureId, memberSort);
     }
 
@@ -375,9 +375,9 @@ implements ApplicationFeatureRepository {
         initializeIfRequired();
         switch (featureId.getSort()) {
         case NAMESPACE:
-            return findPackage(featureId);
+            return findNamespace(featureId);
         case TYPE:
-            return findClass(featureId);
+            return findLogicalType(featureId);
         case MEMBER:
             return findMember(featureId);
         }
@@ -385,13 +385,13 @@ implements ApplicationFeatureRepository {
     }
 
 
-    public ApplicationFeature findPackage(final ApplicationFeatureId featureId) {
+    public ApplicationFeature findNamespace(final ApplicationFeatureId featureId) {
         initializeIfRequired();
         return packageFeatures.get(featureId);
     }
 
 
-    public ApplicationFeature findClass(final ApplicationFeatureId featureId) {
+    public ApplicationFeature findLogicalType(final ApplicationFeatureId featureId) {
         initializeIfRequired();
         return classFeatures.get(featureId);
     }
@@ -464,36 +464,39 @@ implements ApplicationFeatureRepository {
         return featureIdentifiersByName;
     }
     
-    // -- packageNames, packageNamesContainingClasses, classNamesContainedIn, memberNamesOf
+    // -- namespaceNames, packageNamesContainingClasses, classNamesContainedIn, memberNamesOf
     
     @Override
-    public SortedSet<String> packageNames() {
+    public SortedSet<String> namespaceNames() {
         initializeIfRequired();
         return stream(allFeatures(ApplicationFeatureSort.NAMESPACE))
                 .map(ApplicationFeature.Functions.GET_FQN)
                 .collect(_Sets.toUnmodifiableSorted());
     }
 
-    @Override
-    public SortedSet<String> packageNamesContainingClasses(final ApplicationMemberSort memberSort) {
-        initializeIfRequired();
-        final Collection<ApplicationFeature> packages = allFeatures(ApplicationFeatureSort.NAMESPACE);
-
-        return stream(packages)
-                .filter(ApplicationFeature.Predicates.packageContainingClasses(memberSort, this))
-                .map(ApplicationFeature.Functions.GET_FQN)
-                .collect(_Sets.toUnmodifiableSorted());
-    }
+//    @Override
+//    public SortedSet<String> namespaceNamesContainingSort(final ApplicationMemberSort memberSort) {
+//        initializeIfRequired();
+//        final Collection<ApplicationFeature> packages = allFeatures(ApplicationFeatureSort.NAMESPACE);
+//
+//        return stream(packages)
+//                .filter(ApplicationFeature.Predicates.packageContainingClasses(memberSort, this))
+//                .map(ApplicationFeature.Functions.GET_FQN)
+//                .collect(_Sets.toUnmodifiableSorted());
+//    }
 
     @Override
-    public SortedSet<String> classNamesContainedIn(final String packageFqn, final ApplicationMemberSort memberSort) {
+    public SortedSet<String> classNamesContainedIn(
+            final String namespace, 
+            final ApplicationMemberSort memberSort) {
+        
         initializeIfRequired();
-        final ApplicationFeatureId packageId = ApplicationFeatureId.newNamespace(packageFqn);
-        final ApplicationFeature pkg = findPackage(packageId);
-        if (pkg == null) {
+        final ApplicationFeatureId namespaceId = ApplicationFeatureId.newNamespace(namespace);
+        final ApplicationFeature namespaceFeat = findNamespace(namespaceId);
+        if (namespaceFeat == null) {
             return Collections.emptySortedSet();
         }
-        final SortedSet<ApplicationFeatureId> contents = pkg.getContents();
+        final SortedSet<ApplicationFeatureId> contents = namespaceFeat.getContents();
         return contents.stream()
                 .filter(_Predicates.isLogicalTypeContaining(memberSort, this))
                 .map(ApplicationFeatureId::getTypeSimpleName)
@@ -504,7 +507,7 @@ implements ApplicationFeatureRepository {
     public SortedSet<String> classNamesRecursivelyContainedIn(final String packageFqn) {
         initializeIfRequired();
         final ApplicationFeatureId packageId = ApplicationFeatureId.newNamespace(packageFqn);
-        final ApplicationFeature pkg = findPackage(packageId);
+        final ApplicationFeature pkg = findNamespace(packageId);
         if (pkg == null) {
             return Collections.emptySortedSet();
         }
@@ -522,7 +525,7 @@ implements ApplicationFeatureRepository {
             final ApplicationMemberSort memberSort) {
         initializeIfRequired();
         final ApplicationFeatureId classId = ApplicationFeatureId.newType(packageFqn + "." + className);
-        final ApplicationFeature cls = findClass(classId);
+        final ApplicationFeature cls = findLogicalType(classId);
         if (cls == null) {
             return Collections.emptySortedSet();
         }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
index 2818b99..6ec1629 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
@@ -221,17 +221,17 @@ public class ApplicationFeatureRepositoryDefaultTest {
             applicationFeatureRepository.createApplicationFeaturesFor(mockSpec);
 
             // then
-            final ApplicationFeature orgPkg = applicationFeatureRepository.findPackage(ApplicationFeatureId.newNamespace("org"));
+            final ApplicationFeature orgPkg = applicationFeatureRepository.findNamespace(ApplicationFeatureId.newNamespace("org"));
             assertThat(orgPkg, is(notNullValue()));
-            final ApplicationFeature orgIsisaddonsPkg = applicationFeatureRepository.findPackage(ApplicationFeatureId.newNamespace("org.isisaddons"));
+            final ApplicationFeature orgIsisaddonsPkg = applicationFeatureRepository.findNamespace(ApplicationFeatureId.newNamespace("org.isisaddons"));
             assertThat(orgPkg, is(notNullValue()));
-            final ApplicationFeature featurePkg = applicationFeatureRepository.findPackage(ApplicationFeatureId.newNamespace("org.isisaddons.module.security.dom.feature"));
+            final ApplicationFeature featurePkg = applicationFeatureRepository.findNamespace(ApplicationFeatureId.newNamespace("org.isisaddons.module.security.dom.feature"));
             assertThat(orgPkg, is(notNullValue()));
             assertThat(orgPkg.getContents(), contains(orgIsisaddonsPkg.getFeatureId()));
             assertThat(featurePkg.getContents(), contains(ApplicationFeatureId.newType(Bar.class.getName())));
 
             // then
-            final ApplicationFeature barClass = applicationFeatureRepository.findClass(ApplicationFeatureId.newType(Bar.class.getName()));
+            final ApplicationFeature barClass = applicationFeatureRepository.findLogicalType(ApplicationFeatureId.newType(Bar.class.getName()));
             assertThat(barClass, is(Matchers.notNullValue()));
 
             // then the mockActThatIsHidden is not listed.
@@ -290,7 +290,7 @@ public class ApplicationFeatureRepositoryDefaultTest {
 
             // then
             Assert.assertThat(classParentId, is(equalTo(classFeatureId.getParentNamespaceFeatureId())));
-            final ApplicationFeature classPackage = applicationFeatureRepository.findPackage(classParentId);
+            final ApplicationFeature classPackage = applicationFeatureRepository.findNamespace(classParentId);
             assertThat(classPackage, is(newlyCreatedParent));
         }
 
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/ApplicationUser_filterPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/ApplicationUser_filterPermissions.java
index 36d1451..b6ed9b1 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/ApplicationUser_filterPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/ApplicationUser_filterPermissions.java
@@ -56,13 +56,16 @@ public class ApplicationUser_filterPermissions {
 
     @Model
     public List<UserPermissionViewModel> act(
-            @ParameterLayout(named="Package", typicalLength=ApplicationFeature.TYPICAL_LENGTH_PKG_FQN)
-            final String packageFqn,
+            
+            @ParameterLayout(named="Namespace", typicalLength=ApplicationFeature.TYPICAL_LENGTH_PKG_FQN)
+            final String namespace,
+            
             @Parameter(optionality = Optionality.OPTIONAL)
-            @ParameterLayout(named="Class",  typicalLength=ApplicationFeature.TYPICAL_LENGTH_CLS_NAME)
-            final String className) {
+            @ParameterLayout(named="Type", typicalLength=ApplicationFeature.TYPICAL_LENGTH_CLS_NAME)
+            final String logicalTypeSimpleName) {
+        
         val allMembers = applicationFeatureRepository.allMembers();
-        val filtered = _Lists.filter(allMembers, within(packageFqn, className));
+        val filtered = _Lists.filter(allMembers, within(namespace, logicalTypeSimpleName));
         return asViewModels(filtered);
     }
 
@@ -71,7 +74,7 @@ public class ApplicationUser_filterPermissions {
      */
     @Model
     public Collection<String> choices0Act() {
-        return applicationFeatureRepository.packageNames();
+        return applicationFeatureRepository.namespaceNames();
     }
 
 
@@ -79,8 +82,8 @@ public class ApplicationUser_filterPermissions {
      * Class names for selected package.
      */
     @Model
-    public Collection<String> choices1Act(final String packageFqn) {
-        return applicationFeatureRepository.classNamesRecursivelyContainedIn(packageFqn);
+    public Collection<String> choices1Act(final String namespace) {
+        return applicationFeatureRepository.classNamesRecursivelyContainedIn(namespace);
     }
 
 
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 fd48c85..5a36429 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
@@ -56,7 +56,7 @@ public class ApplicationOrphanedPermissionManager_relocateSelected {
     }
 
     public Collection<String> choices1Act() {
-        return applicationFeatureRepository.packageNames();
+        return applicationFeatureRepository.namespaceNames();
     }
     
     private void relocate(
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addAction.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addAction.java
deleted file mode 100644
index 84b3c36..0000000
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addAction.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *  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.extensions.secman.model.dom.role;
-
-import javax.enterprise.inject.Model;
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.ParameterLayout;
-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.core.metamodel.services.appfeat.ApplicationFeature;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionDomainEvent;
-
-import lombok.RequiredArgsConstructor;
-
-//probably obsolete since ApplicationRole_addPermission
-@Action(
-        domainEvent = AddPermissionDomainEvent.class, 
-        associateWith = "permissions")
-@RequiredArgsConstructor
-public class ApplicationRole_addAction {
-    
-    @Inject private ApplicationFeatureRepository applicationFeatureRepository;
-    @Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
-    
-    private final ApplicationRole holder;
-
-    /**
-     * Adds a {@link ApplicationPermission permission} for this role to a
-     * {@link ApplicationMemberSort#ACTION action}
-     * {@link ApplicationFeatureSort#MEMBER member}
-     * {@link ApplicationFeature feature}.
-     */
-    @MemberOrder(sequence = "3")
-    public ApplicationRole act(
-            @ParameterLayout(named="Rule")
-            final ApplicationPermissionRule rule,
-            @ParameterLayout(named="Mode")
-            final ApplicationPermissionMode mode,
-            @ParameterLayout(named="Namespace", typicalLength=ApplicationFeature.TYPICAL_LENGTH_PKG_FQN)
-            final String namespace,
-            @ParameterLayout(named="Type", typicalLength=ApplicationFeature.TYPICAL_LENGTH_CLS_NAME)
-            final String logicalTypeSimpleName,
-            @ParameterLayout(named="Action", typicalLength = ApplicationFeature.TYPICAL_LENGTH_MEMBER_NAME)
-            final String memberName) {
-        
-        applicationPermissionRepository
-        .newPermission(holder, rule, mode, namespace, logicalTypeSimpleName, memberName);
-        return holder;
-    }
-
-    @Model
-    public ApplicationPermissionRule default0Act() {
-        return ApplicationPermissionRule.ALLOW;
-    }
-
-    @Model
-    public ApplicationPermissionMode default1Act() {
-        return ApplicationPermissionMode.CHANGING;
-    }
-
-    @Model
-    public java.util.Collection<String> choices2Act() {
-        return applicationFeatureRepository.packageNamesContainingClasses(ApplicationMemberSort.ACTION);
-    }
-
-    @Model
-    public java.util.Collection<String> choices3Act(
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String namespace) {
-        return applicationFeatureRepository.classNamesContainedIn(namespace, ApplicationMemberSort.ACTION);
-    }
-
-    @Model
-    public java.util.Collection<String> choices4Act(
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String namespace,
-            final String logicalTypeSimpleName) {
-        return applicationFeatureRepository.memberNamesOf(namespace, logicalTypeSimpleName, ApplicationMemberSort.ACTION);
-    }
-    
-}
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addCollection.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addCollection.java
deleted file mode 100644
index 3c50a00..0000000
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addCollection.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *  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.extensions.secman.model.dom.role;
-
-import java.util.Collection;
-
-import javax.enterprise.inject.Model;
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.ParameterLayout;
-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.core.metamodel.services.appfeat.ApplicationFeature;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionDomainEvent;
-
-import lombok.RequiredArgsConstructor;
-
-// probably obsolete since ApplicationRole_addPermission
-@Action(
-        domainEvent = AddPermissionDomainEvent.class, 
-        associateWith = "permissions")
-@RequiredArgsConstructor
-public class ApplicationRole_addCollection {
-    
-    @Inject private ApplicationFeatureRepository applicationFeatureRepository;
-    @Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
-    
-    private final ApplicationRole holder;
-
-
-    /**
-     * Adds a {@link ApplicationPermission permission} for this role to a
-     * {@link ApplicationMemberSort#COLLECTION collection}
-     * {@link ApplicationFeatureSort#MEMBER member}
-     * {@link ApplicationFeature feature}.
-     */
-    @MemberOrder(sequence = "5")
-    public ApplicationRole act(
-            @ParameterLayout(named="Rule")
-            final ApplicationPermissionRule rule,
-            @ParameterLayout(named="Mode")
-            final ApplicationPermissionMode mode,
-            @ParameterLayout(named="Namespace", typicalLength=ApplicationFeature.TYPICAL_LENGTH_PKG_FQN)
-            final String namespace,
-            @ParameterLayout(named="Type", typicalLength=ApplicationFeature.TYPICAL_LENGTH_CLS_NAME)
-            final String logicalTypeSimpleName,
-            @ParameterLayout(named="Collection", typicalLength=ApplicationFeature.TYPICAL_LENGTH_MEMBER_NAME)
-            final String memberName) {
-        
-        applicationPermissionRepository
-            .newPermission(holder, rule, mode, namespace, logicalTypeSimpleName, memberName);
-        return holder;
-    }
-
-    @Model
-    public ApplicationPermissionRule default0Act() {
-        return ApplicationPermissionRule.ALLOW;
-    }
-
-    @Model
-    public ApplicationPermissionMode default1Act() {
-        return ApplicationPermissionMode.CHANGING;
-    }
-
-    @Model
-    public Collection<String> choices2Act() {
-        return applicationFeatureRepository.packageNamesContainingClasses(ApplicationMemberSort.COLLECTION);
-    }
-    
-    @Model
-    public Collection<String> choices3Act(
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String namespace) {
-        return applicationFeatureRepository.classNamesContainedIn(namespace, ApplicationMemberSort.COLLECTION);
-    }
-
-    @Model
-    public Collection<String> choices4Act(
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String namespace,
-            final String logicalTypeSimpleName) {
-        return applicationFeatureRepository.memberNamesOf(namespace, logicalTypeSimpleName, ApplicationMemberSort.COLLECTION);
-    }
-
-}
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addNamespace.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addNamespace.java
deleted file mode 100644
index 339eecc..0000000
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addNamespace.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *  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.extensions.secman.model.dom.role;
-
-import javax.enterprise.inject.Model;
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.ParameterLayout;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionDomainEvent;
-
-import lombok.RequiredArgsConstructor;
-
-//probably obsolete since ApplicationRole_addPermission
-@Action(
-        domainEvent = AddPermissionDomainEvent.class, 
-        associateWith = "permissions")
-@RequiredArgsConstructor
-public class ApplicationRole_addNamespace {
-    
-    @Inject private ApplicationFeatureRepository applicationFeatureRepository;
-    @Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
-    
-    private final ApplicationRole holder;
-    
-    /**
-     * Adds a {@link ApplicationPermission permission}
-     * for this role to a
-     * {@link ApplicationFeatureSort#NAMESPACE package}
-     * {@link ApplicationFeature feature}.
-     */
-    @MemberOrder(sequence = "1")
-    public ApplicationRole act(
-            @ParameterLayout(named="Rule")
-            final ApplicationPermissionRule rule,
-            @ParameterLayout(named="Mode")
-            final ApplicationPermissionMode mode,
-            @ParameterLayout(named="Namespace", typicalLength= ApplicationFeature.TYPICAL_LENGTH_PKG_FQN)
-            final String namespace) {
-        
-        applicationPermissionRepository
-            .newPermission(holder, rule, mode, ApplicationFeatureSort.NAMESPACE, namespace);
-        return holder;
-    }
-
-    @Model
-    public ApplicationPermissionRule default0Act() {
-        return ApplicationPermissionRule.ALLOW;
-    }
-
-    @Model
-    public ApplicationPermissionMode default1Act() {
-        return ApplicationPermissionMode.CHANGING;
-    }
-
-    @Model
-    public java.util.Collection<String> choices2Act() {
-        return applicationFeatureRepository.packageNames();
-    }
-
-}
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addProperty.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addProperty.java
deleted file mode 100644
index 8aeb81c..0000000
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addProperty.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *  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.extensions.secman.model.dom.role;
-
-import java.util.Collection;
-
-import javax.enterprise.inject.Model;
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.ParameterLayout;
-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.core.metamodel.services.appfeat.ApplicationFeature;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionDomainEvent;
-
-import lombok.RequiredArgsConstructor;
-
-//probably obsolete since ApplicationRole_addPermission
-@Action(
-        domainEvent = AddPermissionDomainEvent.class, 
-        associateWith = "permissions")
-@RequiredArgsConstructor
-public class ApplicationRole_addProperty {
-    
-    @Inject private ApplicationFeatureRepository applicationFeatureRepository;
-    @Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
-    
-    private final ApplicationRole holder;
-
-    // -- addProperty (action)
-    
-    /**
-     * Adds a {@link ApplicationPermission permission} for this role to a
-     * {@link ApplicationMemberSort#PROPERTY property}
-     * {@link ApplicationFeatureSort#MEMBER member}
-     * {@link ApplicationFeature feature}.
-     */
-    @MemberOrder(sequence = "4")
-    public ApplicationRole act(
-            @ParameterLayout(named="Rule")
-            final ApplicationPermissionRule rule,
-            @ParameterLayout(named="Mode")
-            final ApplicationPermissionMode mode,
-            @ParameterLayout(named="Namespace", typicalLength=ApplicationFeature.TYPICAL_LENGTH_PKG_FQN)
-            final String namespace,
-            @ParameterLayout(named="Type", typicalLength=ApplicationFeature.TYPICAL_LENGTH_CLS_NAME)
-            final String logicalTypeSimpleName,
-            @ParameterLayout(named="Property", typicalLength=ApplicationFeature.TYPICAL_LENGTH_MEMBER_NAME)
-            final String memberName) {
-        
-        applicationPermissionRepository
-            .newPermission(holder, rule, mode, namespace, logicalTypeSimpleName, memberName);
-        return holder;
-    }
-
-    @Model
-    public ApplicationPermissionRule default0Act() {
-        return ApplicationPermissionRule.ALLOW;
-    }
-
-    @Model
-    public ApplicationPermissionMode default1Act() {
-        return ApplicationPermissionMode.CHANGING;
-    }
-
-    /**
-     * Package names that have classes in them.
-     */
-    @Model
-    public Collection<String> choices2Act() {
-        return applicationFeatureRepository.packageNamesContainingClasses(ApplicationMemberSort.PROPERTY);
-    }
-
-    /**
-     * Class names for selected package.
-     */
-    @Model
-    public Collection<String> choices3Act(
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String namespace) {
-        return applicationFeatureRepository.classNamesContainedIn(namespace, ApplicationMemberSort.PROPERTY);
-    }
-
-    /**
-     * Member names for selected class.
-     */
-    @Model
-    public Collection<String> choices4Act(
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String namespace,
-            final String logicalTypeSimpleName) {
-        return applicationFeatureRepository.memberNamesOf(namespace, logicalTypeSimpleName, ApplicationMemberSort.PROPERTY);
-    }
-
-}
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addType.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addType.java
deleted file mode 100644
index 2b5db48..0000000
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addType.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- *  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.extensions.secman.model.dom.role;
-
-import javax.enterprise.inject.Model;
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.ParameterLayout;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole;
-import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionDomainEvent;
-
-import lombok.RequiredArgsConstructor;
-
-//probably obsolete since ApplicationRole_addPermission
-@Action(
-        domainEvent = AddPermissionDomainEvent.class, 
-        associateWith = "permissions")
-@RequiredArgsConstructor
-public class ApplicationRole_addType {
-    
-    @Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
-    
-    private final ApplicationRole holder;
-
-    /**
-     * Adds a {@link ApplicationPermission permission} for this role to a
-     * {@link ApplicationFeatureSort#MEMBER member}
-     * {@link ApplicationFeature feature}.
-     */
-    @MemberOrder(sequence = "1")
-    public ApplicationRole act(
-            @ParameterLayout(named="Rule")
-            final ApplicationPermissionRule rule,
-            @ParameterLayout(named="Mode")
-            final ApplicationPermissionMode mode,
-            @ParameterLayout(named="Namespace", typicalLength=ApplicationFeature.TYPICAL_LENGTH_PKG_FQN)
-            final String namespace,
-            @ParameterLayout(named="Type", typicalLength=ApplicationFeature.TYPICAL_LENGTH_CLS_NAME)
-            final String logicalTypeSimpleName) {
-        
-        applicationPermissionRepository.newPermission(
-                holder, rule, mode, ApplicationFeatureSort.TYPE,
-                namespace + "." + logicalTypeSimpleName);
-        
-        return holder;
-    }
-
-    @Model
-    public ApplicationPermissionRule default0Act() {
-        return ApplicationPermissionRule.ALLOW;
-    }
-
-    @Model
-    public ApplicationPermissionMode default1Act() {
-        return ApplicationPermissionMode.CHANGING;
-    }
-
-}
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 de4e66b..e8a5a87 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
@@ -316,12 +316,12 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     @Override
     public Collection<ApplicationPermission> findOrphaned() {
 
-        final Collection<String> packageNames = featureRepository.packageNames();
+        final Collection<String> namespaceNames = featureRepository.namespaceNames();
         final Set<String> availableClasses = _Sets.newTreeSet();
-        for (String packageName : packageNames) {
-            appendClasses(packageName, ApplicationMemberSort.PROPERTY, availableClasses);
-            appendClasses(packageName, ApplicationMemberSort.COLLECTION, availableClasses);
-            appendClasses(packageName, ApplicationMemberSort.ACTION, availableClasses);
+        for (String packageName : namespaceNames) {
+            appendLogicalTypes(packageName, ApplicationMemberSort.PROPERTY, availableClasses);
+            appendLogicalTypes(packageName, ApplicationMemberSort.COLLECTION, availableClasses);
+            appendLogicalTypes(packageName, ApplicationMemberSort.ACTION, availableClasses);
         }
 
         val orphaned = _Lists.<ApplicationPermission>newArrayList();
@@ -333,7 +333,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             switch (featureSort) {
 
             case NAMESPACE:
-                if(!packageNames.contains(featureFqn)) {
+                if(!namespaceNames.contains(featureFqn)) {
                     orphaned.add(permission);
                 }
                 break;
@@ -366,9 +366,11 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
         return orphaned;
     }
 
-    private void appendClasses(
-            final String packageName, final ApplicationMemberSort getMemberSort, final Set<String> availableClasses) {
-        final Collection<String> classNames = featureRepository.classNamesContainedIn(packageName, getMemberSort);
+    private void appendLogicalTypes(
+            final String packageName, 
+            final ApplicationMemberSort memberSort, 
+            final Set<String> availableClasses) {
+        final Collection<String> classNames = featureRepository.classNamesContainedIn(packageName, memberSort);
         for (String className : classNames) {
             availableClasses.add(packageName + "." + className);
         }
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
index a7f6ec4..408d981 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
@@ -38,14 +38,11 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.types.DescriptionType;
 import org.apache.isis.applib.util.Equality;
 import org.apache.isis.applib.util.Hashing;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ToString;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.jdo.dom.permission.ApplicationPermission;
 import org.apache.isis.extensions.secman.jdo.dom.permission.ApplicationPermissionRepository;
 import org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser;
@@ -90,7 +87,6 @@ import lombok.Setter;
 public class ApplicationRole
 implements org.apache.isis.extensions.secman.api.role.ApplicationRole, Comparable<ApplicationRole> {
 
-    @Inject private ApplicationFeatureRepository applicationFeatureRepository;
     @Inject private ApplicationPermissionRepository applicationPermissionRepository;
 
     // -- name (property)
@@ -141,26 +137,6 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRole, Comparabl
         return applicationPermissionRepository.findByRole(this);
     }
 
-
-
-
-    /**
-     * Package names that have classes in them.
-     */
-    public java.util.Collection<String> choices2AddClass() {
-        return applicationFeatureRepository.packageNamesContainingClasses(null);
-    }
-
-    /**
-     * Class names for selected package.
-     */
-    public java.util.Collection<String> choices3AddClass(
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String packageFqn) {
-        return applicationFeatureRepository.classNamesContainedIn(packageFqn, null);
-    }
-
     // -- users (collection)
 
     public static class UsersDomainEvent extends CollectionDomainEvent<ApplicationUser> {}
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 a507da8..76cd812 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
@@ -335,12 +335,14 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     @Override
     public Collection<ApplicationPermission> findOrphaned() {
 
-        final Collection<String> packageNames = applicationFeatureRepository.packageNames();
+        applicationFeatureRepository.getFeatureIdentifiersByName();
+        
+        final Collection<String> namespaceNames = applicationFeatureRepository.namespaceNames();
         final Set<String> availableClasses = _Sets.newTreeSet();
-        for (String packageName : packageNames) {
-            appendClasses(packageName, ApplicationMemberSort.PROPERTY, availableClasses);
-            appendClasses(packageName, ApplicationMemberSort.COLLECTION, availableClasses);
-            appendClasses(packageName, ApplicationMemberSort.ACTION, availableClasses);
+        for (String packageName : namespaceNames) {
+            appendLogicalTypes(packageName, ApplicationMemberSort.PROPERTY, availableClasses);
+            appendLogicalTypes(packageName, ApplicationMemberSort.COLLECTION, availableClasses);
+            appendLogicalTypes(packageName, ApplicationMemberSort.ACTION, availableClasses);
         }
 
         val orphaned = _Lists.<ApplicationPermission>newArrayList();
@@ -353,7 +355,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             switch (featureType) {
 
             case NAMESPACE:
-                if(!packageNames.contains(featureFqn)) {
+                if(!namespaceNames.contains(featureFqn)) {
                     orphaned.add(permission);
                 }
                 break;
@@ -386,9 +388,11 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
         return orphaned;
     }
 
-    private void appendClasses(
-            final String packageName, final ApplicationMemberSort getMemberSort, final Set<String> availableClasses) {
-        final Collection<String> classNames = applicationFeatureRepository.classNamesContainedIn(packageName, getMemberSort);
+    private void appendLogicalTypes(
+            final String packageName, 
+            final ApplicationMemberSort memberSort, 
+            final Set<String> availableClasses) {
+        final Collection<String> classNames = applicationFeatureRepository.classNamesContainedIn(packageName, memberSort);
         for (String className : classNames) {
             availableClasses.add(packageName + "." + className);
         }
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRole.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRole.java
index 5d5d865..2ccc99f 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRole.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRole.java
@@ -45,14 +45,11 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.types.DescriptionType;
 import org.apache.isis.applib.util.Equality;
 import org.apache.isis.applib.util.Hashing;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ToString;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
-import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
 import org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermission;
 import org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermissionRepository;
@@ -98,7 +95,6 @@ implements
     org.apache.isis.extensions.secman.api.role.ApplicationRole,
     Comparable<ApplicationRole> {
 
-    @Inject private transient ApplicationFeatureRepository applicationFeatureRepository;
     @Inject private transient ApplicationPermissionRepository applicationPermissionRepository;
 
     @Id
@@ -153,26 +149,6 @@ implements
         return applicationPermissionRepository.findByRole(this);
     }
 
-
-
-
-    /**
-     * Package names that have classes in them.
-     */
-    public java.util.Collection<String> choices2AddClass() {
-        return applicationFeatureRepository.packageNamesContainingClasses(null);
-    }
-
-    /**
-     * Class names for selected package.
-     */
-    public java.util.Collection<String> choices3AddClass(
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String packageFqn) {
-        return applicationFeatureRepository.classNamesContainedIn(packageFqn, null);
-    }
-
     // -- users (collection)
 
     public static class UsersDomainEvent extends CollectionDomainEvent<ApplicationUser> {}