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/03 18:39:10 UTC

[isis] 05/09: ISIS-2553: rename ApplicationFeatureType->ApplicationFeatureSort

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 c0cc90d4e7941e80a5d5c81500ee50446b7a1e6b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 3 16:36:48 2021 +0100

    ISIS-2553: rename ApplicationFeatureType->ApplicationFeatureSort
---
 .../services/appfeat/ApplicationFeatureId.java     | 70 +++++++--------
 ...eatureType.java => ApplicationFeatureSort.java} | 20 ++---
 .../services/appfeat/ApplicationFeature.java       | 22 ++---
 .../ApplicationFeatureRepositoryDefault.java       | 13 +--
 .../core/metamodel/services/appfeat/_Asserts.java  |  4 +-
 .../metamodel/services/appfeat/_Predicates.java    |  4 +-
 .../metamodel/MetaModelServiceDefault.java         |  4 +-
 .../specloader/SpecificationLoaderDefault.java     |  4 +-
 .../services/appfeat/ApplicationFeatureIdTest.java | 99 ++++++++++++----------
 .../appfeat/ApplicationFeatureTypeTest.java        | 40 ++++-----
 .../api/permission/ApplicationPermission.java      |  6 +-
 .../ApplicationPermissionRepository.java           |  8 +-
 .../app/feature/ApplicationFeatureViewModel.java   | 10 +--
 .../model/app/feature/ApplicationPackage.java      |  4 +-
 .../model/app/user/UserPermissionViewModel.java    | 14 +--
 .../model/dom/role/ApplicationRole_addAction.java  |  4 +-
 .../model/dom/role/ApplicationRole_addClass.java   |  6 +-
 .../dom/role/ApplicationRole_addCollection.java    |  4 +-
 .../model/dom/role/ApplicationRole_addPackage.java |  6 +-
 .../dom/role/ApplicationRole_addProperty.java      |  4 +-
 .../dom/role/ApplicationRole_removePermission.java | 12 +--
 .../jdo/dom/permission/ApplicationPermission.java  |  8 +-
 .../ApplicationPermissionRepository.java           | 20 ++---
 .../AbstractRoleAndPermissionsFixtureScript.java   | 10 +--
 .../jpa/dom/permission/ApplicationPermission.java  |  8 +-
 .../ApplicationPermissionRepository.java           | 20 ++---
 .../AbstractRoleAndPermissionsFixtureScript.java   | 10 +--
 27 files changed, 220 insertions(+), 214 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureId.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureId.java
index d309436..c94a1f1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureId.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureId.java
@@ -65,7 +65,7 @@ implements
     // -- CONSTANTS
 
     public static final ApplicationFeatureId NAMESPACE_DEFAULT = 
-            new ApplicationFeatureId(ApplicationFeatureType.NAMESPACE, "default");
+            new ApplicationFeatureId(ApplicationFeatureSort.NAMESPACE, "default");
 
     // -- FACTORY METHODS
 
@@ -84,7 +84,7 @@ implements
     }
     
     public static ApplicationFeatureId newFeature(
-            final ApplicationFeatureType featureType, 
+            final ApplicationFeatureSort featureType, 
             final String qualifiedName) {
         
         switch (featureType) {
@@ -113,44 +113,44 @@ implements
     }
 
     public static ApplicationFeatureId newNamespace(final String namespace) {
-        final ApplicationFeatureId featureId = new ApplicationFeatureId(ApplicationFeatureType.NAMESPACE);
+        final ApplicationFeatureId featureId = new ApplicationFeatureId(ApplicationFeatureSort.NAMESPACE);
         featureId.setNamespace(namespace);
         return featureId;
     }
 
     public static ApplicationFeatureId newType(final String logicalTypeName) {
-        return new ApplicationFeatureId(ApplicationFeatureType.TYPE, logicalTypeName);
+        return new ApplicationFeatureId(ApplicationFeatureSort.TYPE, logicalTypeName);
     }
 
     public static ApplicationFeatureId newMember(final String logicalTypeName, final String memberName) {
-        final ApplicationFeatureId featureId = new ApplicationFeatureId(ApplicationFeatureType.MEMBER);
-        ApplicationFeatureType.TYPE.init(featureId, logicalTypeName);
-        featureId.type = ApplicationFeatureType.MEMBER;
+        final ApplicationFeatureId featureId = new ApplicationFeatureId(ApplicationFeatureSort.MEMBER);
+        ApplicationFeatureSort.TYPE.init(featureId, logicalTypeName);
+        featureId.sort = ApplicationFeatureSort.MEMBER;
         featureId.setMemberName(memberName);
         return featureId;
     }
 
     public static ApplicationFeatureId newMember(final String fullyQualifiedName) {
-        return new ApplicationFeatureId(ApplicationFeatureType.MEMBER, fullyQualifiedName);
+        return new ApplicationFeatureId(ApplicationFeatureSort.MEMBER, fullyQualifiedName);
     }
 
     // -- CONSTRUCTOR
 
     private ApplicationFeatureId(final String asString) {
         final Iterator<String> iterator = _Strings.splitThenStream(asString, ":").iterator();
-        final ApplicationFeatureType type = ApplicationFeatureType.valueOf(iterator.next());
+        final ApplicationFeatureSort type = ApplicationFeatureSort.valueOf(iterator.next());
         type.init(this, iterator.next());
     }
 
     /**
-     * Must be called by {@link ApplicationFeatureType#init(ApplicationFeatureId, String)} 
+     * Must be called by {@link ApplicationFeatureSort#init(ApplicationFeatureId, String)} 
      * immediately afterwards to fully initialize.
      */
-    ApplicationFeatureId(final ApplicationFeatureType type) {
-        this.type = type;
+    ApplicationFeatureId(final ApplicationFeatureSort type) {
+        this.sort = type;
     }
 
-    public ApplicationFeatureId(final ApplicationFeatureType type, final String fullyQualifiedName) {
+    public ApplicationFeatureId(final ApplicationFeatureSort type, final String fullyQualifiedName) {
         type.init(this, fullyQualifiedName);
     }
 
@@ -168,13 +168,13 @@ implements
 
     // -- PROPERTIES
     
-    @Getter ApplicationFeatureType type;
+    @Getter ApplicationFeatureSort sort;
     
     /**
      * The {@link ApplicationFeatureId id} of the member's class.
      */
     public ApplicationFeatureId getParentClassId() {
-        ApplicationFeatureType.ensureMember(this);
+        ApplicationFeatureSort.ensureMember(this);
         final String classFqn = this.getNamespace() + "." + getTypeSimpleName();
         return newType(classFqn);
     }
@@ -224,9 +224,9 @@ implements
      */
     @Programmatic
     public ApplicationFeatureId getParentPackageId() {
-        ApplicationFeatureType.ensurePackageOrClass(this);
+        ApplicationFeatureSort.ensurePackageOrClass(this);
 
-        if(type == ApplicationFeatureType.TYPE) {
+        if(sort == ApplicationFeatureSort.TYPE) {
             return ApplicationFeatureId.newNamespace(getNamespace());
         } else {
             final String packageName = getNamespace(); // eg aaa.bbb.ccc
@@ -246,7 +246,7 @@ implements
 
     @Programmatic
     public String asString() {
-        return type.name() + ":" + getFullyQualifiedName();
+        return sort.name() + ":" + getFullyQualifiedName();
     }
 
     @Programmatic
@@ -283,7 +283,7 @@ implements
     }
 
     private ApplicationFeatureId getParentId() {
-        return type == ApplicationFeatureType.MEMBER
+        return sort == ApplicationFeatureSort.MEMBER
                 ? getParentClassId()
                 : getParentPackageId();
     }
@@ -303,35 +303,35 @@ implements
 
     // -- OBJECT CONTRACT
 
-    private static final Comparator<ApplicationFeatureId> byType =
-            comparing(ApplicationFeatureId::getType, nullsFirst(naturalOrder()));
-    private static final Comparator<ApplicationFeatureId> byPackageName =
+    private static final Comparator<ApplicationFeatureId> bySort =
+            comparing(ApplicationFeatureId::getSort, nullsFirst(naturalOrder()));
+    private static final Comparator<ApplicationFeatureId> byNamespace =
             comparing(ApplicationFeatureId::getNamespace, nullsFirst(naturalOrder()));
-    private static final Comparator<ApplicationFeatureId> byClassName =
+    private static final Comparator<ApplicationFeatureId> byTypeSimpleName =
             comparing(ApplicationFeatureId::getTypeSimpleName, nullsFirst(naturalOrder()));
     private static final Comparator<ApplicationFeatureId> byMemberName =
             comparing(ApplicationFeatureId::getMemberName, nullsFirst(naturalOrder()));
 
     private static final Comparator<ApplicationFeatureId> applicationFeatureIdOrdering =
-            Comparator.nullsFirst(byType)
-            .thenComparing(byPackageName)
-            .thenComparing(byClassName)
+            Comparator.nullsFirst(bySort)
+            .thenComparing(byNamespace)
+            .thenComparing(byTypeSimpleName)
             .thenComparing(byMemberName);
 
     private static final Equality<ApplicationFeatureId> equality =
-            ObjectContracts.checkEquals(ApplicationFeatureId::getType)
+            ObjectContracts.checkEquals(ApplicationFeatureId::getSort)
             .thenCheckEquals(ApplicationFeatureId::getNamespace)
             .thenCheckEquals(ApplicationFeatureId::getTypeSimpleName)
             .thenCheckEquals(ApplicationFeatureId::getMemberName);
 
     private static final Hashing<ApplicationFeatureId> hashing =
-            ObjectContracts.hashing(ApplicationFeatureId::getType)
+            ObjectContracts.hashing(ApplicationFeatureId::getSort)
             .thenHashing(ApplicationFeatureId::getNamespace)
             .thenHashing(ApplicationFeatureId::getTypeSimpleName)
             .thenHashing(ApplicationFeatureId::getMemberName);
 
     private static final ToString<ApplicationFeatureId> toString =
-            ObjectContracts.toString("type", ApplicationFeatureId::getType)
+            ObjectContracts.toString("sort", ApplicationFeatureId::getSort)
             .thenToString("namespace", ApplicationFeatureId::getNamespace)
             .thenToStringOmitIfAbsent("typeSimpleName", ApplicationFeatureId::getTypeSimpleName)
             .thenToStringOmitIfAbsent("memberName", ApplicationFeatureId::getMemberName);
@@ -370,22 +370,22 @@ implements
 
     @Deprecated // duplicate
     public static ApplicationFeatureId createNamespace(String namespace) {
-        val feat = new ApplicationFeatureId(ApplicationFeatureType.NAMESPACE);
-        ApplicationFeatureType.NAMESPACE.init(feat, namespace);
+        val feat = new ApplicationFeatureId(ApplicationFeatureSort.NAMESPACE);
+        ApplicationFeatureSort.NAMESPACE.init(feat, namespace);
         return feat;
     }
     
     @Deprecated // duplicate
     public static ApplicationFeatureId createType(String logicalTypeName) {
-        val feat = new ApplicationFeatureId(ApplicationFeatureType.TYPE);
-        ApplicationFeatureType.TYPE.init(feat, logicalTypeName);
+        val feat = new ApplicationFeatureId(ApplicationFeatureSort.TYPE);
+        ApplicationFeatureSort.TYPE.init(feat, logicalTypeName);
         return feat;
     }
     
     @Deprecated // duplicate
     public static ApplicationFeatureId createMember(String fqn) {
-        val feat = new ApplicationFeatureId(ApplicationFeatureType.MEMBER);
-        ApplicationFeatureType.MEMBER.init(feat, fqn);
+        val feat = new ApplicationFeatureId(ApplicationFeatureSort.MEMBER);
+        ApplicationFeatureSort.MEMBER.init(feat, fqn);
         return feat;
     }
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureType.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
similarity index 86%
rename from api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureType.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
index 99c65ee..352a380 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
@@ -20,7 +20,7 @@ package org.apache.isis.applib.services.appfeat;
 
 import org.apache.isis.commons.internal.base._Strings;
 
-public enum ApplicationFeatureType {
+public enum ApplicationFeatureSort {
     
     /** 
      * logical namespace, leading part of the <i>object type</i> (aka logical type)
@@ -31,7 +31,7 @@ public enum ApplicationFeatureType {
             feature.setNamespace(fullyQualifiedName);
             feature.setTypeSimpleName(null);
             feature.setMemberName(null);
-            feature.type = this;
+            feature.sort = this;
         }
     },
     
@@ -50,7 +50,7 @@ public enum ApplicationFeatureType {
                 feature.setTypeSimpleName(fullyQualifiedName);
             }
             feature.setMemberName(null);
-            feature.type = this;
+            feature.sort = this;
         }
     },
     
@@ -69,40 +69,40 @@ public enum ApplicationFeatureType {
             final String memberName = fullyQualifiedName.substring(i+1);
             TYPE.init(feature, className);
             feature.setMemberName(memberName);
-            feature.type = this;
+            feature.sort = this;
         }
     };
 
     public boolean hideClassName() {
-        return this == ApplicationFeatureType.NAMESPACE;
+        return this == ApplicationFeatureSort.NAMESPACE;
     }
     
     public boolean hideMember() {
-        return this == ApplicationFeatureType.NAMESPACE || this == ApplicationFeatureType.TYPE;
+        return this == ApplicationFeatureSort.NAMESPACE || this == ApplicationFeatureSort.TYPE;
     }
 
     abstract void init(ApplicationFeatureId applicationFeatureId, String fullyQualifiedName);
 
     public static void ensurePackage(final ApplicationFeatureId feature) {
-        if(feature.type != ApplicationFeatureType.NAMESPACE) {
+        if(feature.sort != ApplicationFeatureSort.NAMESPACE) {
             throw new IllegalStateException("Can only be called for a package; " + feature.toString());
         }
     }
 
     public static void ensurePackageOrClass(final ApplicationFeatureId applicationFeatureId) {
-        if(applicationFeatureId.type != ApplicationFeatureType.NAMESPACE && applicationFeatureId.type != ApplicationFeatureType.TYPE) {
+        if(applicationFeatureId.sort != ApplicationFeatureSort.NAMESPACE && applicationFeatureId.sort != ApplicationFeatureSort.TYPE) {
             throw new IllegalStateException("Can only be called for a package or a class; " + applicationFeatureId.toString());
         }
     }
 
     public static void ensureClass(final ApplicationFeatureId feature) {
-        if(feature.type != ApplicationFeatureType.TYPE) {
+        if(feature.sort != ApplicationFeatureSort.TYPE) {
             throw new IllegalStateException("Can only be called for a class; " + feature.toString());
         }
     }
 
     public static void ensureMember(final ApplicationFeatureId feature) {
-        if(feature.type != ApplicationFeatureType.MEMBER) {
+        if(feature.sort != ApplicationFeatureSort.MEMBER) {
             throw new IllegalStateException("Can only be called for a member; " + feature.toString());
         }
     }
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 af36106..9781f0a 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
@@ -30,7 +30,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.applib.util.Equality;
 import org.apache.isis.applib.util.Hashing;
@@ -83,7 +83,7 @@ public class ApplicationFeature implements Comparable<ApplicationFeature> {
     private ApplicationFeatureId featureId;
 
     /**
-     * Only for {@link ApplicationFeatureType#MEMBER member}s.
+     * Only for {@link ApplicationFeatureSort#MEMBER member}s.
      */
     @Getter @Setter
     private ApplicationMemberType memberType;
@@ -122,13 +122,13 @@ public class ApplicationFeature implements Comparable<ApplicationFeature> {
     private final SortedSet<ApplicationFeatureId> contents = _Sets.newTreeSet();
 
     public SortedSet<ApplicationFeatureId> getContents() {
-        ApplicationFeatureType.ensurePackage(this.getFeatureId());
+        ApplicationFeatureSort.ensurePackage(this.getFeatureId());
         return contents;
     }
 
     public void addToContents(final ApplicationFeatureId contentId) {
-        ApplicationFeatureType.ensurePackage(this.getFeatureId());
-        ApplicationFeatureType.ensurePackageOrClass(contentId);
+        ApplicationFeatureSort.ensurePackage(this.getFeatureId());
+        ApplicationFeatureSort.ensurePackageOrClass(contentId);
         this.contents.add(contentId);
     }
 
@@ -137,7 +137,7 @@ public class ApplicationFeature implements Comparable<ApplicationFeature> {
     private final SortedSet<ApplicationFeatureId> properties = _Sets.newTreeSet();
 
     public SortedSet<ApplicationFeatureId> getProperties() {
-        ApplicationFeatureType.ensureClass(this.getFeatureId());
+        ApplicationFeatureSort.ensureClass(this.getFeatureId());
         return properties;
     }
 
@@ -145,7 +145,7 @@ public class ApplicationFeature implements Comparable<ApplicationFeature> {
     private final SortedSet<ApplicationFeatureId> collections = _Sets.newTreeSet();
     
     public SortedSet<ApplicationFeatureId> getCollections() {
-        ApplicationFeatureType.ensureClass(this.getFeatureId());
+        ApplicationFeatureSort.ensureClass(this.getFeatureId());
         return collections;
     }
 
@@ -153,19 +153,19 @@ public class ApplicationFeature implements Comparable<ApplicationFeature> {
     private final SortedSet<ApplicationFeatureId> actions = _Sets.newTreeSet();
     
     public SortedSet<ApplicationFeatureId> getActions() {
-        ApplicationFeatureType.ensureClass(this.getFeatureId());
+        ApplicationFeatureSort.ensureClass(this.getFeatureId());
         return actions;
     }
     
     public void addToMembers(final ApplicationFeatureId memberId, final ApplicationMemberType memberType) {
-        ApplicationFeatureType.ensureClass(this.getFeatureId());
-        ApplicationFeatureType.ensureMember(memberId);
+        ApplicationFeatureSort.ensureClass(this.getFeatureId());
+        ApplicationFeatureSort.ensureMember(memberId);
 
         membersOf(memberType).add(memberId);
     }
     
     public SortedSet<ApplicationFeatureId> membersOf(final ApplicationMemberType memberType) {
-        ApplicationFeatureType.ensureClass(this.getFeatureId());
+        ApplicationFeatureSort.ensureClass(this.getFeatureId());
         switch (memberType) {
         case PROPERTY:
             return properties;
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 9883a62..d325519 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
@@ -39,10 +39,11 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 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.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.metamodel.services.ApplicationFeaturesInitConfiguration;
 import org.apache.isis.core.metamodel.events.MetamodelEvent;
@@ -372,7 +373,7 @@ implements ApplicationFeatureRepository {
 
     public ApplicationFeature findFeature(final ApplicationFeatureId featureId) {
         initializeIfRequired();
-        switch (featureId.getType()) {
+        switch (featureId.getSort()) {
         case NAMESPACE:
             return findPackage(featureId);
         case TYPE:
@@ -380,7 +381,7 @@ implements ApplicationFeatureRepository {
         case MEMBER:
             return findMember(featureId);
         }
-        throw new IllegalArgumentException("Feature has unknown feature type " + featureId.getType());
+        throw _Exceptions.illegalArgument("Feature of unknown sort '%s'", featureId.getSort());
     }
 
 
@@ -405,7 +406,7 @@ implements ApplicationFeatureRepository {
 
     // -- allFeatures, allPackages, allClasses, allMembers
 
-    public Collection<ApplicationFeature> allFeatures(final ApplicationFeatureType featureType) {
+    public Collection<ApplicationFeature> allFeatures(final ApplicationFeatureSort featureType) {
         initializeIfRequired();
         if (featureType == null) {
             return Collections.emptyList();
@@ -468,7 +469,7 @@ implements ApplicationFeatureRepository {
     @Override
     public SortedSet<String> packageNames() {
         initializeIfRequired();
-        return stream(allFeatures(ApplicationFeatureType.NAMESPACE))
+        return stream(allFeatures(ApplicationFeatureSort.NAMESPACE))
                 .map(ApplicationFeature.Functions.GET_FQN)
                 .collect(_Sets.toUnmodifiableSorted());
     }
@@ -476,7 +477,7 @@ implements ApplicationFeatureRepository {
     @Override
     public SortedSet<String> packageNamesContainingClasses(final ApplicationMemberType memberType) {
         initializeIfRequired();
-        final Collection<ApplicationFeature> packages = allFeatures(ApplicationFeatureType.NAMESPACE);
+        final Collection<ApplicationFeature> packages = allFeatures(ApplicationFeatureSort.NAMESPACE);
 
         return stream(packages)
                 .filter(ApplicationFeature.Predicates.packageContainingClasses(memberType, this))
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/_Asserts.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/_Asserts.java
index d3409c7..81b9c52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/_Asserts.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/_Asserts.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.services.appfeat;
 import java.util.function.Predicate;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 
 final class _Asserts {
@@ -31,7 +31,7 @@ final class _Asserts {
         return new Predicate<ApplicationFeatureId>() {
             @Override
             public boolean test(final ApplicationFeatureId input) {
-                if(input.getType() != ApplicationFeatureType.TYPE) {
+                if(input.getSort() != ApplicationFeatureSort.TYPE) {
                     return false;
                 }
                 final ApplicationFeature feature = applicationFeatures.findFeature(input);
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 99a8743..bfca014 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
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.services.appfeat;
 import java.util.function.Predicate;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 
 final class _Predicates {
@@ -31,7 +31,7 @@ final class _Predicates {
         return new Predicate<ApplicationFeatureId>() {
             @Override
             public boolean test(final ApplicationFeatureId input) {
-                if(input.getType() != ApplicationFeatureType.TYPE) {
+                if(input.getSort() != ApplicationFeatureSort.TYPE) {
                     return false;
                 }
                 final ApplicationFeature feature = applicationFeatures.findFeature(input);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 2969b3a..f64e9b1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -32,7 +32,7 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.commanddto.processor.CommandDtoProcessor;
 import org.apache.isis.applib.services.grid.GridService;
@@ -212,7 +212,7 @@ public class MetaModelServiceDefault implements MetaModelService {
     @Override
     public CommandDtoProcessor commandDtoProcessorFor(final String memberIdentifier) {
         final ApplicationFeatureId featureId = ApplicationFeatureId
-                .newFeature(ApplicationFeatureType.MEMBER, memberIdentifier);
+                .newFeature(ApplicationFeatureSort.MEMBER, memberIdentifier);
 
         final String logicalTypeName = featureId.getLogicalTypeName();
         if(_Strings.isNullOrEmpty(logicalTypeName)) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
index 2026089..32d156f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -39,7 +39,7 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.id.LogicalType;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.metamodel.BeanSort;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.commons.collections.Can;
@@ -226,7 +226,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
         
         //XXX[ISIS-2403] these classes only get discovered by validators, so just preload their specs
         // (an optimization, not strictly required)
-        loadSpecifications(ApplicationFeatureType.class/*, ...*/);
+        loadSpecifications(ApplicationFeatureSort.class/*, ...*/);
 
         log.info(" - adding types from ValueTypeProviders");
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureIdTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureIdTest.java
index 53a89fb..1d76bdc 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureIdTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureIdTest.java
@@ -39,11 +39,13 @@ import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.lessThan;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.core.internaltestsupport.contract.ValueTypeContractTestAbstract;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
 
+import lombok.val;
+
 public class ApplicationFeatureIdTest {
 
     @Rule
@@ -56,7 +58,7 @@ public class ApplicationFeatureIdTest {
 
         @Test
         public void happyCase() throws Exception {
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar#foo");
+            val applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar#foo");
 
             assertThat(applicationFeatureId.title(), is("com.mycompany.Bar#foo"));
         }
@@ -67,9 +69,9 @@ public class ApplicationFeatureIdTest {
         @Test
         public void testNewPackage() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newNamespace("com.mycompany");
+            val applicationFeatureId = ApplicationFeatureId.newNamespace("com.mycompany");
             // then
-            assertThat(applicationFeatureId.getType(), is(ApplicationFeatureType.NAMESPACE));
+            assertThat(applicationFeatureId.getSort(), is(ApplicationFeatureSort.NAMESPACE));
             assertThat(applicationFeatureId.getNamespace(), is("com.mycompany"));
             assertThat(applicationFeatureId.getTypeSimpleName(), is(nullValue()));
             assertThat(applicationFeatureId.getMemberName(), is(nullValue()));
@@ -81,9 +83,9 @@ public class ApplicationFeatureIdTest {
         @Test
         public void testNewClass() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
+            val applicationFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
             // then
-            assertThat(applicationFeatureId.getType(), is(ApplicationFeatureType.TYPE));
+            assertThat(applicationFeatureId.getSort(), is(ApplicationFeatureSort.TYPE));
             assertThat(applicationFeatureId.getNamespace(), is("com.mycompany"));
             assertThat(applicationFeatureId.getTypeSimpleName(), is("Bar"));
             assertThat(applicationFeatureId.getMemberName(), is(nullValue()));
@@ -95,9 +97,9 @@ public class ApplicationFeatureIdTest {
         @Test
         public void using_fullyQualifiedClassName_and_MemberName() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
+            val applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
             // then
-            assertThat(applicationFeatureId.getType(), is(ApplicationFeatureType.MEMBER));
+            assertThat(applicationFeatureId.getSort(), is(ApplicationFeatureSort.MEMBER));
             assertThat(applicationFeatureId.getNamespace(), is("com.mycompany"));
             assertThat(applicationFeatureId.getTypeSimpleName(), is("Bar"));
             assertThat(applicationFeatureId.getMemberName(), is("foo"));
@@ -106,9 +108,9 @@ public class ApplicationFeatureIdTest {
         @Test
         public void using_fullyQualifiedName() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar#foo");
+            val applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar#foo");
             // then
-            assertThat(applicationFeatureId.getType(), is(ApplicationFeatureType.MEMBER));
+            assertThat(applicationFeatureId.getSort(), is(ApplicationFeatureSort.MEMBER));
             assertThat(applicationFeatureId.getNamespace(), is("com.mycompany"));
             assertThat(applicationFeatureId.getTypeSimpleName(), is("Bar"));
             assertThat(applicationFeatureId.getMemberName(), is("foo"));
@@ -121,7 +123,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenPackage() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = new ApplicationFeatureId(ApplicationFeatureType.NAMESPACE, "com.mycompany");
+            val applicationFeatureId = new ApplicationFeatureId(ApplicationFeatureSort.NAMESPACE, "com.mycompany");
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newNamespace("com.mycompany")));
         }
@@ -129,7 +131,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenClass() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = new ApplicationFeatureId(ApplicationFeatureType.TYPE, "com.mycompany.Bar");
+            val applicationFeatureId = new ApplicationFeatureId(ApplicationFeatureSort.TYPE, "com.mycompany.Bar");
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newType("com.mycompany.Bar")));
         }
@@ -137,7 +139,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenMember() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = new ApplicationFeatureId(ApplicationFeatureType.MEMBER, "com.mycompany.Bar#foo");
+            val applicationFeatureId = new ApplicationFeatureId(ApplicationFeatureSort.MEMBER, "com.mycompany.Bar#foo");
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newMember("com.mycompany.Bar","foo")));
         }
@@ -148,7 +150,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenPackage() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newFeature(ApplicationFeatureType.NAMESPACE, "com.mycompany");
+            val applicationFeatureId = ApplicationFeatureId.newFeature(ApplicationFeatureSort.NAMESPACE, "com.mycompany");
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newNamespace("com.mycompany")));
         }
@@ -156,7 +158,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenClass() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newFeature(ApplicationFeatureType.TYPE, "com.mycompany.Bar");
+            val applicationFeatureId = ApplicationFeatureId.newFeature(ApplicationFeatureSort.TYPE, "com.mycompany.Bar");
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newType("com.mycompany.Bar")));
         }
@@ -164,7 +166,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenMember() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newFeature(ApplicationFeatureType.MEMBER, "com.mycompany.Bar#foo");
+            val applicationFeatureId = ApplicationFeatureId.newFeature(ApplicationFeatureSort.MEMBER, "com.mycompany.Bar#foo");
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newMember("com.mycompany.Bar","foo")));
         }
@@ -175,7 +177,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenPackage() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newFeature("com.mycompany", null, null);
+            val applicationFeatureId = ApplicationFeatureId.newFeature("com.mycompany", null, null);
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newNamespace("com.mycompany")));
         }
@@ -183,7 +185,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenClass() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newFeature("com.mycompany", "Bar", null);
+            val applicationFeatureId = ApplicationFeatureId.newFeature("com.mycompany", "Bar", null);
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newType("com.mycompany.Bar")));
         }
@@ -191,7 +193,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void whenMember() throws Exception {
             // when
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newFeature("com.mycompany", "Bar", "foo");
+            val applicationFeatureId = ApplicationFeatureId.newFeature("com.mycompany", "Bar", "foo");
             // then
             assertThat(applicationFeatureId, is(ApplicationFeatureId.newMember("com.mycompany.Bar","foo")));
         }
@@ -203,7 +205,7 @@ public class ApplicationFeatureIdTest {
         public void whenPackageWithNoParent() throws Exception {
 
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newNamespace("com");
+            val applicationFeatureId = ApplicationFeatureId.newNamespace("com");
 
             // when
             final List<ApplicationFeatureId> parentIds = applicationFeatureId.getParentIds();
@@ -216,7 +218,7 @@ public class ApplicationFeatureIdTest {
         public void whenPackageWithHasParent() throws Exception {
 
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newNamespace("com.mycompany");
+            val applicationFeatureId = ApplicationFeatureId.newNamespace("com.mycompany");
 
             // when
             final List<ApplicationFeatureId> parentIds = applicationFeatureId.getParentIds();
@@ -229,7 +231,7 @@ public class ApplicationFeatureIdTest {
         public void whenPackageWithHasParents() throws Exception {
 
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newNamespace("com.mycompany.bish.bosh");
+            val applicationFeatureId = ApplicationFeatureId.newNamespace("com.mycompany.bish.bosh");
 
             // when
             final List<ApplicationFeatureId> parentIds = applicationFeatureId.getParentIds();
@@ -246,7 +248,7 @@ public class ApplicationFeatureIdTest {
         public void whenClassWithParents() throws Exception {
 
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
+            val applicationFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
 
             // when
             final List<ApplicationFeatureId> parentIds = applicationFeatureId.getParentIds();
@@ -262,7 +264,7 @@ public class ApplicationFeatureIdTest {
         public void whenMember() throws Exception {
 
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
+            val applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
 
             // when
             final List<ApplicationFeatureId> parentIds = applicationFeatureId.getParentIds();
@@ -282,11 +284,11 @@ public class ApplicationFeatureIdTest {
         @Test
         public void givenPackageWhenParentIsNotRoot() throws Exception {
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newNamespace("com.mycompany");
+            val applicationFeatureId = ApplicationFeatureId.newNamespace("com.mycompany");
             // when
-            final ApplicationFeatureId parentPackageId = applicationFeatureId.getParentPackageId();
+            val parentPackageId = applicationFeatureId.getParentPackageId();
             // then
-            assertThat(parentPackageId.getType(), is(ApplicationFeatureType.NAMESPACE));
+            assertThat(parentPackageId.getSort(), is(ApplicationFeatureSort.NAMESPACE));
             assertThat(parentPackageId.getNamespace(), is("com"));
             assertThat(parentPackageId.getTypeSimpleName(), is(nullValue()));
             assertThat(parentPackageId.getMemberName(), is(nullValue()));
@@ -295,9 +297,9 @@ public class ApplicationFeatureIdTest {
         @Test
         public void givenPackageWhenParentIsRoot() throws Exception {
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newNamespace("com");
+            val applicationFeatureId = ApplicationFeatureId.newNamespace("com");
             // when
-            final ApplicationFeatureId parentPackageId = applicationFeatureId.getParentPackageId();
+            val parentPackageId = applicationFeatureId.getParentPackageId();
             // then
             assertThat(parentPackageId, is(nullValue()));
         }
@@ -305,9 +307,9 @@ public class ApplicationFeatureIdTest {
         @Test
         public void givenRootPackage() throws Exception {
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newNamespace("");
+            val applicationFeatureId = ApplicationFeatureId.newNamespace("");
             // when
-            final ApplicationFeatureId parentPackageId = applicationFeatureId.getParentPackageId();
+            val parentPackageId = applicationFeatureId.getParentPackageId();
             // then
             assertThat(parentPackageId, is(nullValue()));
         }
@@ -315,13 +317,13 @@ public class ApplicationFeatureIdTest {
         @Test
         public void givenClass() throws Exception {
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
+            val applicationFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
 
             // when
-            final ApplicationFeatureId parentPackageId = applicationFeatureId.getParentPackageId();
+            val parentPackageId = applicationFeatureId.getParentPackageId();
 
             // then
-            assertThat(parentPackageId.getType(), is(ApplicationFeatureType.NAMESPACE));
+            assertThat(parentPackageId.getSort(), is(ApplicationFeatureSort.NAMESPACE));
             assertThat(parentPackageId.getNamespace(), is("com.mycompany"));
             assertThat(parentPackageId.getTypeSimpleName(), is(nullValue()));
             assertThat(parentPackageId.getMemberName(), is(nullValue()));
@@ -330,13 +332,13 @@ public class ApplicationFeatureIdTest {
         @Test
         public void givenClassInRootPackage() throws Exception {
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newType("Bar");
+            val applicationFeatureId = ApplicationFeatureId.newType("Bar");
 
             // when
-            final ApplicationFeatureId parentPackageId = applicationFeatureId.getParentPackageId();
+            val parentPackageId = applicationFeatureId.getParentPackageId();
 
             // then
-            assertThat(parentPackageId.getType(), is(ApplicationFeatureType.NAMESPACE));
+            assertThat(parentPackageId.getSort(), is(ApplicationFeatureSort.NAMESPACE));
             assertThat(parentPackageId.getNamespace(), is(""));
             assertThat(parentPackageId.getTypeSimpleName(), is(nullValue()));
             assertThat(parentPackageId.getMemberName(), is(nullValue()));
@@ -346,7 +348,7 @@ public class ApplicationFeatureIdTest {
         public void givenMember() throws Exception {
 
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
+            val applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
 
             // then
             expectedException.expect(IllegalStateException.class);
@@ -362,13 +364,13 @@ public class ApplicationFeatureIdTest {
         @Test
         public void givenMember() throws Exception {
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
+            val applicationFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
 
             // when
-            final ApplicationFeatureId parentClassId = applicationFeatureId.getParentClassId();
+            val parentClassId = applicationFeatureId.getParentClassId();
 
             // then
-            assertThat(parentClassId.getType(), is(ApplicationFeatureType.TYPE));
+            assertThat(parentClassId.getSort(), is(ApplicationFeatureSort.TYPE));
             assertThat(parentClassId.getNamespace(), is("com.mycompany"));
             assertThat(parentClassId.getTypeSimpleName(), is("Bar"));
             assertThat(parentClassId.getMemberName(), is(nullValue()));
@@ -377,7 +379,7 @@ public class ApplicationFeatureIdTest {
         @Test
         public void givenPackage() throws Exception {
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newNamespace("com");
+            val applicationFeatureId = ApplicationFeatureId.newNamespace("com");
 
             // then
             expectedException.expect(IllegalStateException.class);
@@ -390,7 +392,7 @@ public class ApplicationFeatureIdTest {
         public void givenClass() throws Exception {
 
             // given
-            final ApplicationFeatureId applicationFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
+            val applicationFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
 
             // then
             expectedException.expect(IllegalStateException.class);
@@ -466,22 +468,25 @@ public class ApplicationFeatureIdTest {
         public void members() throws Exception {
             feature1 = ApplicationFeatureId.newMember("com.mycompany.Bar#b");
 
-            assertThat(feature1.toString(), is(equalTo("ApplicationFeatureId{type=MEMBER, "
-                    + "packageName=com.mycompany, className=Bar, memberName=b}")));
+            assertThat(feature1.toString(), 
+                    is(equalTo("ApplicationFeatureId{sort=MEMBER, "
+                    + "namespace=com.mycompany, typeSimpleName=Bar, memberName=b}")));
         }
 
         @Test
         public void classes() throws Exception {
             feature1 = ApplicationFeatureId.newType("com.mycompany.B");
 
-            assertThat(feature1.toString(), is(equalTo("ApplicationFeatureId{type=CLASS, packageName=com.mycompany, className=B}")));
+            assertThat(feature1.toString(), 
+                    is(equalTo("ApplicationFeatureId{sort=TYPE, namespace=com.mycompany, typeSimpleName=B}")));
         }
 
         @Test
         public void packages() throws Exception {
             feature1 = ApplicationFeatureId.newNamespace("com.b");
 
-            assertThat(feature1.toString(), is(equalTo("ApplicationFeatureId{type=PACKAGE, packageName=com.b}")));
+            assertThat(feature1.toString(), 
+                    is(equalTo("ApplicationFeatureId{sort=NAMESPACE, namespace=com.b}")));
         }
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureTypeTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureTypeTest.java
index 667368a..f30f90c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureTypeTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureTypeTest.java
@@ -27,7 +27,7 @@ import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 
 import lombok.val;
 
@@ -36,9 +36,9 @@ public class ApplicationFeatureTypeTest {
     public static class HideClassName extends ApplicationFeatureTypeTest {
         @Test
         public void all() throws Exception {
-            assertThat(ApplicationFeatureType.NAMESPACE.hideClassName(), is(true));
-            assertThat(ApplicationFeatureType.TYPE.hideClassName(), is(false));
-            assertThat(ApplicationFeatureType.MEMBER.hideClassName(), is(false));
+            assertThat(ApplicationFeatureSort.NAMESPACE.hideClassName(), is(true));
+            assertThat(ApplicationFeatureSort.TYPE.hideClassName(), is(false));
+            assertThat(ApplicationFeatureSort.MEMBER.hideClassName(), is(false));
         }
     }
 
@@ -46,9 +46,9 @@ public class ApplicationFeatureTypeTest {
 
         @Test
         public void all() throws Exception {
-            assertThat(ApplicationFeatureType.NAMESPACE.hideMember(), is(true));
-            assertThat(ApplicationFeatureType.TYPE.hideMember(), is(true));
-            assertThat(ApplicationFeatureType.MEMBER.hideMember(), is(false));
+            assertThat(ApplicationFeatureSort.NAMESPACE.hideMember(), is(true));
+            assertThat(ApplicationFeatureSort.TYPE.hideMember(), is(true));
+            assertThat(ApplicationFeatureSort.MEMBER.hideMember(), is(false));
         }
     }
 
@@ -102,17 +102,17 @@ public class ApplicationFeatureTypeTest {
 
         @Test
         public void whenPackage() throws Exception {
-            ApplicationFeatureType.ensurePackage(new ApplicationFeatureId(ApplicationFeatureType.NAMESPACE, "xxx"));
+            ApplicationFeatureSort.ensurePackage(new ApplicationFeatureId(ApplicationFeatureSort.NAMESPACE, "xxx"));
         }
         @Test
         public void whenClass() throws Exception {
             expectedException.expect(IllegalStateException.class);
-            ApplicationFeatureType.ensurePackage(new ApplicationFeatureId(ApplicationFeatureType.TYPE, "xxx"));
+            ApplicationFeatureSort.ensurePackage(new ApplicationFeatureId(ApplicationFeatureSort.TYPE, "xxx"));
         }
         @Test
         public void whenMember() throws Exception {
             expectedException.expect(IllegalStateException.class);
-            ApplicationFeatureType.ensurePackage(new ApplicationFeatureId(ApplicationFeatureType.MEMBER, "xxx#x"));
+            ApplicationFeatureSort.ensurePackage(new ApplicationFeatureId(ApplicationFeatureSort.MEMBER, "xxx#x"));
         }
     }
 
@@ -123,16 +123,16 @@ public class ApplicationFeatureTypeTest {
 
         @Test
         public void whenPackage() throws Exception {
-            ApplicationFeatureType.ensurePackageOrClass(new ApplicationFeatureId(ApplicationFeatureType.NAMESPACE, "xxx"));
+            ApplicationFeatureSort.ensurePackageOrClass(new ApplicationFeatureId(ApplicationFeatureSort.NAMESPACE, "xxx"));
         }
         @Test
         public void whenClass() throws Exception {
-            ApplicationFeatureType.ensurePackageOrClass(new ApplicationFeatureId(ApplicationFeatureType.TYPE, "xxx"));
+            ApplicationFeatureSort.ensurePackageOrClass(new ApplicationFeatureId(ApplicationFeatureSort.TYPE, "xxx"));
         }
         @Test
         public void whenMember() throws Exception {
             expectedException.expect(IllegalStateException.class);
-            ApplicationFeatureType.ensurePackageOrClass(new ApplicationFeatureId(ApplicationFeatureType.MEMBER, "xxx#x"));
+            ApplicationFeatureSort.ensurePackageOrClass(new ApplicationFeatureId(ApplicationFeatureSort.MEMBER, "xxx#x"));
         }
 
     }
@@ -144,16 +144,16 @@ public class ApplicationFeatureTypeTest {
         @Test
         public void whenPackage() throws Exception {
             expectedException.expect(IllegalStateException.class);
-            ApplicationFeatureType.ensureClass(new ApplicationFeatureId(ApplicationFeatureType.NAMESPACE, "xxx"));
+            ApplicationFeatureSort.ensureClass(new ApplicationFeatureId(ApplicationFeatureSort.NAMESPACE, "xxx"));
         }
         @Test
         public void whenClass() throws Exception {
-            ApplicationFeatureType.ensureClass(new ApplicationFeatureId(ApplicationFeatureType.TYPE, "xxx"));
+            ApplicationFeatureSort.ensureClass(new ApplicationFeatureId(ApplicationFeatureSort.TYPE, "xxx"));
         }
         @Test
         public void whenMember() throws Exception {
             expectedException.expect(IllegalStateException.class);
-            ApplicationFeatureType.ensureClass(new ApplicationFeatureId(ApplicationFeatureType.MEMBER, "xxx#x"));
+            ApplicationFeatureSort.ensureClass(new ApplicationFeatureId(ApplicationFeatureSort.MEMBER, "xxx#x"));
         }
 
     }
@@ -165,16 +165,16 @@ public class ApplicationFeatureTypeTest {
         @Test
         public void whenPackage() throws Exception {
             expectedException.expect(IllegalStateException.class);
-            ApplicationFeatureType.ensureMember(new ApplicationFeatureId(ApplicationFeatureType.NAMESPACE, "xxx"));
+            ApplicationFeatureSort.ensureMember(new ApplicationFeatureId(ApplicationFeatureSort.NAMESPACE, "xxx"));
         }
         @Test
         public void whenClass() throws Exception {
             expectedException.expect(IllegalStateException.class);
-            ApplicationFeatureType.ensureMember(new ApplicationFeatureId(ApplicationFeatureType.TYPE, "xxx"));
+            ApplicationFeatureSort.ensureMember(new ApplicationFeatureId(ApplicationFeatureSort.TYPE, "xxx"));
         }
         @Test
         public void whenMember() throws Exception {
-            ApplicationFeatureType.ensureMember(new ApplicationFeatureId(ApplicationFeatureType.MEMBER, "xxx#x"));
+            ApplicationFeatureSort.ensureMember(new ApplicationFeatureId(ApplicationFeatureSort.MEMBER, "xxx#x"));
         }
     }
 
@@ -182,7 +182,7 @@ public class ApplicationFeatureTypeTest {
 
         @Test
         public void happyCase() throws Exception {
-            assertThat(ApplicationFeatureType.NAMESPACE.toString(), is("PACKAGE"));
+            assertThat(ApplicationFeatureSort.NAMESPACE.toString(), is("NAMESPACE"));
         }
     }
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
index c3b5ad7..1516199 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
@@ -27,7 +27,7 @@ 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.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
@@ -100,7 +100,7 @@ public interface ApplicationPermission {
         createFeatureId()
         .ifPresent(featureId->{
 
-            switch (featureId.getType()) {
+            switch (featureId.getSort()) {
             case NAMESPACE:
                 buf.append(getFeatureFqn());              // com.mycompany
                 break;
@@ -124,7 +124,7 @@ public interface ApplicationPermission {
         return buf.toString();
     }
 
-    ApplicationFeatureType getFeatureType();
+    ApplicationFeatureSort getFeatureType();
 
     // -- ROLE
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRepository.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRepository.java
index 8af8ea8..9110834 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRepository.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRepository.java
@@ -22,7 +22,7 @@ import java.util.Collection;
 import java.util.Optional;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.extensions.secman.api.role.ApplicationRole;
 
 /**
@@ -35,7 +35,7 @@ public interface ApplicationPermissionRepository<P extends ApplicationPermission
     Optional<P> findByRoleAndRuleAndFeature(
             ApplicationRole holder,
             ApplicationPermissionRule rule,
-            ApplicationFeatureType type,
+            ApplicationFeatureSort type,
             String featureFqn);
 
     Collection<P> allPermissions();
@@ -45,7 +45,7 @@ public interface ApplicationPermissionRepository<P extends ApplicationPermission
     Collection<P> findByRoleAndRuleAndFeatureTypeCached(
             ApplicationRole holder,
             ApplicationPermissionRule rule,
-            ApplicationFeatureType type);
+            ApplicationFeatureSort type);
 
 
     /**
@@ -65,7 +65,7 @@ public interface ApplicationPermissionRepository<P extends ApplicationPermission
             ApplicationRole role,
             ApplicationPermissionRule rule,
             ApplicationPermissionMode mode,
-            ApplicationFeatureType featureType,
+            ApplicationFeatureSort featureType,
             String featureFqn);
 
     P newPermission(
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/feature/ApplicationFeatureViewModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/feature/ApplicationFeatureViewModel.java
index 0f1b372..c0a100a 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/feature/ApplicationFeatureViewModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/feature/ApplicationFeatureViewModel.java
@@ -34,7 +34,7 @@ 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.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.util.Equality;
 import org.apache.isis.applib.util.Hashing;
@@ -80,7 +80,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
     private static Class<? extends ApplicationFeatureViewModel> viewModelClassFor(
             final ApplicationFeatureId featureId,
             final ApplicationFeatureRepositoryDefault applicationFeatureRepository) {
-        switch (featureId.getType()) {
+        switch (featureId.getSort()) {
         case NAMESPACE:
             return ApplicationPackage.class;
         case TYPE:
@@ -166,8 +166,8 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
 
     // -- type (programmatic)
     @Programmatic
-    public ApplicationFeatureType getType() {
-        return getFeatureId().getType();
+    public ApplicationFeatureSort getType() {
+        return getFeatureId().getSort();
     }
 
     // -- packageName
@@ -236,7 +236,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
     @MemberOrder(name = "Parent", sequence = "2.6")
     public ApplicationFeatureViewModel getParent() {
         final ApplicationFeatureId parentId;
-        parentId = getType() == ApplicationFeatureType.MEMBER
+        parentId = getType() == ApplicationFeatureSort.MEMBER
                 ? getFeatureId().getParentClassId()
                 : getFeatureId().getParentPackageId();
         if(parentId == null) {
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/feature/ApplicationPackage.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/feature/ApplicationPackage.java
index a08ccf1..fd32549 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/feature/ApplicationPackage.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/feature/ApplicationPackage.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 
 @DomainObject(
         objectType = "isis.ext.secman.ApplicationPackage"
@@ -69,7 +69,7 @@ public class ApplicationPackage extends ApplicationFeatureViewModel {
         return asViewModels(contents);
     }
     public boolean hideContents() {
-        return getType() != ApplicationFeatureType.NAMESPACE;
+        return getType() != ApplicationFeatureSort.NAMESPACE;
     }
 
 
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/UserPermissionViewModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/UserPermissionViewModel.java
index 359f8df..9b5e25f 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/UserPermissionViewModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/UserPermissionViewModel.java
@@ -38,7 +38,7 @@ 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.ApplicationFeatureType;
+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;
@@ -149,18 +149,18 @@ public class UserPermissionViewModel implements ViewModel {
         username, 
         
         viewingEvaluationGranted,
-        viewingEvaluationCauseFeatureId != null? viewingEvaluationCauseFeatureId.getType(): "",
+        viewingEvaluationCauseFeatureId != null? viewingEvaluationCauseFeatureId.getSort(): "",
         viewingEvaluationCauseFeatureId != null? viewingEvaluationCauseFeatureId.getFullyQualifiedName(): "",
         viewingEvaluationCause != null? viewingEvaluationCause.getRule(): "",
         viewingEvaluationCause != null? viewingEvaluationCause.getMode(): "",
         
         changingEvaluationGranted,
-        changingEvaluationCauseFeatureId != null? changingEvaluationCauseFeatureId.getType(): "",
+        changingEvaluationCauseFeatureId != null? changingEvaluationCauseFeatureId.getSort(): "",
         changingEvaluationCauseFeatureId != null? changingEvaluationCauseFeatureId.getFullyQualifiedName(): "",
         changingEvaluationCause != null? changingEvaluationCause.getRule(): "",
         changingEvaluationCause != null? changingEvaluationCause.getMode(): "",
         
-        featureId.getType(), 
+        featureId.getSort(), 
         featureId.getFullyQualifiedName()
         );
     }
@@ -184,7 +184,7 @@ public class UserPermissionViewModel implements ViewModel {
 
         this.viewingGranted = Boolean.valueOf(iterator.next());
         final String viewingEvaluationCauseFeatureIdType = iterator.next();
-        final ApplicationFeatureType viewingEvaluationFeatureIdType =  !viewingEvaluationCauseFeatureIdType.isEmpty() ? ApplicationFeatureType.valueOf(viewingEvaluationCauseFeatureIdType) : null;
+        final ApplicationFeatureSort viewingEvaluationFeatureIdType =  !viewingEvaluationCauseFeatureIdType.isEmpty() ? ApplicationFeatureSort.valueOf(viewingEvaluationCauseFeatureIdType) : null;
         final String viewingEvaluationFeatureFqn = iterator.next();
         this.viewingFeatureId = viewingEvaluationFeatureIdType != null? new ApplicationFeatureId(viewingEvaluationFeatureIdType,viewingEvaluationFeatureFqn) : null;
 
@@ -196,7 +196,7 @@ public class UserPermissionViewModel implements ViewModel {
 
         this.changingGranted = Boolean.valueOf(iterator.next());
         final String changingEvaluationCauseFeatureIdType = iterator.next();
-        final ApplicationFeatureType changingEvaluationFeatureIdType =  !changingEvaluationCauseFeatureIdType.isEmpty() ? ApplicationFeatureType.valueOf(changingEvaluationCauseFeatureIdType) : null;
+        final ApplicationFeatureSort changingEvaluationFeatureIdType =  !changingEvaluationCauseFeatureIdType.isEmpty() ? ApplicationFeatureSort.valueOf(changingEvaluationCauseFeatureIdType) : null;
         final String changingEvaluationFeatureFqn = iterator.next();
         this.changingFeatureId = changingEvaluationFeatureIdType != null? new ApplicationFeatureId(changingEvaluationFeatureIdType,changingEvaluationFeatureFqn) : null;
 
@@ -205,7 +205,7 @@ public class UserPermissionViewModel implements ViewModel {
         final String changingEvaluationCauseMode = iterator.next();
         this.changingMode = !changingEvaluationCauseMode.isEmpty()? ApplicationPermissionMode.valueOf(changingEvaluationCauseMode): null;
 
-        final ApplicationFeatureType type = ApplicationFeatureType.valueOf(iterator.next());
+        final ApplicationFeatureSort type = ApplicationFeatureSort.valueOf(iterator.next());
         this.featureId = new ApplicationFeatureId(type, iterator.next());
     }
 
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
index c084589..84d057c 100644
--- 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
@@ -25,7 +25,7 @@ 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.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
@@ -51,7 +51,7 @@ public class ApplicationRole_addAction {
     /**
      * Adds a {@link ApplicationPermission permission} for this role to a
      * {@link ApplicationMemberType#ACTION action}
-     * {@link ApplicationFeatureType#MEMBER member}
+     * {@link ApplicationFeatureSort#MEMBER member}
      * {@link ApplicationFeature feature}.
      */
     @MemberOrder(sequence = "3")
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addClass.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addClass.java
index 6208fa0..e597c45 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addClass.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addClass.java
@@ -24,7 +24,7 @@ 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.ApplicationFeatureType;
+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;
@@ -47,7 +47,7 @@ public class ApplicationRole_addClass {
 
     /**
      * Adds a {@link ApplicationPermission permission} for this role to a
-     * {@link ApplicationFeatureType#MEMBER member}
+     * {@link ApplicationFeatureSort#MEMBER member}
      * {@link ApplicationFeature feature}.
      */
     @MemberOrder(sequence = "1")
@@ -62,7 +62,7 @@ public class ApplicationRole_addClass {
             final String className) {
         
         applicationPermissionRepository.newPermission(
-                holder, rule, mode, ApplicationFeatureType.TYPE,
+                holder, rule, mode, ApplicationFeatureSort.TYPE,
                 packageFqn + "." + className);
         
         return holder;
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
index d83db09..7555650 100644
--- 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
@@ -27,7 +27,7 @@ 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.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
@@ -54,7 +54,7 @@ public class ApplicationRole_addCollection {
     /**
      * Adds a {@link ApplicationPermission permission} for this role to a
      * {@link ApplicationMemberType#COLLECTION collection}
-     * {@link ApplicationFeatureType#MEMBER member}
+     * {@link ApplicationFeatureSort#MEMBER member}
      * {@link ApplicationFeature feature}.
      */
     @MemberOrder(sequence = "5")
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addPackage.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addPackage.java
index 3e38695..5bd8e21 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addPackage.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addPackage.java
@@ -25,7 +25,7 @@ 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.ApplicationFeatureType;
+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;
@@ -50,7 +50,7 @@ public class ApplicationRole_addPackage {
     /**
      * Adds a {@link ApplicationPermission permission}
      * for this role to a
-     * {@link ApplicationFeatureType#NAMESPACE package}
+     * {@link ApplicationFeatureSort#NAMESPACE package}
      * {@link ApplicationFeature feature}.
      */
     @MemberOrder(sequence = "1")
@@ -63,7 +63,7 @@ public class ApplicationRole_addPackage {
             final String packageFqn) {
         
         applicationPermissionRepository
-            .newPermission(holder, rule, mode, ApplicationFeatureType.NAMESPACE, packageFqn);
+            .newPermission(holder, rule, mode, ApplicationFeatureSort.NAMESPACE, packageFqn);
         return holder;
     }
 
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
index 7da2f1e..0045027 100644
--- 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
@@ -27,7 +27,7 @@ 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.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
@@ -55,7 +55,7 @@ public class ApplicationRole_addProperty {
     /**
      * Adds a {@link ApplicationPermission permission} for this role to a
      * {@link ApplicationMemberType#PROPERTY property}
-     * {@link ApplicationFeatureType#MEMBER member}
+     * {@link ApplicationFeatureSort#MEMBER member}
      * {@link ApplicationFeature feature}.
      */
     @MemberOrder(sequence = "4")
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_removePermission.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_removePermission.java
index c10f763..c801036 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_removePermission.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_removePermission.java
@@ -24,7 +24,7 @@ import javax.enterprise.inject.Model;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.ParameterLayout;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
@@ -58,7 +58,7 @@ public class ApplicationRole_removePermission {
             @ParameterLayout(named="Rule")
             final ApplicationPermissionRule rule,
             @ParameterLayout(named="Type")
-            final ApplicationFeatureType type,
+            final ApplicationFeatureSort type,
             @ParameterLayout(named="Feature", typicalLength=ApplicationFeature.TYPICAL_LENGTH_MEMBER_NAME)
             final String featureFqn) {
         
@@ -76,7 +76,7 @@ public class ApplicationRole_removePermission {
             @ParameterLayout(named="Rule")
             final ApplicationPermissionRule rule,
             @ParameterLayout(named="Type")
-            final ApplicationFeatureType type,
+            final ApplicationFeatureSort type,
             @ParameterLayout(named="Feature", typicalLength=ApplicationFeature.TYPICAL_LENGTH_MEMBER_NAME)
             final String featureFqn) {
         if(applicationRoleRepository.isAdminRole(target) 
@@ -92,14 +92,14 @@ public class ApplicationRole_removePermission {
     }
     
     @Model
-    public ApplicationFeatureType default1Act() {
-        return ApplicationFeatureType.NAMESPACE;
+    public ApplicationFeatureSort default1Act() {
+        return ApplicationFeatureSort.NAMESPACE;
     }
 
     @Model
     public Collection<String> choices2Act(
             final ApplicationPermissionRule rule,
-            final ApplicationFeatureType type) {
+            final ApplicationFeatureSort type) {
         
         final Collection<? extends ApplicationPermission> permissions = applicationPermissionRepository
                 .findByRoleAndRuleAndFeatureTypeCached(target, rule, type);
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 d622e7f..461a685 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
@@ -38,7 +38,7 @@ 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.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
@@ -181,7 +181,7 @@ public class ApplicationPermission implements org.apache.isis.extensions.secman.
             )
     @PropertyLayout(typicalLength=ApplicationPermission.TYPICAL_LENGTH_TYPE)
     public String getType() {
-        final Enum<?> e = getFeatureType() != ApplicationFeatureType.MEMBER 
+        final Enum<?> e = getFeatureType() != ApplicationFeatureSort.MEMBER 
                 ? getFeatureType() 
                 : getMemberType().orElse(null);
         return e != null ? e.name(): null;
@@ -209,11 +209,11 @@ public class ApplicationPermission implements org.apache.isis.extensions.secman.
      */
     @javax.jdo.annotations.Column(allowsNull="false")
     @Setter
-    private ApplicationFeatureType featureType;
+    private ApplicationFeatureSort featureType;
 
     @Override
     @Programmatic
-    public ApplicationFeatureType getFeatureType() {
+    public ApplicationFeatureSort getFeatureType() {
         return featureType;
     }
 
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 444439d..f988e41 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
@@ -31,7 +31,7 @@ import org.springframework.stereotype.Repository;
 
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.message.MessageService;
@@ -150,7 +150,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     public Collection<ApplicationPermission> findByRoleAndRuleAndFeatureTypeCached(
             org.apache.isis.extensions.secman.api.role.ApplicationRole role,
             ApplicationPermissionRule rule,
-            ApplicationFeatureType type) {
+            ApplicationFeatureSort type) {
         return queryResultsCacheProvider.get().execute(this::findByRoleAndRuleAndFeatureType, 
                 ApplicationPermissionRepository.class, "findByRoleAndRuleAndFeatureTypeCached", 
                 role, rule, type);
@@ -159,7 +159,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     public Collection<ApplicationPermission> findByRoleAndRuleAndFeatureType(
             org.apache.isis.extensions.secman.api.role.ApplicationRole role, 
             final ApplicationPermissionRule rule,
-            final ApplicationFeatureType type) {
+            final ApplicationFeatureSort type) {
         return repository.allMatches(Query.named(
                         ApplicationPermission.class, "findByRoleAndRuleAndFeatureType")
                     .withParameter("role", role)
@@ -174,7 +174,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     public Optional<ApplicationPermission> findByRoleAndRuleAndFeatureCached(
             final org.apache.isis.extensions.secman.api.role.ApplicationRole role,
             final ApplicationPermissionRule rule,
-            final ApplicationFeatureType type,
+            final ApplicationFeatureSort type,
             final String featureFqn) {
         return queryResultsCacheProvider.get().execute(
                 this::findByRoleAndRuleAndFeature,
@@ -186,7 +186,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     public Optional<ApplicationPermission> findByRoleAndRuleAndFeature(
             final org.apache.isis.extensions.secman.api.role.ApplicationRole role,
             final ApplicationPermissionRule rule,
-            final ApplicationFeatureType type,
+            final ApplicationFeatureSort type,
             final String featureFqn) {
 
         return repository
@@ -212,7 +212,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
         return repository.allMatches(
                 Query.named(
                         ApplicationPermission.class, "findByFeature")
-                .withParameter("featureType", featureId.getType())
+                .withParameter("featureType", featureId.getSort())
                 .withParameter("featureFqn", featureId.getFullyQualifiedName()))
                 .stream()
                 .collect(_Sets.toUnmodifiableSorted());
@@ -225,7 +225,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             final org.apache.isis.extensions.secman.api.role.ApplicationRole genericRole,
             final ApplicationPermissionRule rule,
             final ApplicationPermissionMode mode,
-            final ApplicationFeatureType featureType,
+            final ApplicationFeatureSort featureType,
             final String featureFqn) {
 
         val role = _Casts.<ApplicationRole>uncheckedCast(genericRole);
@@ -243,7 +243,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             final ApplicationRole role,
             final ApplicationPermissionRule rule,
             final ApplicationPermissionMode mode,
-            final ApplicationFeatureType featureType,
+            final ApplicationFeatureSort featureType,
             final String featureFqn) {
 
         ApplicationPermission permission = findByRoleAndRuleAndFeature(role, rule, featureType, featureFqn)
@@ -282,7 +282,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             final ApplicationFeatureId featureId) {
 
         val role = _Casts.<ApplicationRole>uncheckedCast(genericRole);
-        val featureType = featureId.getType();
+        val featureType = featureId.getSort();
         val featureFqn = featureId.getFullyQualifiedName();
 
         val feature = featureRepository.findFeature(featureId);
@@ -327,7 +327,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
         val orphaned = _Lists.<ApplicationPermission>newArrayList();
 
         for (val permission : allPermissions()) {
-            final ApplicationFeatureType featureType = permission.getFeatureType();
+            final ApplicationFeatureSort featureType = permission.getFeatureType();
             final String featureFqn = permission.getFeatureFqn();
 
             switch (featureType) {
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
index 7de472d..9378d99 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -73,7 +73,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
             final ApplicationPermissionMode mode,
             final String... featureFqns) {
 
-        newPermissions(rule, mode, ApplicationFeatureType.NAMESPACE, Arrays.asList(featureFqns));
+        newPermissions(rule, mode, ApplicationFeatureSort.NAMESPACE, Arrays.asList(featureFqns));
     }
 
     /**
@@ -84,7 +84,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
             final ApplicationPermissionMode mode,
             final Class<?>... classes) {
 
-        newPermissions(rule, mode, ApplicationFeatureType.TYPE, asFeatureFqns(classes));
+        newPermissions(rule, mode, ApplicationFeatureSort.TYPE, asFeatureFqns(classes));
     }
 
 
@@ -96,7 +96,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
             final ApplicationPermissionMode mode,
             final Class<?> cls,
             final String... members) {
-        newPermissions(rule, mode, ApplicationFeatureType.MEMBER, asFeatureFqns(cls, members));
+        newPermissions(rule, mode, ApplicationFeatureSort.MEMBER, asFeatureFqns(cls, members));
     }
 
 
@@ -105,7 +105,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
     private void newPermissions(
             final ApplicationPermissionRule rule,
             final ApplicationPermissionMode mode,
-            final ApplicationFeatureType featureType,
+            final ApplicationFeatureSort featureType,
             final Iterable<String> featureFqns) {
 
         if(featureFqns == null) {
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 ab64170..88839ed 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
@@ -46,7 +46,7 @@ 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.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
@@ -197,7 +197,7 @@ implements
             )
     @PropertyLayout(typicalLength=ApplicationPermission.TYPICAL_LENGTH_TYPE)
     public String getType() {
-        final Enum<?> e = getFeatureType() != ApplicationFeatureType.MEMBER 
+        final Enum<?> e = getFeatureType() != ApplicationFeatureSort.MEMBER 
                 ? getFeatureType() 
                         : getMemberType().orElse(null);
         return e != null ? e.name(): null;
@@ -226,11 +226,11 @@ implements
     @Column(nullable=false)
     @Enumerated(EnumType.STRING)
     @Setter
-    private ApplicationFeatureType featureType;
+    private ApplicationFeatureSort featureType;
 
     @Override
     @Programmatic
-    public ApplicationFeatureType getFeatureType() {
+    public ApplicationFeatureSort getFeatureType() {
         return featureType;
     }
 
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 e2bf103..2033a66 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
@@ -32,7 +32,7 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.message.MessageService;
@@ -168,7 +168,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     public Collection<ApplicationPermission> findByRoleAndRuleAndFeatureTypeCached(
             org.apache.isis.extensions.secman.api.role.ApplicationRole role,
             ApplicationPermissionRule rule,
-            ApplicationFeatureType type) {
+            ApplicationFeatureSort type) {
         return queryResultsCacheProvider.get().execute(this::findByRoleAndRuleAndFeatureType, 
                 ApplicationPermissionRepository.class, "findByRoleAndRuleAndFeatureTypeCached", 
                 role, rule, type);
@@ -177,7 +177,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     public Collection<ApplicationPermission> findByRoleAndRuleAndFeatureType(
             org.apache.isis.extensions.secman.api.role.ApplicationRole role, 
             final ApplicationPermissionRule rule,
-            final ApplicationFeatureType type) {
+            final ApplicationFeatureSort type) {
         return repository.allMatches(Query.named(
                         ApplicationPermission.class, NamedQueryNames.PERMISSION_BY_ROLE_RULE_FEATURE)
                     .withParameter("role", role)
@@ -192,7 +192,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     public Optional<ApplicationPermission> findByRoleAndRuleAndFeatureCached(
             final org.apache.isis.extensions.secman.api.role.ApplicationRole role,
             final ApplicationPermissionRule rule,
-            final ApplicationFeatureType type,
+            final ApplicationFeatureSort type,
             final String featureFqn) {
         return queryResultsCacheProvider.get().execute(
                 this::findByRoleAndRuleAndFeature,
@@ -204,7 +204,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
     public Optional<ApplicationPermission> findByRoleAndRuleAndFeature(
             final org.apache.isis.extensions.secman.api.role.ApplicationRole role,
             final ApplicationPermissionRule rule,
-            final ApplicationFeatureType type,
+            final ApplicationFeatureSort type,
             final String featureFqn) {
 
         return repository
@@ -230,7 +230,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
         return repository.allMatches(
                 Query.named(
                         ApplicationPermission.class, NamedQueryNames.PERMISSION_BY_FEATURE)
-                .withParameter("featureType", featureId.getType())
+                .withParameter("featureType", featureId.getSort())
                 .withParameter("featureFqn", featureId.getFullyQualifiedName()))
                 .stream()
                 .collect(_Sets.toUnmodifiableSorted());
@@ -243,7 +243,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             final org.apache.isis.extensions.secman.api.role.ApplicationRole genericRole,
             final ApplicationPermissionRule rule,
             final ApplicationPermissionMode mode,
-            final ApplicationFeatureType featureType,
+            final ApplicationFeatureSort featureType,
             final String featureFqn) {
 
         val role = _Casts.<ApplicationRole>uncheckedCast(genericRole);
@@ -261,7 +261,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
             final ApplicationRole role,
             final ApplicationPermissionRule rule,
             final ApplicationPermissionMode mode,
-            final ApplicationFeatureType featureType,
+            final ApplicationFeatureSort featureType,
             final String featureFqn) {
 
         ApplicationPermission permission = findByRoleAndRuleAndFeature(role, rule, featureType, featureFqn)
@@ -301,7 +301,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
         
         val role = _Casts.<ApplicationRole>uncheckedCast(genericRole);
         
-        val featureType = featureId.getType();
+        val featureType = featureId.getSort();
         val featureFqn = featureId.getFullyQualifiedName();
 
         val feature = applicationFeatureRepository.findFeature(featureId);
@@ -347,7 +347,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
 
         val permissions = allPermissions();
         for (val permission : permissions) {
-            final ApplicationFeatureType featureType = permission.getFeatureType();
+            final ApplicationFeatureSort featureType = permission.getFeatureType();
             final String featureFqn = permission.getFeatureFqn();
 
             switch (featureType) {
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
index 20df788..e12c342 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
-import org.apache.isis.applib.services.appfeat.ApplicationFeatureType;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
@@ -69,7 +69,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
             final ApplicationPermissionMode mode,
             final String... featureFqns) {
 
-        newPermissions(rule, mode, ApplicationFeatureType.NAMESPACE, Arrays.asList(featureFqns));
+        newPermissions(rule, mode, ApplicationFeatureSort.NAMESPACE, Arrays.asList(featureFqns));
     }
 
     /**
@@ -80,7 +80,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
             final ApplicationPermissionMode mode,
             final Class<?>... classes) {
 
-        newPermissions(rule, mode, ApplicationFeatureType.TYPE, asFeatureFqns(classes));
+        newPermissions(rule, mode, ApplicationFeatureSort.TYPE, asFeatureFqns(classes));
     }
 
 
@@ -92,7 +92,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
             final ApplicationPermissionMode mode,
             final Class<?> cls,
             final String... members) {
-        newPermissions(rule, mode, ApplicationFeatureType.MEMBER, asFeatureFqns(cls, members));
+        newPermissions(rule, mode, ApplicationFeatureSort.MEMBER, asFeatureFqns(cls, members));
     }
 
 
@@ -103,7 +103,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
     private void newPermissions(
             final ApplicationPermissionRule rule,
             final ApplicationPermissionMode mode,
-            final ApplicationFeatureType featureType,
+            final ApplicationFeatureSort featureType,
             final Iterable<String> featureFqns) {
 
         if(featureFqns == null) {