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; }
 
 }