You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/06/28 13:39:33 UTC

[isis] branch ISIS-2777 created (now aa851d4)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch ISIS-2777
in repository https://gitbox.apache.org/repos/asf/isis.git.


      at aa851d4  ISIS-2777: extends AbstractRoleAndPermissionsFixtureScript

This branch includes the following new commits:

     new 95c5e1c  ISIS-2777: extends AbstractUserAndRolesFixtureScript
     new aa851d4  ISIS-2777: extends AbstractRoleAndPermissionsFixtureScript

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[isis] 02/02: ISIS-2777: extends AbstractRoleAndPermissionsFixtureScript

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2777
in repository https://gitbox.apache.org/repos/asf/isis.git

commit aa851d468678ccebd970a41f4611f021ba094803
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jun 28 14:39:09 2021 +0100

    ISIS-2777: extends AbstractRoleAndPermissionsFixtureScript
    
    to allow values to be provided lazily
---
 .../AbstractRoleAndPermissionsFixtureScript.java   | 23 +++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/fixtures/AbstractRoleAndPermissionsFixtureScript.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/fixtures/AbstractRoleAndPermissionsFixtureScript.java
index 5a184eb..2d2e1b4 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/fixtures/AbstractRoleAndPermissionsFixtureScript.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/fixtures/AbstractRoleAndPermissionsFixtureScript.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.extensions.secman.applib.role.fixtures;
 
+import java.util.function.Supplier;
+
 import javax.inject.Inject;
 
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
@@ -41,14 +43,24 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
     @Inject private ApplicationRoleRepository applicationRoleRepository;
     @Inject private ApplicationPermissionRepository applicationPermissionRepository;
 
-    private final String roleName;
-    private final String roleDescription;
+    private final Supplier<String> roleNameSupplier;
+    private final Supplier<String> roleDescriptionSupplier;
 
     protected AbstractRoleAndPermissionsFixtureScript(
             final String roleName,
             final String roleDescriptionIfAny) {
-        this.roleName = roleName;
-        this.roleDescription = roleDescriptionIfAny;
+        this(() -> roleName, () -> roleDescriptionIfAny);
+    }
+
+    protected AbstractRoleAndPermissionsFixtureScript(
+            final Supplier<String> roleNameSupplier,
+            final Supplier<String> roleDescriptionSupplier) {
+        this.roleNameSupplier = nullSafe(roleNameSupplier);
+        this.roleDescriptionSupplier = nullSafe(roleDescriptionSupplier);
+    }
+
+    private static <T> Supplier<T> nullSafe(Supplier<T> supplier) {
+        return supplier != null ? supplier : () -> null;
     }
 
     /**
@@ -71,8 +83,9 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
             return;
         }
 
+        val roleName = roleNameSupplier.get();
         val securityRole = applicationRoleRepository.findByName(roleName)
-                .orElseGet(() -> applicationRoleRepository.newRole(roleName, roleDescription));
+                .orElseGet(() -> applicationRoleRepository.newRole(roleName, roleDescriptionSupplier.get()));
 
         for(val featureId : featureIds) {
             val featureFqn = featureId.getFullyQualifiedName();

[isis] 01/02: ISIS-2777: extends AbstractUserAndRolesFixtureScript

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2777
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 95c5e1c8530425588c4519631abb5b0f3e07c795
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jun 28 14:36:01 2021 +0100

    ISIS-2777: extends AbstractUserAndRolesFixtureScript
    
    to allow values to be provided lazily
---
 .../AbstractUserAndRolesFixtureScript.java         | 64 +++++++++++++++-------
 1 file changed, 45 insertions(+), 19 deletions(-)

diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/fixtures/AbstractUserAndRolesFixtureScript.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/fixtures/AbstractUserAndRolesFixtureScript.java
index fb39cf2..835a9b1 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/fixtures/AbstractUserAndRolesFixtureScript.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/fixtures/AbstractUserAndRolesFixtureScript.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.extensions.secman.applib.user.fixtures;
 
+import java.util.function.Supplier;
+
 import javax.inject.Inject;
 
 import org.apache.isis.applib.value.Password;
@@ -31,6 +33,7 @@ import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUserStatus;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 
 import lombok.Getter;
+import lombok.val;
 
 /**
  * Convenience fixture script intended to be easily subclassed in order to set up an
@@ -43,12 +46,12 @@ public abstract class AbstractUserAndRolesFixtureScript extends FixtureScript {
     @Inject private ApplicationUserRepository applicationUserRepository;
     @Inject private ApplicationRoleRepository applicationRoleRepository;
 
-    private final String username;
-    private final String password;
-    private final String emailAddress;
-    private final String tenancyPath;
-    private final AccountType accountType;
-    private final Can<String> roleNames;
+    private final Supplier<String> usernameSupplier;
+    private final Supplier<String> passwordSupplier;
+    private final Supplier<String> emailAddressSupplier;
+    private final Supplier<String> tenancyPathSupplier;
+    private final Supplier<AccountType> accountTypeSupplier;
+    private final Supplier<Can<String>> roleNamesSupplier;
 
     /**
      * The {@link ApplicationUser}
@@ -65,56 +68,79 @@ public abstract class AbstractUserAndRolesFixtureScript extends FixtureScript {
     }
 
     public AbstractUserAndRolesFixtureScript(
+            final Supplier<String> usernameSupplier,
+            final Supplier<String> passwordSupplier,
+            final Supplier<AccountType> accountTypeSupplier,
+            final Supplier<Can<String>> roleNamesSupplier) {
+        this(usernameSupplier, passwordSupplier, () -> null, () -> null, accountTypeSupplier, roleNamesSupplier);
+    }
+
+    public AbstractUserAndRolesFixtureScript(
             final String username,
             final String password,
             final String emailAddress,
             final String tenancyPath,
             final AccountType accountType,
             final Can<String> roleNames) {
+        this(() -> username, () -> password, () -> emailAddress, () -> tenancyPath, () -> accountType, () -> roleNames);
+    }
+
+    public AbstractUserAndRolesFixtureScript(
+            final Supplier<String> usernameSupplier,
+            final Supplier<String> passwordSupplier,
+            final Supplier<String> emailAddressSupplier,
+            final Supplier<String> tenancyPathSupplier,
+            final Supplier<AccountType> accountTypeSupplier,
+            final Supplier<Can<String>> roleNamesSupplier) {
+
+        this.usernameSupplier = nullSafe(usernameSupplier);
+        this.passwordSupplier = nullSafe(passwordSupplier);
+        this.emailAddressSupplier = nullSafe(emailAddressSupplier);
+        this.tenancyPathSupplier = nullSafe(tenancyPathSupplier);
+        this.accountTypeSupplier = nullSafe(accountTypeSupplier);
+        this.roleNamesSupplier = nullSafe(roleNamesSupplier);
+    }
 
-        this.username = username;
-        this.password = password;
-        this.emailAddress = emailAddress;
-        this.tenancyPath = tenancyPath;
-        this.accountType = accountType;
-        this.roleNames = roleNames;
+    private static <T> Supplier<T> nullSafe(Supplier<T> supplier) {
+        return supplier != null ? supplier : () -> null;
     }
 
     @Override
     protected void execute(final ExecutionContext executionContext) {
 
         // create user if does not exist, and assign to the role
+        val username = usernameSupplier.get();
         applicationUser = applicationUserRepository.findByUsername(username)
                 .orElse(null);
         if(applicationUser == null) {
 
-            switch (accountType) {
+            switch (accountTypeSupplier.get()) {
             case DELEGATED:
                 applicationUser = applicationUserRepository
                     .newDelegateUser(username, ApplicationUserStatus.UNLOCKED);
                 break;
             case LOCAL:
-                final Password pwd = new Password(password);
+                final Password pwd = new Password(passwordSupplier.get());
                 applicationUser = applicationUserRepository
                         .newLocalUser(username, pwd, ApplicationUserStatus.UNLOCKED);
-                applicationUser.setEmailAddress(emailAddress);
+                applicationUser.setEmailAddress(emailAddressSupplier.get());
             }
 
             if(applicationUser == null) {
-                throw _Exceptions.unrecoverableFormatted("failed to create user '%s'", username);
+                throw _Exceptions.unrecoverableFormatted("failed to create user '%s'", usernameSupplier);
             }
 
             // update tenancy (repository checks for null)
-            applicationUser.setAtPath(tenancyPath);
+            applicationUser.setAtPath(tenancyPathSupplier.get());
         }
 
-        for (final String roleName : roleNames) {
+        for (final String roleName : roleNamesSupplier.get()) {
             applicationRoleRepository.findByName(roleName)
             .map(securityRole->{
                 applicationRoleRepository.addRoleToUser(securityRole, applicationUser);
                 return Boolean.TRUE;
             })
-            .orElseThrow(()->_Exceptions.unrecoverable("role not found by name: "+roleName));
+            .orElseThrow(()->_Exceptions.unrecoverable("role not found by name: " + roleName));
         }
 
     }