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 09:43:15 UTC
[isis] branch master updated: ISIS-2553: ApplicationFeatureDefault:
simplify and improve formal api
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 3611617 ISIS-2553: ApplicationFeatureDefault: simplify and improve formal api
3611617 is described below
commit 36116173046e1d2c5fd42cd1b9c9f42c3589e7dd
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 5 10:43:02 2021 +0100
ISIS-2553: ApplicationFeatureDefault: simplify and improve formal api
---
.../services/appfeat/ApplicationFeature.java | 6 ++-
.../appfeat/ApplicationFeatureDefault.java | 47 +++++++++++++---------
.../dom/feature/ApplicationFeatureViewModel.java | 13 ++++--
.../jdo/dom/permission/ApplicationPermission.java | 2 +-
.../jpa/dom/permission/ApplicationPermission.java | 2 +-
5 files changed, 43 insertions(+), 27 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
index aa787b8..4e7988b 100644
--- 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
@@ -18,6 +18,7 @@
*/
package org.apache.isis.applib.services.appfeat;
+import java.util.Optional;
import java.util.SortedSet;
import org.apache.isis.applib.annotation.SemanticsOf;
@@ -34,7 +35,10 @@ public interface ApplicationFeature {
return getFeatureId().getFullyQualifiedName();
}
- ApplicationMemberSort getMemberSort();
+ /**
+ * Optionally the member sort, based on whether this feature is a member.
+ */
+ Optional<ApplicationMemberSort> getMemberSort();
SortedSet<ApplicationFeatureId> membersOfSort(ApplicationMemberSort memberSort);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
index 459bdad..c3edc6d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
@@ -18,7 +18,9 @@
*/
package org.apache.isis.core.metamodel.services.appfeat;
+import java.util.Collections;
import java.util.Comparator;
+import java.util.Optional;
import java.util.SortedSet;
import org.apache.isis.applib.annotation.SemanticsOf;
@@ -26,7 +28,6 @@ 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;
import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
import org.apache.isis.applib.util.Equality;
import org.apache.isis.applib.util.Hashing;
@@ -35,6 +36,7 @@ import org.apache.isis.applib.util.ToString;
import org.apache.isis.commons.internal.collections._Sets;
import lombok.Getter;
+import lombok.NonNull;
import lombok.Setter;
/**
@@ -57,15 +59,18 @@ implements
public ApplicationFeatureDefault(final ApplicationFeatureId featureId) {
this.featureId = featureId;
}
+
+ // -- FIELDS
- @Getter
+ @Getter(onMethod_ = {@Override})
private final ApplicationFeatureId featureId;
- /**
- * Only for {@link ApplicationFeatureSort#MEMBER member}s.
- */
- @Getter @Setter
- private ApplicationMemberSort memberSort;
+ @Getter(onMethod_ = {@Override})
+ private Optional<ApplicationMemberSort> memberSort = Optional.empty();
+
+ void setMemberSort(final @NonNull ApplicationMemberSort memberSort) {
+ this.memberSort = Optional.of(memberSort);
+ }
/**
* Only for {@link ApplicationMemberSort#ACTION action}s.
@@ -97,66 +102,68 @@ implements
@Getter @Setter
private SemanticsOf actionSemantics;
- // -- packages: Contents
+ // -- NAMESPACE
+
private final SortedSet<ApplicationFeatureId> contents = _Sets.newTreeSet();
@Override
public SortedSet<ApplicationFeatureId> getContents() {
- _Asserts.ensureNamespace(this.getFeatureId());
return contents;
}
- public void addToContents(final ApplicationFeatureId contentId) {
+ void addToContents(final ApplicationFeatureId contentId) {
_Asserts.ensureNamespace(this.getFeatureId());
_Asserts.ensureNamespaceOrType(contentId);
this.contents.add(contentId);
}
-
- // -- classes: Properties, Collections, Actions
+ // -- PROPERTIES
+
private final SortedSet<ApplicationFeatureId> properties = _Sets.newTreeSet();
@Override
public SortedSet<ApplicationFeatureId> getProperties() {
- _Asserts.ensureType(this.getFeatureId());
return properties;
}
-
+ // -- COLLECTIONS
+
private final SortedSet<ApplicationFeatureId> collections = _Sets.newTreeSet();
@Override
public SortedSet<ApplicationFeatureId> getCollections() {
- _Asserts.ensureType(this.getFeatureId());
return collections;
}
-
+ // -- ACTIONS
+
private final SortedSet<ApplicationFeatureId> actions = _Sets.newTreeSet();
@Override
public SortedSet<ApplicationFeatureId> getActions() {
- _Asserts.ensureType(this.getFeatureId());
return actions;
}
- public void addToMembers(final ApplicationFeatureId memberId, final ApplicationMemberSort memberSort) {
+ void addToMembers(final ApplicationFeatureId memberId, final ApplicationMemberSort memberSort) {
_Asserts.ensureType(this.getFeatureId());
_Asserts.ensureMember(memberId);
membersOfSort(memberSort).add(memberId);
}
+ // -- MEMBERS OF SORT
+
@Override
public SortedSet<ApplicationFeatureId> membersOfSort(final ApplicationMemberSort memberSort) {
- _Asserts.ensureType(this.getFeatureId());
switch (memberSort) {
case PROPERTY:
return properties;
case COLLECTION:
return collections;
- default: // case ACTION:
+ case ACTION:
return actions;
+ default:
+ return Collections.emptySortedSet();
}
}
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 9a14f6d..52d0110 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
@@ -19,6 +19,7 @@
package org.apache.isis.extensions.secman.model.dom.feature;
import java.util.List;
+import java.util.Optional;
import java.util.SortedSet;
import java.util.function.Function;
@@ -86,10 +87,14 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
case TYPE:
return ApplicationType.class;
case MEMBER:
- final ApplicationFeature feature = applicationFeatureRepository.findFeature(featureId);
-
- if(feature != null) {
- switch(feature.getMemberSort()) {
+
+ val memberSort =
+ Optional.ofNullable(applicationFeatureRepository.findFeature(featureId))
+ .flatMap(ApplicationFeature::getMemberSort)
+ .orElse(null);
+
+ if(memberSort != null) {
+ switch(memberSort) {
case PROPERTY:
return ApplicationTypeProperty.class;
case COLLECTION:
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 285b02e..32e7a50 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
@@ -192,7 +192,7 @@ public class ApplicationPermission implements org.apache.isis.extensions.secman.
@Programmatic
private Optional<ApplicationMemberSort> getMemberSort() {
return getFeature()
- .map(ApplicationFeature::getMemberSort);
+ .flatMap(ApplicationFeature::getMemberSort);
}
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 15ecf28..724cc52 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
@@ -207,7 +207,7 @@ implements
@Programmatic
private Optional<ApplicationMemberSort> getMemberSort() {
return getFeature()
- .map(ApplicationFeature::getMemberSort);
+ .flatMap(ApplicationFeature::getMemberSort);
}