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