You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/03/05 08:24:26 UTC
[isis] branch master updated: ISIS-2553: promotes
ApplicationFeature to applib (new interface)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 5ab396e ISIS-2553: promotes ApplicationFeature to applib (new interface)
5ab396e is described below
commit 5ab396e796417d5acba902fe8a1f2627437bfcbb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 5 09:24:13 2021 +0100
ISIS-2553: promotes ApplicationFeature to applib (new interface)
---
.../services/appfeat/ApplicationFeature.java | 68 ++++++++++++++++++++++
...Feature.java => ApplicationFeatureDefault.java} | 21 +++----
.../appfeat/ApplicationFeatureFactory.java | 3 +-
.../ApplicationFeatureRepositoryDefault.java | 20 ++-----
.../metamodel/services/appfeat/_Predicates.java | 1 +
.../valuetypes/ValueTypeProviderForBuiltin.java | 4 +-
.../services/appfeat/ApplicationFeatureIdTest.java | 1 +
.../ApplicationFeatureRepositoryDefaultTest.java | 33 +++++++----
.../services/appfeat/ApplicationFeatureTest.java | 56 +++++++++++-------
.../api/permission/ApplicationPermission.java | 2 +-
.../api/permission/ApplicationPermissionMode.java | 2 +-
.../api/permission/ApplicationPermissionRule.java | 2 +-
.../dom/feature/ApplicationFeatureViewModel.java | 2 +-
.../dom/feature/ApplicationFeatureViewModels.java | 4 +-
.../dom/role/ApplicationRole_addPermission.java | 2 +-
.../user/ApplicationUser_filterPermissions.java | 2 +-
.../dom/user/ApplicationUser_permissions.java | 2 +-
.../model/dom/user/UserPermissionViewModel.java | 2 +-
.../jdo/dom/permission/ApplicationPermission.java | 2 +-
.../ApplicationPermissionRepository.java | 2 +-
.../jpa/dom/permission/ApplicationPermission.java | 2 +-
.../ApplicationPermissionRepository.java | 2 +-
22 files changed, 157 insertions(+), 78 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
new file mode 100644
index 0000000..00fb2d4
--- /dev/null
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.applib.services.appfeat;
+
+import java.util.SortedSet;
+
+import org.apache.isis.applib.annotation.SemanticsOf;
+
+/**
+ *
+ * @since 1.x revised for 2.0 {@index}
+ */
+public interface ApplicationFeature {
+
+ ApplicationFeatureId getFeatureId();
+
+ default String getFullyQualifiedName() {
+ return getFeatureId().getFullyQualifiedName();
+ }
+
+ ApplicationMemberSort getMemberSort();
+
+ SortedSet<ApplicationFeatureId> membersOfSort(ApplicationMemberSort memberSort);
+
+ SortedSet<ApplicationFeatureId> getContents();
+
+ SortedSet<ApplicationFeatureId> getProperties();
+
+ SortedSet<ApplicationFeatureId> getCollections();
+
+ SortedSet<ApplicationFeatureId> getActions();
+
+ // -- TODO probably non formal API, only used by secman ...
+
+ String getReturnTypeName();
+
+ SemanticsOf getActionSemantics();
+
+ Boolean getDerived();
+
+ Integer getPropertyTypicalLength();
+
+ Integer getPropertyMaxLength();
+
+ // using same value for all to neaten up rendering
+ public static final int TYPICAL_LENGTH_PKG_FQN = 50;
+ public static final int TYPICAL_LENGTH_CLS_NAME = 50;
+ public static final int TYPICAL_LENGTH_MEMBER_NAME = 50;
+
+
+
+}
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/ApplicationFeatureDefault.java
similarity index 92%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeature.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
index d579487..75b430c 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/ApplicationFeatureDefault.java
@@ -23,6 +23,7 @@ import java.util.SortedSet;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
@@ -46,18 +47,14 @@ import lombok.Setter;
* </p>
*/
@Value
-public class ApplicationFeature implements Comparable<ApplicationFeature> {
-
- // -- CONSTANTS
-
- // using same value for all to neaten up rendering
- public static final int TYPICAL_LENGTH_PKG_FQN = 50;
- public static final int TYPICAL_LENGTH_CLS_NAME = 50;
- public static final int TYPICAL_LENGTH_MEMBER_NAME = 50;
+public class ApplicationFeatureDefault
+implements
+ ApplicationFeature,
+ Comparable<ApplicationFeature> {
// -- CONSTRUCTORS
- public ApplicationFeature(final ApplicationFeatureId featureId) {
+ public ApplicationFeatureDefault(final ApplicationFeatureId featureId) {
this.featureId = featureId;
}
@@ -103,6 +100,7 @@ public class ApplicationFeature implements Comparable<ApplicationFeature> {
// -- packages: Contents
private final SortedSet<ApplicationFeatureId> contents = _Sets.newTreeSet();
+ @Override
public SortedSet<ApplicationFeatureId> getContents() {
_Asserts.ensureNamespace(this.getFeatureId());
return contents;
@@ -146,6 +144,7 @@ public class ApplicationFeature implements Comparable<ApplicationFeature> {
membersOfSort(memberSort).add(memberId);
}
+ @Override
public SortedSet<ApplicationFeatureId> membersOfSort(final ApplicationMemberSort memberSort) {
_Asserts.ensureType(this.getFeatureId());
switch (memberSort) {
@@ -158,10 +157,6 @@ public class ApplicationFeature implements Comparable<ApplicationFeature> {
}
}
- public String getFullyQualifiedName() {
- return getFeatureId().getFullyQualifiedName();
- }
-
// -- OBJECT CONTRACT
private static final Comparator<ApplicationFeature> comparator =
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureFactory.java
index 8827e61..5502d77 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureFactory.java
@@ -26,6 +26,7 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
@Service
@@ -36,7 +37,7 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
public class ApplicationFeatureFactory {
public ApplicationFeature newApplicationFeature(ApplicationFeatureId featId) {
- return new ApplicationFeature(featId); // value type
+ return new ApplicationFeatureDefault(featId); // value type
}
}
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 c87b3a1..8b9810f 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
@@ -37,6 +37,7 @@ import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
@@ -213,7 +214,7 @@ implements ApplicationFeatureRepository {
ApplicationFeatureId addClassParent(final ApplicationFeatureId classFeatureId) {
final ApplicationFeatureId parentPackageId = classFeatureId.getParentNamespaceFeatureId();
- final ApplicationFeature parentPackage = findPackageElseCreate(parentPackageId);
+ final ApplicationFeatureDefault parentPackage = (ApplicationFeatureDefault)findPackageElseCreate(parentPackageId);
parentPackage.addToContents(classFeatureId);
return parentPackageId;
@@ -225,7 +226,7 @@ implements ApplicationFeatureRepository {
return;
}
- final ApplicationFeature parentPackage = findPackageElseCreate(parentPackageId);
+ final ApplicationFeatureDefault parentPackage = (ApplicationFeatureDefault)findPackageElseCreate(parentPackageId);
// add this feature as part of the contents of its parent
parentPackage.addToContents(classOrPackageId);
@@ -300,7 +301,7 @@ implements ApplicationFeatureRepository {
final SemanticsOf actionSemantics) {
final ApplicationFeatureId featureId = ApplicationFeatureId.newMember(classFeatureId.getFullyQualifiedName(), memberId);
- final ApplicationFeature memberFeature = newFeature(featureId);
+ final ApplicationFeatureDefault memberFeature = (ApplicationFeatureDefault)newFeature(featureId);
memberFeature.setMemberSort(memberSort);
memberFeature.setReturnTypeName(returnType != null ? returnType.getSimpleName() : null);
@@ -314,7 +315,7 @@ implements ApplicationFeatureRepository {
// also cache per memberSort
featuresMapFor(memberSort).put(featureId, memberFeature);
- final ApplicationFeature classFeature = findLogicalType(classFeatureId);
+ final ApplicationFeatureDefault classFeature = (ApplicationFeatureDefault)findLogicalType(classFeatureId);
classFeature.addToMembers(featureId, memberSort);
}
@@ -471,17 +472,6 @@ implements ApplicationFeatureRepository {
.collect(_Sets.toUnmodifiableSorted());
}
-// @Override
-// public SortedSet<String> namespaceNamesContainingSort(final ApplicationMemberSort memberSort) {
-// initializeIfRequired();
-// final Collection<ApplicationFeature> packages = allFeatures(ApplicationFeatureSort.NAMESPACE);
-//
-// return stream(packages)
-// .filter(ApplicationFeature.Predicates.packageContainingClasses(memberSort, this))
-// .map(ApplicationFeature.Functions.GET_FQN)
-// .collect(_Sets.toUnmodifiableSorted());
-// }
-
@Override
public SortedSet<String> classNamesContainedIn(
final String namespace,
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 2480222..8d5ff1b 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,6 +21,7 @@ package org.apache.isis.core.metamodel.services.appfeat;
import java.util.Objects;
import java.util.function.Predicate;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuetypes/ValueTypeProviderForBuiltin.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuetypes/ValueTypeProviderForBuiltin.java
index d16e264..d359bfd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuetypes/ValueTypeProviderForBuiltin.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuetypes/ValueTypeProviderForBuiltin.java
@@ -30,7 +30,7 @@ import org.apache.isis.applib.graph.SimpleEdge;
import org.apache.isis.applib.graph.tree.LazyTreeNode;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
+import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureDefault;
import org.apache.isis.schema.common.v2.ValueType;
@Component
@@ -48,7 +48,7 @@ public class ValueTypeProviderForBuiltin implements ValueTypeProvider {
ValueTypeDefinition.of(SimpleEdge.class, ValueType.STRING),
ValueTypeDefinition.of(LazyTreeNode.class, ValueType.STRING),
- ValueTypeDefinition.of(ApplicationFeature.class, ValueType.STRING)
+ ValueTypeDefinition.of(ApplicationFeatureDefault.class, ValueType.STRING)
);
}
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 f77477d..13767cd 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
@@ -38,6 +38,7 @@ import static org.hamcrest.Matchers.emptyCollectionOf;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.lessThan;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
index 6febbdf..650f240 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
@@ -39,6 +39,7 @@ import static org.hamcrest.Matchers.containsInAnyOrder;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
@@ -77,7 +78,7 @@ public class ApplicationFeatureRepositoryDefaultTest {
@Mock SpecificationLoader mockSpecificationLoader;
protected ApplicationFeatureRepositoryDefault applicationFeatureRepository;
-
+
@Before
public void setUp() throws Exception {
@@ -94,6 +95,10 @@ public class ApplicationFeatureRepositoryDefaultTest {
public static class Load extends ApplicationFeatureRepositoryDefaultTest {
public static class Bar {}
+
+ private static ApplicationFeature newApplicationFeature(ApplicationFeatureId featId) {
+ return new ApplicationFeatureDefault(featId);
+ }
@Ignore // considering deleting this test, it's too long and too fragile. integ tests ought to suffice.
@Test
@@ -178,43 +183,43 @@ public class ApplicationFeatureRepositoryDefaultTest {
context.checking(new Expectations() {{
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newType(Bar.class.getName()))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newType(Bar.class.getName()))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someProperty"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someProperty"))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someCollection"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someCollection"))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someAction"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newMember(Bar.class.getName(), "someAction"))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons.module.security.dom.feature"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons.module.security.dom.feature"))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons.module.security.dom"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons.module.security.dom"))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons.module.security"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons.module.security"))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons.module"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons.module"))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newNamespace("org.isisaddons"))));
oneOf(mockFactoryService).create(ApplicationFeature.class);
inSequence(sequence);
- will(returnValue(new ApplicationFeature(ApplicationFeatureId.newNamespace("org"))));
+ will(returnValue(newApplicationFeature(ApplicationFeatureId.newNamespace("org"))));
}});
// when
@@ -256,6 +261,10 @@ public class ApplicationFeatureRepositoryDefaultTest {
public static class AddClassParent extends ApplicationFeatureRepositoryDefaultTest {
+ private static ApplicationFeature newApplicationFeature(ApplicationFeatureId featId) {
+ return new ApplicationFeatureDefault(featId);
+ }
+
@Override
@Before
public void setUp() throws Exception {
@@ -276,7 +285,7 @@ public class ApplicationFeatureRepositoryDefaultTest {
// given
final ApplicationFeatureId packageId = ApplicationFeatureId.newNamespace("com.mycompany");
- final ApplicationFeature pkg = new ApplicationFeature(packageId);
+ final ApplicationFeature pkg = newApplicationFeature(packageId);
applicationFeatureRepository.packageFeatures.put(packageId, pkg);
final ApplicationFeatureId classFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureTest.java
index cd848c8..65abb37 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureTest.java
@@ -30,18 +30,24 @@ import static org.hamcrest.Matchers.containsInAnyOrder;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
+import lombok.val;
+
public class ApplicationFeatureTest {
public static class GetContents_and_AddToContents extends ApplicationFeatureTest {
+ private static ApplicationFeatureDefault newApplicationFeature(ApplicationFeatureId featId) {
+ return new ApplicationFeatureDefault(featId);
+ }
+
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void givenPackage_whenAddPackageAndClass() throws Exception {
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newNamespace("com.mycompany"));
- final ApplicationFeatureId packageFeatureId = ApplicationFeatureId.newNamespace("com.mycompany.flob");
- final ApplicationFeatureId classFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newNamespace("com.mycompany"));
+ val packageFeatureId = ApplicationFeatureId.newNamespace("com.mycompany.flob");
+ val classFeatureId = ApplicationFeatureId.newType("com.mycompany.Bar");
applicationFeature.addToContents(packageFeatureId);
applicationFeature.addToContents(classFeatureId);
@@ -55,8 +61,8 @@ public class ApplicationFeatureTest {
expectedException.expect(IllegalStateException.class);
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newNamespace("com.mycompany"));
- final ApplicationFeatureId memberFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newNamespace("com.mycompany"));
+ val memberFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
applicationFeature.addToContents(memberFeatureId);
}
@@ -66,8 +72,8 @@ public class ApplicationFeatureTest {
expectedException.expect(IllegalStateException.class);
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newType("com.mycompany.Bar"));
- final ApplicationFeatureId classFeatureId = ApplicationFeatureId.newType("com.mycompany.flob.Bar");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newType("com.mycompany.Bar"));
+ val classFeatureId = ApplicationFeatureId.newType("com.mycompany.flob.Bar");
applicationFeature.addToContents(classFeatureId);
}
@@ -77,8 +83,8 @@ public class ApplicationFeatureTest {
expectedException.expect(IllegalStateException.class);
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newMember("com.mycompany.Bar", "foo"));
- final ApplicationFeatureId classFeatureId = ApplicationFeatureId.newType("com.mycompany.flob.Bar");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newMember("com.mycompany.Bar", "foo"));
+ val classFeatureId = ApplicationFeatureId.newType("com.mycompany.flob.Bar");
applicationFeature.addToContents(classFeatureId);
}
@@ -87,6 +93,10 @@ public class ApplicationFeatureTest {
public static class GetMembers_and_AddToMembers extends ApplicationFeatureTest {
+ private static ApplicationFeatureDefault newApplicationFeature(ApplicationFeatureId featId) {
+ return new ApplicationFeatureDefault(featId);
+ }
+
@Rule
public ExpectedException expectedException = ExpectedException.none();
@@ -95,8 +105,8 @@ public class ApplicationFeatureTest {
expectedException.expect(IllegalStateException.class);
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newNamespace("com.mycompany"));
- final ApplicationFeatureId memberFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newNamespace("com.mycompany"));
+ val memberFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
applicationFeature.addToMembers(memberFeatureId, ApplicationMemberSort.PROPERTY);
}
@@ -104,9 +114,9 @@ public class ApplicationFeatureTest {
@Test
public void givenClass_whenAddMember() throws Exception {
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newType("com.mycompany.Bar"));
- final ApplicationFeatureId memberFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
- final ApplicationFeatureId memberFeatureId2 = ApplicationFeatureId.newMember("com.mycompany.Bar", "boz");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newType("com.mycompany.Bar"));
+ val memberFeatureId = ApplicationFeatureId.newMember("com.mycompany.Bar", "foo");
+ val memberFeatureId2 = ApplicationFeatureId.newMember("com.mycompany.Bar", "boz");
applicationFeature.addToMembers(memberFeatureId, ApplicationMemberSort.PROPERTY);
applicationFeature.addToMembers(memberFeatureId2, ApplicationMemberSort.PROPERTY);
@@ -120,8 +130,8 @@ public class ApplicationFeatureTest {
expectedException.expect(IllegalStateException.class);
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newType("com.mycompany.Bar"));
- final ApplicationFeatureId packageFeatureId = ApplicationFeatureId.newNamespace("com.mycompany");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newType("com.mycompany.Bar"));
+ val packageFeatureId = ApplicationFeatureId.newNamespace("com.mycompany");
applicationFeature.addToMembers(packageFeatureId, ApplicationMemberSort.PROPERTY);
}
@@ -131,8 +141,8 @@ public class ApplicationFeatureTest {
expectedException.expect(IllegalStateException.class);
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newType("com.mycompany.Bar"));
- final ApplicationFeatureId classFeatureId = ApplicationFeatureId.newType("com.mycompany.Bop");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newType("com.mycompany.Bar"));
+ val classFeatureId = ApplicationFeatureId.newType("com.mycompany.Bop");
applicationFeature.addToMembers(classFeatureId, ApplicationMemberSort.PROPERTY);
}
@@ -142,8 +152,8 @@ public class ApplicationFeatureTest {
expectedException.expect(IllegalStateException.class);
- final ApplicationFeature applicationFeature = new ApplicationFeature(ApplicationFeatureId.newMember("com.mycompany.Bar", "foo"));
- final ApplicationFeatureId classFeatureId = ApplicationFeatureId.newType("com.mycompany.flob.Bar");
+ val applicationFeature = newApplicationFeature(ApplicationFeatureId.newMember("com.mycompany.Bar", "foo"));
+ val classFeatureId = ApplicationFeatureId.newType("com.mycompany.flob.Bar");
applicationFeature.addToMembers(classFeatureId, ApplicationMemberSort.PROPERTY);
}
@@ -152,9 +162,13 @@ public class ApplicationFeatureTest {
public static class MethodsTest extends ApplicationFeatureTest {
+ private static ApplicationFeatureDefault newApplicationFeature(ApplicationFeatureId featId) {
+ return new ApplicationFeatureDefault(featId);
+ }
+
@Test
public void getFullyQualifiedName() throws Exception {
- final ApplicationFeature input = new ApplicationFeature(ApplicationFeatureId.newMember("com.mycompany.Foo#bar"));
+ val input = newApplicationFeature(ApplicationFeatureId.newMember("com.mycompany.Foo#bar"));
assertThat(input.getFullyQualifiedName(), is("com.mycompany.Foo#bar"));
}
}
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 be6fd99..6794e46 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
@@ -26,10 +26,10 @@ import org.apache.isis.applib.annotation.Programmatic;
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.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
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;
import org.apache.isis.extensions.secman.api.role.ApplicationRole;
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionMode.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionMode.java
index bb699e5..943df34 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionMode.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionMode.java
@@ -18,8 +18,8 @@
*/
package org.apache.isis.extensions.secman.api.permission;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
/**
* Named after UNIX modes (<code>chmod</code> etc), determines that nature of access (of denial of access if vetoed)
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRule.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRule.java
index 25ac6f0..79cd9e1 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRule.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRule.java
@@ -18,8 +18,8 @@
*/
package org.apache.isis.extensions.secman.api.permission;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
/**
* Whether the permission {@link #ALLOW grants} or {@link #VETO denies} access to an
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
index baab548..bb07d45 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
@@ -33,6 +33,7 @@ import org.apache.isis.applib.annotation.Programmatic;
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.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
import org.apache.isis.applib.services.factory.FactoryService;
@@ -42,7 +43,6 @@ import org.apache.isis.applib.util.ObjectContracts;
import org.apache.isis.applib.util.ToString;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModels.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModels.java
index 522c2d3..154f06d 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModels.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModels.java
@@ -31,12 +31,12 @@ import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.RestrictTo;
import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
@DomainService(
nature = NatureOfService.VIEW,
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addPermission.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addPermission.java
index defeff5..90a0d53 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addPermission.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRole_addPermission.java
@@ -38,10 +38,10 @@ import org.apache.isis.applib.annotation.Optionality;
import org.apache.isis.applib.annotation.Parameter;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
import org.apache.isis.commons.internal.functions._Predicates;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_filterPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_filterPermissions.java
index d9fe4af..e964cf9 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_filterPermissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_filterPermissions.java
@@ -31,10 +31,10 @@ import org.apache.isis.applib.annotation.Optionality;
import org.apache.isis.applib.annotation.Parameter;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
import org.apache.isis.extensions.secman.api.user.ApplicationUser;
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_permissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_permissions.java
index e8e326d..0e0e238 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_permissions.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/ApplicationUser_permissions.java
@@ -26,9 +26,9 @@ import javax.inject.Inject;
import org.apache.isis.applib.annotation.Collection;
import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
import org.apache.isis.extensions.secman.api.user.ApplicationUser;
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/UserPermissionViewModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/UserPermissionViewModel.java
index 13e1c9c..537813d 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/UserPermissionViewModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/user/UserPermissionViewModel.java
@@ -37,6 +37,7 @@ import org.apache.isis.applib.annotation.Programmatic;
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.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
import org.apache.isis.applib.services.factory.FactoryService;
@@ -44,7 +45,6 @@ import org.apache.isis.applib.util.ObjectContracts;
import org.apache.isis.applib.util.ToString;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
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 08ac90e..285b02e 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
@@ -37,6 +37,7 @@ import org.apache.isis.applib.annotation.Programmatic;
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.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
@@ -44,7 +45,6 @@ import org.apache.isis.applib.util.ObjectContracts;
import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
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 e8a5a87..8660445 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
@@ -30,6 +30,7 @@ import javax.inject.Named;
import org.springframework.stereotype.Repository;
import org.apache.isis.applib.query.Query;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
@@ -44,7 +45,6 @@ import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Multimaps;
import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
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 cbbc2ec..15ecf28 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
@@ -45,6 +45,7 @@ import org.apache.isis.applib.annotation.Programmatic;
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.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
@@ -52,7 +53,6 @@ import org.apache.isis.applib.util.ObjectContracts;
import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
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 76cd812..6af3c65 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
@@ -31,6 +31,7 @@ import javax.inject.Named;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.query.Query;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
@@ -45,7 +46,6 @@ import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Multimaps;
import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;