You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/03/04 14:31:25 UTC
[isis] branch master updated: ISIS-2560:
ApplicationRole_addPermission: autocomplete add search refinement
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 58e0c9d ISIS-2560: ApplicationRole_addPermission: autocomplete add search refinement
58e0c9d is described below
commit 58e0c9d5a77de73bd714bd31e87d8f710b2295ad
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Mar 4 15:31:09 2021 +0100
ISIS-2560: ApplicationRole_addPermission: autocomplete add search
refinement
---
.../dom/role/ApplicationRole_addPermission.java | 48 +++++++++++++++++++---
1 file changed, 43 insertions(+), 5 deletions(-)
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 27f42f8..77a7590 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
@@ -21,6 +21,7 @@ package org.apache.isis.extensions.secman.model.dom.role;
import java.util.Map;
import java.util.Objects;
import java.util.TreeSet;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import javax.enterprise.inject.Model;
@@ -28,6 +29,7 @@ import javax.inject.Inject;
import org.apache.isis.applib.ViewModel;
import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.MinLength;
@@ -38,6 +40,7 @@ import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.Property;
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;
@@ -58,6 +61,7 @@ import lombok.experimental.Accessors;
@Action(
domainEvent = AddPermissionDomainEvent.class,
associateWith = "permissions")
+@ActionLayout(named="Remove")
@RequiredArgsConstructor
public class ApplicationRole_addPermission {
@@ -89,7 +93,11 @@ public class ApplicationRole_addPermission {
final ApplicationPermissionMode mode,
@Parameter(optionality = Optionality.MANDATORY)
- @ParameterLayout(named="Feature")
+ @ParameterLayout(
+ named = "Feature",
+ describedAs = "To refine the search by sort (namespace, type, member), "
+ + "use one of "
+ + "sort:n sort:t sort:m.")
final AppFeat feature) {
applicationPermissionRepository.newPermission(target, rule, mode, feature.getFeatureId());
@@ -108,23 +116,53 @@ public class ApplicationRole_addPermission {
@Model
public java.util.Collection<AppFeat> autoCompleteFeature(
- Parameters params,
- @MinLength(3) String search) {
+ final Parameters params,
+ final @MinLength(3) String search) {
+
+ final Predicate<ApplicationFeatureId> searchRefine;
+ final String searchTerm;
+
+ if(search.startsWith("sort:n")) {
+ searchRefine = this::isNamespace;
+ searchTerm = search.substring(6).trim();
+ } else if(search.startsWith("sort:t")) {
+ searchRefine = this::isType;
+ searchTerm = search.substring(6).trim();
+ } else if(search.startsWith("sort:m")) {
+ searchRefine = this::isMember;
+ searchTerm = search.substring(6).trim();
+ } else {
+ searchRefine = _Predicates.alwaysTrue();
+ searchTerm = search.trim();
+ }
val idsByName = applicationFeatureRepository.getFeatureIdentifiersByName();
return idsByName.entrySet().stream()
- .filter(entry->matches(entry.getKey(), entry.getValue(), search))
+ .filter(entry->searchRefine.test(entry.getValue()))
+ .filter(entry->matches(entry.getKey(), entry.getValue(), searchTerm))
.map(Map.Entry::getValue)
.map(AppFeat::new)
.collect(Collectors.toCollection(TreeSet::new));
}
private boolean matches(String featureName, ApplicationFeatureId featureId, String search) {
- //TODO yet not very smart
return featureName.contains(search);
}
+ private boolean isNamespace(ApplicationFeatureId featureId) {
+ return featureId.getSort().isNamespace();
+ }
+
+ private boolean isType(ApplicationFeatureId featureId) {
+ return featureId.getSort().isType();
+ }
+
+ private boolean isMember(ApplicationFeatureId featureId) {
+ return featureId.getSort().isMember();
+ }
+
+
// -- FEATURE VIEW MODEL WRAPPING A VALUE TYPE
/**