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 2022/01/13 15:59:43 UTC
[isis] branch master updated: ISIS-2703: secman: fixes child tenancy management
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 353a76f ISIS-2703: secman: fixes child tenancy management
353a76f is described below
commit 353a76f3ed83e9ee5d0d1b2b1bc8c486bcc057bb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 13 16:58:12 2022 +0100
ISIS-2703: secman: fixes child tenancy management
---
.../applib/tenancy/dom/ApplicationTenancy.java | 6 ++++-
.../tenancy/dom/ApplicationTenancyRepository.java | 4 ++++
.../dom/ApplicationTenancyRepositoryAbstract.java | 27 ++++++++++++++--------
.../dom/mixins/ApplicationTenancy_addChild.java | 12 ++++++++++
.../dom/mixins/ApplicationTenancy_addUser.java | 6 ++++-
.../dom/mixins/ApplicationTenancy_removeChild.java | 9 ++++----
6 files changed, 49 insertions(+), 15 deletions(-)
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancy.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancy.java
index 6f5b2b5..237232f 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancy.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancy.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.annotation.Editing;
import org.apache.isis.applib.annotation.ObjectSupport;
import org.apache.isis.applib.annotation.Parameter;
import org.apache.isis.applib.annotation.ParameterLayout;
+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;
@@ -146,7 +147,10 @@ public abstract class ApplicationTenancy implements Comparable<ApplicationTenanc
public abstract ApplicationTenancy getParent();
public abstract void setParent(ApplicationTenancy parent);
-
+ @Programmatic
+ public boolean isRoot() {
+ return getParent()==null;
+ }
// -- CHILDREN
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepository.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepository.java
index 1deae31b..015380b 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepository.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepository.java
@@ -34,6 +34,8 @@ public interface ApplicationTenancyRepository {
ApplicationTenancy newApplicationTenancy();
Collection<ApplicationTenancy> allTenancies();
+ /** non-parented, not a child */
+ Collection<ApplicationTenancy> getRootTenancies();
Collection<ApplicationTenancy> getChildren(ApplicationTenancy tenancy);
Collection<ApplicationTenancy> findByNameOrPathMatchingCached(String partialNameOrPath);
ApplicationTenancy findByPath(String path);
@@ -52,4 +54,6 @@ public interface ApplicationTenancyRepository {
void setParentOnTenancy(ApplicationTenancy tenancy, ApplicationTenancy parent);
void clearParentOnTenancy(ApplicationTenancy tenancy);
+
+
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepositoryAbstract.java
index e60c6e5..24c9193 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepositoryAbstract.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepositoryAbstract.java
@@ -46,7 +46,7 @@ implements ApplicationTenancyRepository {
private final Class<T> applicationTenancyClass;
- protected ApplicationTenancyRepositoryAbstract(Class<T> applicationTenancyClass) {
+ protected ApplicationTenancyRepositoryAbstract(final Class<T> applicationTenancyClass) {
this.applicationTenancyClass = applicationTenancyClass;
}
@@ -158,6 +158,23 @@ implements ApplicationTenancyRepository {
}
@Override
+ public Collection<ApplicationTenancy> getRootTenancies() {
+ return repository.allInstances(this.applicationTenancyClass)
+ .stream()
+ .filter(ApplicationTenancy::isRoot)
+ .map(this.applicationTenancyClass::cast)
+ .collect(_Sets.toUnmodifiableSorted());
+ }
+
+ @Override
+ public Collection<ApplicationTenancy> getChildren(
+ final @NonNull ApplicationTenancy tenancy) {
+ return tenancy.getChildren()
+ .stream()
+ .collect(_Sets.toUnmodifiableSorted());
+ }
+
+ @Override
public void setTenancyOnUser(
final @NonNull ApplicationTenancy tenancy,
final @NonNull ApplicationUser user) {
@@ -190,12 +207,4 @@ implements ApplicationTenancyRepository {
}
}
- @Override
- public Collection<ApplicationTenancy> getChildren(
- final @NonNull ApplicationTenancy tenancy) {
- return tenancy.getChildren()
- .stream()
- .collect(_Sets.toUnmodifiableSorted());
- }
-
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addChild.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addChild.java
index 3aafeb2..cbff35c 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addChild.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addChild.java
@@ -18,18 +18,22 @@
*/
package org.apache.isis.extensions.secman.applib.tenancy.dom.mixins;
+import java.util.Collection;
+
import javax.inject.Inject;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.MemberSupport;
import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.extensions.secman.applib.IsisModuleExtSecmanApplib;
import org.apache.isis.extensions.secman.applib.tenancy.dom.ApplicationTenancy;
import org.apache.isis.extensions.secman.applib.tenancy.dom.ApplicationTenancyRepository;
import org.apache.isis.extensions.secman.applib.tenancy.dom.mixins.ApplicationTenancy_addChild.DomainEvent;
import lombok.RequiredArgsConstructor;
+import lombok.val;
@Action(
domainEvent = DomainEvent.class,
@@ -55,4 +59,12 @@ public class ApplicationTenancy_addChild {
return target;
}
+ @MemberSupport public Collection<? extends ApplicationTenancy> choicesChild() {
+ val choices =_Lists.newArrayList(applicationTenancyRepository.getRootTenancies());
+ choices.remove(target);
+ return choices; }
+
+ @MemberSupport public String disableAct() {
+ return choicesChild().isEmpty()? "No root (non-paranted) tenancies available": null; }
+
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addUser.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addUser.java
index f1211e4..241660f 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addUser.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addUser.java
@@ -26,6 +26,7 @@ import javax.inject.Inject;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.MemberSupport;
+import org.apache.isis.applib.annotation.MinLength;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.extensions.secman.applib.IsisModuleExtSecmanApplib;
@@ -62,7 +63,10 @@ public class ApplicationTenancy_addUser {
return target;
}
- @MemberSupport public List<? extends ApplicationUser> autoComplete0Act(final String search) {
+ @MemberSupport public List<? extends ApplicationUser> autoCompleteApplicationUser(
+ @MinLength(1)
+ final String search) {
+
final Collection<? extends ApplicationUser> matchingSearch = applicationUserRepository.find(search);
final List<? extends ApplicationUser> list = _Lists.newArrayList(matchingSearch);
list.removeAll(applicationUserRepository.findByTenancy(target));
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_removeChild.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_removeChild.java
index 6593b9a..5e3f099 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_removeChild.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_removeChild.java
@@ -57,9 +57,10 @@ public class ApplicationTenancy_removeChild {
return target;
}
- @MemberSupport public Collection<? extends ApplicationTenancy> choices0Act() {
- return applicationTenancyRepository.getChildren(target);
- }
- @MemberSupport public String disableAct() { return choices0Act().isEmpty()? "No children to remove": null; }
+ @MemberSupport public Collection<? extends ApplicationTenancy> choicesChild() {
+ return applicationTenancyRepository.getChildren(target); }
+
+ @MemberSupport public String disableAct() {
+ return choicesChild().isEmpty()? "No children to remove": null; }
}