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 09:13:19 UTC
[isis] branch master updated: ISIS-2560: fully implements
ApplicationRole_addPermission
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 f1f903d ISIS-2560: fully implements ApplicationRole_addPermission
f1f903d is described below
commit f1f903de568b3ff591d73042529bf6ee5ab9a8c7
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Mar 4 10:13:01 2021 +0100
ISIS-2560: fully implements ApplicationRole_addPermission
which allows to just add permission with an auto complete search
---
.../specimpl/ObjectActionParameterAbstract.java | 4 +-
.../model/dom/role/ApplicationRole_addAction.java | 1 +
.../model/dom/role/ApplicationRole_addClass.java | 1 +
.../dom/role/ApplicationRole_addCollection.java | 1 +
.../model/dom/role/ApplicationRole_addPackage.java | 1 +
.../dom/role/ApplicationRole_addPermission.java | 86 +++++++++++++++++++---
.../dom/role/ApplicationRole_addProperty.java | 1 +
7 files changed, 82 insertions(+), 13 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 06b1356..7641a4d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -175,8 +175,8 @@ implements ObjectActionParameter, HasFacetHolder {
@Override
public boolean hasAutoComplete() {
- final ActionParameterAutoCompleteFacet facet = getFacet(ActionParameterAutoCompleteFacet.class);
- return facet != null;
+ val actionParameterAutoCompleteFacet = getFacet(ActionParameterAutoCompleteFacet.class);
+ return actionParameterAutoCompleteFacet != null;
}
@Override
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 84d057c..cd3f622 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
@@ -37,6 +37,7 @@ import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionD
import lombok.RequiredArgsConstructor;
+//probably obsolete since ApplicationRole_addPermission
@Action(
domainEvent = AddPermissionDomainEvent.class,
associateWith = "permissions")
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 e597c45..a45c36b 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
@@ -35,6 +35,7 @@ import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionD
import lombok.RequiredArgsConstructor;
+//probably obsolete since ApplicationRole_addPermission
@Action(
domainEvent = AddPermissionDomainEvent.class,
associateWith = "permissions")
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 7555650..e8efcdd 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
@@ -39,6 +39,7 @@ import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionD
import lombok.RequiredArgsConstructor;
+// probably obsolete since ApplicationRole_addPermission
@Action(
domainEvent = AddPermissionDomainEvent.class,
associateWith = "permissions")
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 5bd8e21..88db573 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
@@ -36,6 +36,7 @@ import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionD
import lombok.RequiredArgsConstructor;
+//probably obsolete since ApplicationRole_addPermission
@Action(
domainEvent = AddPermissionDomainEvent.class,
associateWith = "permissions")
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 7b2ae68..3a4d227 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
@@ -19,20 +19,23 @@
package org.apache.isis.extensions.secman.model.dom.role;
import java.util.Map;
+import java.util.Objects;
import java.util.TreeSet;
import java.util.stream.Collectors;
import javax.enterprise.inject.Model;
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;
+import org.apache.isis.applib.annotation.Nature;
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.PromptStyle;
+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.core.metamodel.services.appfeat.ApplicationFeature;
@@ -43,16 +46,18 @@ import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRul
import org.apache.isis.extensions.secman.api.role.ApplicationRole;
import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionDomainEvent;
+import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Value;
import lombok.val;
import lombok.experimental.Accessors;
-//TODO[2560] wip
@Action(
domainEvent = AddPermissionDomainEvent.class,
associateWith = "permissions")
-@ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
@RequiredArgsConstructor
public class ApplicationRole_addPermission {
@@ -65,7 +70,7 @@ public class ApplicationRole_addPermission {
public static class Parameters {
ApplicationPermissionRule rule; // ALLOW/VETO
ApplicationPermissionMode mode; // r/w
- String feature;
+ AppFeat feature;
}
/**
@@ -85,11 +90,9 @@ public class ApplicationRole_addPermission {
@Parameter(optionality = Optionality.MANDATORY)
@ParameterLayout(named="Feature")
- final String feature) {
+ final AppFeat feature) {
- val featureId = ApplicationFeatureId.parse(feature);
-
- applicationPermissionRepository.newPermission(target, rule, mode, featureId);
+ applicationPermissionRepository.newPermission(target, rule, mode, feature.getFeatureId());
return target;
}
@@ -104,7 +107,7 @@ public class ApplicationRole_addPermission {
}
@Model
- public java.util.Collection<String> autoCompleteFeature(
+ public java.util.Collection<AppFeat> autoCompleteFeature(
Parameters params,
@MinLength(3) String search) {
@@ -113,7 +116,7 @@ public class ApplicationRole_addPermission {
return idsByName.entrySet().stream()
.filter(entry->matches(entry.getKey(), entry.getValue(), search))
.map(Map.Entry::getValue)
- .map(ApplicationFeatureId::stringify)
+ .map(AppFeat::new)
.collect(Collectors.toCollection(TreeSet::new));
}
@@ -121,6 +124,67 @@ public class ApplicationRole_addPermission {
//TODO yet not very smart
return featureName.contains(search);
}
+
+ // -- FEATURE VIEW MODEL WRAPPING A VALUE TYPE
+ /**
+ * Viewmodel wrapper around value type {@link ApplicationFeatureId}. Introduced,
+ * because at the time of writing,
+ * autoComplete/choices do not support value types.
+ */
+ @DomainObject(
+ nature = Nature.VIEW_MODEL,
+ objectType = "isis.ext.secman.AppFeat")
+ @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode
+ public static class AppFeat
+ implements
+ Comparable<AppFeat>,
+ ViewModel {
+
+ @Property
+ @Getter
+ private ApplicationFeatureId featureId;
+
+ public String title() {
+ return toString();
+ }
+
+ @Override
+ public int compareTo(AppFeat o) {
+ val thisId = this.getFeatureId();
+ val otherId = o!=null ? o.getFeatureId() : null;
+ if(Objects.equals(thisId, otherId)) {
+ return 0;
+ }
+ if(thisId==null) {
+ return -1;
+ }
+ if(otherId==null) {
+ return 1;
+ }
+ return this.getFeatureId().compareTo(o.getFeatureId());
+ }
+
+ @Override
+ public String toString() {
+ return featureId!=null
+ ? featureId.getSort().name() + ": " + featureId.getFullyQualifiedName()
+ : "<no id>";
+ }
+
+ @Override
+ public String viewModelMemento() {
+ return featureId!=null
+ ? featureId.asEncodedString()
+ : "<no id>";
+ }
+
+ @Override
+ public void viewModelInit(String memento) {
+ featureId = ApplicationFeatureId.parseEncoded(memento); // fail by intention if memento is '<no id>'
+ }
+
+ }
+
}
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 0045027..1807349 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
@@ -39,6 +39,7 @@ import org.apache.isis.extensions.secman.api.role.ApplicationRole.AddPermissionD
import lombok.RequiredArgsConstructor;
+//probably obsolete since ApplicationRole_addPermission
@Action(
domainEvent = AddPermissionDomainEvent.class,
associateWith = "permissions")