From 72c4172e0a6dac388a7c679b51e4dc80b5c5795f Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sun, 1 Mar 2020 13:19:10 +0100 Subject: [PATCH] Fixed another Lazy Init Exception --- .../cms/ui/role/BaseRoleItemPane.java | 59 +++++++++++-------- .../cms/ui/role/RoleAdminPaneController.java | 42 +++++++++---- .../arsdigita/cms/ui/role/RoleEditForm.java | 22 ++----- 3 files changed, 69 insertions(+), 54 deletions(-) diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/BaseRoleItemPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/BaseRoleItemPane.java index 6b6497276..856691fc7 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/BaseRoleItemPane.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/BaseRoleItemPane.java @@ -35,16 +35,12 @@ import com.arsdigita.cms.ui.BaseItemPane; import com.arsdigita.cms.ui.PartySearchForm; import com.arsdigita.cms.ui.VisibilityComponent; import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.kernel.KernelConfig; import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.Property; import com.arsdigita.toolbox.ui.PropertyList; import com.arsdigita.toolbox.ui.Section; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; import org.libreccm.security.Party; import org.libreccm.security.PartyRepository; import org.libreccm.security.PermissionChecker; @@ -129,40 +125,53 @@ class BaseRoleItemPane extends BaseItemPane { @Override protected final java.util.List properties( - final PageState state) { + final PageState state + ) { final java.util.List properties = super.properties( - state); + state + ); final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ConfigurationManager manager = cdiUtil.findBean( - ConfigurationManager.class); - final KernelConfig config = manager.findConfiguration( - KernelConfig.class); + final RoleAdminPaneController controller = cdiUtil + .findBean(RoleAdminPaneController.class); final Role role = roleRequestLocal.getRole(state); - properties.add(new Property(lz("cms.ui.role.name"), - role.getName())); - // Right now just loads the default locale description. - properties.add(new Property( - lz("cms.ui.role.description"), - role.getDescription().getValue(config.getDefaultLocale()))); + properties.add( + new Property(lz("cms.ui.role.name"), role.getName()) + ); - // Since Permissions don't seem to have a "pretty" form, the granted privilege is used. - final RoleAdminPaneController controller = cdiUtil.findBean( - RoleAdminPaneController.class); + // Right now just loads the default locale description. + properties.add( + new Property( + lz("cms.ui.role.description"), + controller.getRoleDescription(role) + ) + ); + + // Since Permissions don't seem to have a "pretty" form, the + // granted privilege is used. final String permissions = controller .generateGrantedPermissionsString( role, - CMS.getContext().getContentSection()); + CMS.getContext().getContentSection() + ); if (permissions.length() > 0) { - properties.add(new Property(lz("cms.ui.role.privileges"), - permissions)); + properties.add( + new Property( + lz("cms.ui.role.privileges"), + permissions + ) + ); } else { - properties.add(new Property(lz("cms.ui.role.privileges"), - lz("cms.ui.role.privilege.none"))); + properties.add( + new Property( + lz("cms.ui.role.privileges"), + lz("cms.ui.role.privilege.none") + ) + ); } return properties; @@ -192,7 +201,9 @@ class BaseRoleItemPane extends BaseItemPane { private class MemberTable extends Table { private static final int COL_NAME = 0; + private static final int COL_EMAIL = 1; + private static final int COL_REMOVE = 2; MemberTable() { diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleAdminPaneController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleAdminPaneController.java index 4a9f3f131..78942e86c 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleAdminPaneController.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleAdminPaneController.java @@ -66,7 +66,7 @@ class RoleAdminPaneController { @Inject private RoleManager roleManager; - + @Inject private RoleRepository roleRepo; @@ -88,6 +88,22 @@ class RoleAdminPaneController { return new ArrayList<>(contentSection.getRoles()); } + @Transactional + public String getRoleDescription(final Role ofRole) { + final Role role = roleRepo + .findById(ofRole.getRoleId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No role with ID %d found.", ofRole.getRoleId() + ) + ) + ); + final KernelConfig config = confManager + .findConfiguration(KernelConfig.class); + return role.getDescription().getValue(config.getDefaultLocale()); + } + public String[] getGrantedPrivileges(final Role role, final ContentSection section) { final List sectionPermissions = permissionManager @@ -217,10 +233,10 @@ class RoleAdminPaneController { KernelConfig.class); final Locale defaultLocale = kernelConfig.getDefaultLocale(); - role.setName(roleName); - role.getDescription().addValue(defaultLocale, roleDescription); + roleToSave.setName(roleName); + roleToSave.getDescription().addValue(defaultLocale, roleDescription); - roleRepo.save(role); + roleRepo.save(roleToSave); final ContentSection contentSection = sectionRepo.findById( CMS.getContext().getContentSection().getObjectId()) @@ -241,28 +257,28 @@ class RoleAdminPaneController { final Folder rootAssetsFolder = contentSection.getRootAssetsFolder(); final List currentPermissionsSection = permissionManager - .findPermissionsForRoleAndObject(role, contentSection); + .findPermissionsForRoleAndObject(roleToSave, contentSection); final List currentPermissionsDocuments = permissionManager - .findPermissionsForRoleAndObject(role, rootDocumentsFolder); + .findPermissionsForRoleAndObject(roleToSave, rootDocumentsFolder); final List currentPermissionsAssets = permissionManager - .findPermissionsForRoleAndObject(role, rootAssetsFolder); + .findPermissionsForRoleAndObject(roleToSave, rootAssetsFolder); //Revoke permissions not in selectedPermissions revokeNotSelectedPrivileges(selectedPermissions, - role, + roleToSave, currentPermissionsSection); revokeNotSelectedPrivileges(selectedPermissions, - role, + roleToSave, currentPermissionsDocuments); revokeNotSelectedPrivileges(selectedPermissions, - role, + roleToSave, currentPermissionsAssets); // Grant selected privileges for (final String privilege : adminPrivileges) { if (isPrivilegeSelected(selectedPermissions, privilege)) { permissionManager.grantPrivilege(privilege, - role, + roleToSave, contentSection); } } @@ -270,7 +286,7 @@ class RoleAdminPaneController { for (final String privilege : itemPrivileges) { if (isPrivilegeSelected(selectedPermissions, privilege)) { permissionManager.grantPrivilege(privilege, - role, + roleToSave, rootDocumentsFolder); } } @@ -278,7 +294,7 @@ class RoleAdminPaneController { for (final String privilege : assetPrivileges) { if (isPrivilegeSelected(selectedPermissions, privilege)) { permissionManager.grantPrivilege(privilege, - role, + roleToSave, rootAssetsFolder); } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleEditForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleEditForm.java index bdfb7534a..db0fd80fc 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleEditForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleEditForm.java @@ -24,20 +24,10 @@ import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.cms.CMS; -import com.arsdigita.kernel.KernelConfig; import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.l10n.LocalizedString; -import org.libreccm.security.Permission; import org.libreccm.security.PermissionManager; import org.libreccm.security.Role; -import org.libreccm.security.RoleRepository; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; /** * Represents a {@link com.arsdigita.bebop.Form Form} to edit @@ -76,17 +66,15 @@ final class RoleEditForm extends BaseRoleForm { final PageState state = event.getPageState(); final Role role = roleRequestLocal.getRole(state); - final KernelConfig kernelConfig = KernelConfig.getConfig(); - final Locale defaultLocale = kernelConfig.getDefaultLocale(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final RoleAdminPaneController controller = cdiUtil.findBean( + RoleAdminPaneController.class); getRoleName().setValue(state, role.getName()); getRoleDescription().setValue( state, - role.getDescription().getValue(defaultLocale)); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final RoleAdminPaneController controller = cdiUtil.findBean( - RoleAdminPaneController.class); + controller.getRoleDescription(role) + ); final String[] permissions = controller.getGrantedPrivileges( role, CMS.getContext().getContentSection());