diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/page/BebopApplicationServlet.java b/ccm-core/src/main/java/com/arsdigita/bebop/page/BebopApplicationServlet.java index ba8a49f7f..253acd4d4 100644 --- a/ccm-core/src/main/java/com/arsdigita/bebop/page/BebopApplicationServlet.java +++ b/ccm-core/src/main/java/com/arsdigita/bebop/page/BebopApplicationServlet.java @@ -37,6 +37,7 @@ import java.util.Map; import java.util.Set; import javax.enterprise.inject.spi.CDI; +import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -66,6 +67,9 @@ public class BebopApplicationServlet extends BaseApplicationServlet { private static final Logger LOGGER = LogManager.getLogger( BebopApplicationServlet.class); + + @Inject + private Subject subject; /** * URL (pathinfo) -> Page object mapping. Based on it (and the http request @@ -152,7 +156,7 @@ public class BebopApplicationServlet extends BaseApplicationServlet { final String pathInfo = sreq.getPathInfo(); Assert.exists(pathInfo, "String pathInfo"); - final Subject subject = CDI.current().select(Subject.class).get(); + //final Subject subject = CDI.current().select(Subject.class).get(); LOGGER.debug("Current session is: {}", sreq.getSession().getId()); LOGGER.debug("Current Shiro session is {}", subject.getSession().getId().toString()); diff --git a/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherConfig.java b/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherConfig.java index be7c127fb..fbc41278f 100755 --- a/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherConfig.java @@ -44,9 +44,8 @@ public final class DispatcherConfig { private String defaultPageClass = "com.arsdigita.bebop.Page"; public static DispatcherConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(DispatcherConfig.class); } @@ -119,15 +118,16 @@ public final class DispatcherConfig { @Override public String toString() { return String.format("%s{ " - + "cachingActive = %b, " - + "defaultExpiry = %d, " - + "staticUrlPrefix = \"%s\", " - + "defaultPageClass = \"%s\"" - + " }", + + "cachingActive = %b, " + + "defaultExpiry = %d, " + + "staticUrlPrefix = \"%s\", " + + "defaultPageClass = \"%s\"" + + " }", super.toString(), cachingActive, defaultExpiry, staticUrlPrefix, defaultPageClass); } + } diff --git a/ccm-core/src/main/java/com/arsdigita/formbuilder/FormBuilderConfig.java b/ccm-core/src/main/java/com/arsdigita/formbuilder/FormBuilderConfig.java index 4cf0cba90..096f4b6c0 100755 --- a/ccm-core/src/main/java/com/arsdigita/formbuilder/FormBuilderConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/formbuilder/FormBuilderConfig.java @@ -43,9 +43,8 @@ public final class FormBuilderConfig { private Boolean interpolateEmailActions; public static FormBuilderConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(FormBuilderConfig.class); } diff --git a/ccm-core/src/main/java/com/arsdigita/globalization/GlobalizationConfig.java b/ccm-core/src/main/java/com/arsdigita/globalization/GlobalizationConfig.java index 26d034694..6d58e3c43 100644 --- a/ccm-core/src/main/java/com/arsdigita/globalization/GlobalizationConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/globalization/GlobalizationConfig.java @@ -29,17 +29,16 @@ import org.libreccm.configuration.Setting; * @author Jens Pelzetter */ @Configuration( - descBundle = "com.arsdigita.globalization.GlobalizationConfigDescription", - descKey = "globalization.config.description") + descBundle = "com.arsdigita.globalization.GlobalizationConfigDescription", + descKey = "globalization.config.description") public class GlobalizationConfig { @Setting(descKey = "globalization.config.default_charset") private String defaultCharset = "UTF-8"; public static GlobalizationConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(GlobalizationConfig.class); } @@ -76,9 +75,10 @@ public class GlobalizationConfig { @Override public String toString() { return String.format("%s{ " - + "defaultCharset = \"%s\"" - + " }", + + "defaultCharset = \"%s\"" + + " }", super.toString(), defaultCharset); } + } diff --git a/ccm-core/src/main/java/com/arsdigita/kernel/KernelConfig.java b/ccm-core/src/main/java/com/arsdigita/kernel/KernelConfig.java index 5e3f2d79a..dfc7df812 100644 --- a/ccm-core/src/main/java/com/arsdigita/kernel/KernelConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/kernel/KernelConfig.java @@ -70,9 +70,6 @@ public final class KernelConfig { private String defaultLanguage = "en"; public static KernelConfig getConfig() { -// final CdiUtil cdiUtil = new CdiUtil(); -// final ConfigurationManager confManager = cdiUtil.findBean( -// ConfigurationManager.class); final ConfigurationManager confManager = CdiUtil.createCdiUtil() .findBean(ConfigurationManager.class); return confManager.findConfiguration(KernelConfig.class); diff --git a/ccm-core/src/main/java/com/arsdigita/mail/MailConfig.java b/ccm-core/src/main/java/com/arsdigita/mail/MailConfig.java index 20d1ba25e..7cfa5a709 100755 --- a/ccm-core/src/main/java/com/arsdigita/mail/MailConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/mail/MailConfig.java @@ -50,9 +50,8 @@ public final class MailConfig { private Boolean sendHtml = false; public static MailConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(MailConfig.class); } diff --git a/ccm-core/src/main/java/com/arsdigita/notification/NotificationConfig.java b/ccm-core/src/main/java/com/arsdigita/notification/NotificationConfig.java index 3edbaf14e..946a537d0 100644 --- a/ccm-core/src/main/java/com/arsdigita/notification/NotificationConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/notification/NotificationConfig.java @@ -51,9 +51,8 @@ public final class NotificationConfig { private Integer simpleQueuePeriod = 900; public static NotificationConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(NotificationConfig.class); } diff --git a/ccm-core/src/main/java/com/arsdigita/templating/TemplatingConfig.java b/ccm-core/src/main/java/com/arsdigita/templating/TemplatingConfig.java index 5fd8daeb3..61651860a 100755 --- a/ccm-core/src/main/java/com/arsdigita/templating/TemplatingConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/templating/TemplatingConfig.java @@ -49,9 +49,8 @@ public final class TemplatingConfig { private Integer stylesheetCacheAge = 3600; public static TemplatingConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(TemplatingConfig.class); } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/UIConfig.java b/ccm-core/src/main/java/com/arsdigita/ui/UIConfig.java index fdd486525..99cb9c86b 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/UIConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/UIConfig.java @@ -55,11 +55,9 @@ public final class UIConfig { private String workspaceUrl = "/pvt/"; public static UIConfig getConfig() { -// final CdiUtil cdiUtil = new CdiUtil(); -// final ConfigurationManager confManager = cdiUtil.findBean( -// ConfigurationManager.class); - final ConfigurationManager confManager = CDI.current().select( - ConfigurationManager.class).get(); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); + return confManager.findConfiguration(UIConfig.class); } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/AdminServlet.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/AdminServlet.java index 67b1e1d90..0c91441c5 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/AdminServlet.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/AdminServlet.java @@ -116,13 +116,10 @@ public class AdminServlet ServletException, IOException { // /////// Some preparational steps /////////////// /* Determine access privilege: only logged in users may access */ -// final CdiUtil cdiUtil = new CdiUtil(); -// final Subject subject = cdiUtil.findBean(Subject.class); - final Subject subject = CDI.current().select(Subject.class).get(); -// final PermissionChecker permissionChecker = cdiUtil.findBean( -// PermissionChecker.class); - final PermissionChecker permissionChecker = CDI.current().select( - PermissionChecker.class).get(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final Subject subject = cdiUtil.findBean(Subject.class); + final PermissionChecker permissionChecker = cdiUtil.findBean( + PermissionChecker.class); final ConfigurationManager confManager = CDI.current().select(ConfigurationManager.class).get(); if (confManager == null) { @@ -172,9 +169,11 @@ public class AdminServlet // final Document doc = page.buildDocument(sreq, sresp); // Templating.getPresentationManager().servePage(doc, sreq, sresp); // } - final Page page = new Page(); + final Page page = PageFactory.buildPage("admin", "LibreCCM NG Admin"); page.add(new Label("admin")); + page.lock(); + final Document doc = page.buildDocument(sreq, sresp); Templating.getPresentationManager().servePage(doc, sreq, sresp); } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/ApplicationsAdministrationTab.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/ApplicationsAdministrationTab.java index cdc41f052..7e96d7909 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/ApplicationsAdministrationTab.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/ApplicationsAdministrationTab.java @@ -78,7 +78,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements setLeft(applicationTree); - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final org.libreccm.web.ApplicationManager appManager = cdiUtil.findBean( org.libreccm.web.ApplicationManager.class); @@ -213,7 +213,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements } } else { // Selected key is the name of a instance pane - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final ApplicationRepository appRepo = cdiUtil.findBean( ApplicationRepository.class); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/GroupEditForm.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/GroupEditForm.java index e7154b243..8a42e9fb9 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/GroupEditForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/GroupEditForm.java @@ -64,7 +64,7 @@ class GroupEditForm extends GroupForm implements FormInitListener, final Long id = (Long) state.getValue(USER_ID_PARAM); // if (id != null) { -// final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final GroupRepository groupRepository; // @@ -86,7 +86,7 @@ class GroupEditForm extends GroupForm implements FormInitListener, final PageState state = event.getPageState(); final Long id = (Long) state.getValue(GROUP_ID_PARAM); - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final GroupRepository groupRepository; // groupRepository = cdiUtil.findBean(GroupRepository.class); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/SubMemberPanel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/SubMemberPanel.java index 6e174aad7..29fe6f604 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/SubMemberPanel.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/SubMemberPanel.java @@ -81,7 +81,7 @@ class SubMemberPanel extends BoxPanel { if (key != null) { final Long userID = new Long(key); - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // final GroupManager groupManager; // final GroupRepository groupRepository; diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/UserBrowsePane.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/UserBrowsePane.java index 60d1e600b..d715c16dc 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/UserBrowsePane.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/UserBrowsePane.java @@ -113,7 +113,7 @@ class UserBrowsePane extends SegmentedPanel @Override public void actionPerformed(final ActionEvent event) { // final PageState state = event.getPageState(); -// final CdiUtil cdiUtil = new CdiUtil(); +// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final CcmSessionContext sessionContext; // sessionContext = cdiUtil.findBean(CcmSessionContext.class); @@ -143,7 +143,7 @@ class UserBrowsePane extends SegmentedPanel protected Object initialValue(final PageState state) { final Long id = (Long) state.getValue(USER_ID_PARAM); -// final CdiUtil cdiUtil = new CdiUtil(); +// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // userRepository = cdiUtil.findBean(UserRepository.class); @@ -346,7 +346,7 @@ class UserBrowsePane extends SegmentedPanel final PageState state = event.getPageState(); // final BigDecimal id = (BigDecimal) state.getValue(USER_ID_PARAM); // -// final CdiUtil cdiUtil = new CdiUtil(); +// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final LoginManager loginManager; // loginManager = cdiUtil.findBean( @@ -421,7 +421,7 @@ class UserBrowsePane extends SegmentedPanel final PageState state = event.getPageState(); final User user = getUser(state); -// final CdiUtil cdiUtil = new CdiUtil(); +// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // userRepository = cdiUtil.findBean(UserRepository.class); @@ -461,7 +461,7 @@ class UserBrowsePane extends SegmentedPanel // User user = getUser(state); // user.setBanned(true); // -// final CdiUtil cdiUtil = new CdiUtil(); +// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // userRepository = cdiUtil.findBean(UserRepository.class); @@ -492,7 +492,7 @@ class UserBrowsePane extends SegmentedPanel // User user = getUser(state); // user.setBanned(false); // -// final CdiUtil cdiUtil = new CdiUtil(); +// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // userRepository = cdiUtil.findBean(UserRepository.class); @@ -672,7 +672,7 @@ class UserBrowsePane extends SegmentedPanel PageState ps = event.getPageState(); String id = (String) m_groupList.getSelectedKey(ps); if (id != null) { - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final GroupRepository groupRepository; // groupRepository = cdiUtil @@ -706,7 +706,7 @@ class UserTableModel implements TableModel { private int index = 0; public UserTableModel() { - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // userRepository = cdiUtil.findBean(UserRepository.class); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/UserForm.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/UserForm.java index c0cec2257..9b8dbfaca 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/UserForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/UserForm.java @@ -237,7 +237,7 @@ class UserForm extends Form implements FormValidationListener, AdminConstants { /** * Verify that primary email and screen name are unique */ - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // userRepository = cdiUtil.findBean(UserRepository.class); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/UserPasswordForm.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/UserPasswordForm.java index 338318510..25d00273f 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/UserPasswordForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/UserPasswordForm.java @@ -133,7 +133,7 @@ class UserPasswordForm extends Form final PageState state = event.getPageState(); -// final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // userRepository = cdiUtil.findBean(UserRepository.class); @@ -157,7 +157,7 @@ class UserPasswordForm extends Form FormData data = event.getFormData(); HttpServletRequest req = state.getRequest(); -// final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // userRepository = cdiUtil.findBean(UserRepository.class); @@ -206,7 +206,7 @@ class UserPasswordForm extends Form final PageState state = event.getPageState(); final FormData data = event.getFormData(); - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final UserRepository userRepository; // final UserManager userManager; diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/ApplicationInfoPropertySheetModel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/ApplicationInfoPropertySheetModel.java index 414873079..fc395241d 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/ApplicationInfoPropertySheetModel.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/ApplicationInfoPropertySheetModel.java @@ -137,9 +137,8 @@ public class ApplicationInfoPropertySheetModel implements PropertySheetModel { return applicationType.description(); case SINGLETON_PATH: final String path; - final CdiUtil cdiUtil = new CdiUtil(); - final ApplicationRepository appRepo = cdiUtil.findBean( - ApplicationRepository.class); + final ApplicationRepository appRepo = CdiUtil.createCdiUtil() + .findBean(ApplicationRepository.class); final List instances = appRepo.findByType( applicationType.name()); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/MultiInstanceApplicationPane.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/MultiInstanceApplicationPane.java index 31436f4f3..afb284025 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/MultiInstanceApplicationPane.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/MultiInstanceApplicationPane.java @@ -136,8 +136,8 @@ public class MultiInstanceApplicationPane public ApplicationInstancesTableModel(final Table table, final String appType) { this.table = table; - final CdiUtil cdiUtil = new CdiUtil(); - final ApplicationRepository appRepo = cdiUtil.findBean(ApplicationRepository.class); + final ApplicationRepository appRepo = CdiUtil.createCdiUtil() + .findBean(ApplicationRepository.class); final List applications = appRepo. findByType(appType); for (CcmApplication application : applications) { diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/tree/ApplicationTreeModel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/tree/ApplicationTreeModel.java index 372a35b23..9f8e3bcfd 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/tree/ApplicationTreeModel.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/applications/tree/ApplicationTreeModel.java @@ -82,9 +82,8 @@ public class ApplicationTreeModel implements TreeModel { @Override public Iterator getChildren(final TreeNode node, final PageState state) { if (node instanceof RootTreeNode) { - final CdiUtil cdiUtil = new CdiUtil(); - final ApplicationManager appManager = cdiUtil.findBean( - ApplicationManager.class); + final ApplicationManager appManager = CdiUtil.createCdiUtil() + .findBean(ApplicationManager.class); final Collection appTypes = appManager .getApplicationTypes().values(); @@ -94,9 +93,8 @@ public class ApplicationTreeModel implements TreeModel { final ApplicationTypeTreeNode typeTreeNode = (ApplicationTypeTreeNode) node; - final CdiUtil cdiUtil = new CdiUtil(); - final ApplicationRepository appRepo = cdiUtil.findBean( - ApplicationRepository.class); + final ApplicationRepository appRepo = CdiUtil.createCdiUtil() + .findBean(ApplicationRepository.class); final List applications = appRepo.findByType( typeTreeNode.getObjecType()); @@ -113,8 +111,7 @@ public class ApplicationTreeModel implements TreeModel { private List retrieveApplicationInstances( final ApplicationType applicationType) { - final CdiUtil cdiUtil = new CdiUtil(); - final ApplicationRepository appRepo = cdiUtil.findBean( + final ApplicationRepository appRepo = CdiUtil.createCdiUtil().findBean( ApplicationRepository.class); return appRepo.findByType(applicationType.name()); @@ -122,8 +119,7 @@ public class ApplicationTreeModel implements TreeModel { private List retrieveApplicationInstances( final String appObjectType) { - final CdiUtil cdiUtil = new CdiUtil(); - final ApplicationRepository appRepo = cdiUtil.findBean( + final ApplicationRepository appRepo = CdiUtil.createCdiUtil().findBean( ApplicationRepository.class); return appRepo.findByType(appObjectType); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/ChangePasswordForm.java b/ccm-core/src/main/java/com/arsdigita/ui/login/ChangePasswordForm.java index f8e071845..38be90fa0 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/ChangePasswordForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/ChangePasswordForm.java @@ -202,7 +202,7 @@ public class ChangePasswordForm extends Form String confirmPassword = (String) m_confirmPassword.getValue(state); //check oldPassword - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final Shiro shiro = cdiUtil.findBean(Shiro.class); final UserManager userManager = cdiUtil.findBean(UserManager.class); @@ -250,7 +250,7 @@ public class ChangePasswordForm extends Form return; } - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final UserManager userManager = cdiUtil.findBean(UserManager.class); final Shiro shiro = cdiUtil.findBean(Shiro.class); final User user = shiro.getUser(); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/EmailInitListener.java b/ccm-core/src/main/java/com/arsdigita/ui/login/EmailInitListener.java index c2b1d4de5..c95d75912 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/EmailInitListener.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/EmailInitListener.java @@ -53,7 +53,7 @@ public class EmailInitListener implements FormInitListener { s_log.debug("START"); - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final Subject subject = cdiUtil.findBean(Subject.class); final Shiro shiro = cdiUtil.findBean(Shiro.class); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/LoginServlet.java b/ccm-core/src/main/java/com/arsdigita/ui/login/LoginServlet.java index 493831c01..d62e4bcc7 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/LoginServlet.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/LoginServlet.java @@ -36,6 +36,7 @@ import com.arsdigita.web.URL; import org.apache.log4j.Logger; import org.libreccm.configuration.ConfigurationManager; +import org.libreccm.security.UserRepository; import javax.inject.Inject; import javax.servlet.ServletException; @@ -129,6 +130,9 @@ public class LoginServlet extends BebopApplicationServlet { @Inject private ConfigurationManager confManager; + + @Inject + private UserRepository userRepository; /** * User extension point used to create the pages to server and setup a @@ -140,6 +144,10 @@ public class LoginServlet extends BebopApplicationServlet { public void doInit() throws ServletException { final SecurityConfig securityConfig = confManager.findConfiguration( SecurityConfig.class); + + if (userRepository == null) { + throw new IllegalStateException("User repository is not available."); + } // Allow world caching for pages without authentication, // ie, /register, /register/explain-persistent-cookies, diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/ScreenNameInitListener.java b/ccm-core/src/main/java/com/arsdigita/ui/login/ScreenNameInitListener.java index 99e903d06..fd5b6c2d3 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/ScreenNameInitListener.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/ScreenNameInitListener.java @@ -63,7 +63,7 @@ public class ScreenNameInitListener implements FormInitListener { FormData data = event.getFormData(); s_log.debug("START"); - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final Subject subject = cdiUtil.findBean(Subject.class); final Shiro shiro = cdiUtil.findBean(Shiro.class); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/UserAuthenticationListener.java b/ccm-core/src/main/java/com/arsdigita/ui/login/UserAuthenticationListener.java index bfe08c620..75d79b47c 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/UserAuthenticationListener.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/UserAuthenticationListener.java @@ -67,8 +67,7 @@ public class UserAuthenticationListener implements RequestListener { throw new IllegalStateException("User is not logged in"); } - final CdiUtil cdiUtil = new CdiUtil(); - final Subject subject = cdiUtil.findBean(Subject.class); + final Subject subject = CdiUtil.createCdiUtil().findBean(Subject.class); return subject; } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/UserEditForm.java b/ccm-core/src/main/java/com/arsdigita/ui/login/UserEditForm.java index d36e0ee42..e4af46f44 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/UserEditForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/UserEditForm.java @@ -65,8 +65,7 @@ public class UserEditForm extends UserForm @Override public Object initialValue(final PageState ps) { - final CdiUtil cdiUtil = new CdiUtil(); - final Shiro shiro = cdiUtil.findBean(Shiro.class); + final Shiro shiro = CdiUtil.createCdiUtil().findBean(Shiro.class); final User result = shiro.getUser(); return result; @@ -103,8 +102,7 @@ public class UserEditForm extends UserForm FormData data = event.getFormData(); PageState state = event.getPageState(); - final CdiUtil cdiUtil = new CdiUtil(); - final UserRepository userRepository = cdiUtil.findBean( + final UserRepository userRepository = CdiUtil.createCdiUtil().findBean( UserRepository.class); User user = getUser(state); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/UserForm.java b/ccm-core/src/main/java/com/arsdigita/ui/login/UserForm.java index e6ca0e840..26c8209b5 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/UserForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/UserForm.java @@ -51,10 +51,10 @@ import org.libreccm.security.UserRepository; * */ public abstract class UserForm extends Form - implements LoginConstants, FormInitListener, FormValidationListener { + implements LoginConstants, FormInitListener, FormValidationListener { private static final Logger LOGGER = Logger.getLogger(UserForm.class - .getName()); + .getName()); private final boolean m_newUser; @@ -69,15 +69,15 @@ public abstract class UserForm extends Form protected TextField m_answer; protected Label m_securitySectionHeader = new Label(LoginHelper - .getMessage("login.userNewForm.securitySectionHeader"), false); + .getMessage("login.userNewForm.securitySectionHeader"), false); protected Label m_securityBlurb = new Label(LoginHelper - .getMessage("login.userNewForm.securityBlurb")); + .getMessage("login.userNewForm.securityBlurb")); protected Label m_passwordBlurb = new Label(LoginHelper - .getMessage("login.userNewForm.passwordBlurb")); + .getMessage("login.userNewForm.passwordBlurb")); protected Label m_passwordLabel = new Label(PASSWORD); protected Label m_confirmationLabel = new Label(PASSWORD_CONFIRMATION); protected PasswordValidationListener m_passwordValidationListener - = new PasswordValidationListener(); + = new PasswordValidationListener(); protected NotEmptyValidationListener m_confirmationNotEmptyValidationListener = new NotEmptyValidationListener(); protected Submit m_submit = new Submit(SUBMIT); @@ -111,7 +111,7 @@ public abstract class UserForm extends Form if (m_newUser) { m_profilePart.add(new Label(LoginHelper - .getMessage("login.userNewForm.aboutYouSectionHeader"), + .getMessage("login.userNewForm.aboutYouSectionHeader"), false), ColumnPanel.FULL_WIDTH); } @@ -123,7 +123,7 @@ public abstract class UserForm extends Form m_firstName.setSize(20); m_firstName.addValidationListener(new NotEmptyValidationListener()); m_firstName.addValidationListener(new StringLengthValidationListener( - MAX_NAME_LEN)); + MAX_NAME_LEN)); m_profilePart.add(m_firstNameLabel); m_profilePart.add(m_firstName); @@ -133,7 +133,7 @@ public abstract class UserForm extends Form m_lastName.setSize(25); m_lastName.addValidationListener(new NotEmptyValidationListener()); m_lastName.addValidationListener(new StringLengthValidationListener( - MAX_NAME_LEN)); + MAX_NAME_LEN)); m_profilePart.add(m_lastNameLabel); m_profilePart.add(m_lastName); @@ -166,15 +166,15 @@ public abstract class UserForm extends Form // add(new Label("")); if (m_newUser) { m_securityPart.add(new Label(LoginHelper - .getMessage("login.userNewForm.securitySectionHeader"), + .getMessage("login.userNewForm.securitySectionHeader"), false), ColumnPanel.FULL_WIDTH); m_securityPart.add(new Label(LoginHelper - .getMessage("login.userNewForm.securityBlurb")), + .getMessage("login.userNewForm.securityBlurb")), ColumnPanel.FULL_WIDTH); m_securityPart.add(new Label(LoginHelper - .getMessage("login.userNewForm.passwordBlurb")), + .getMessage("login.userNewForm.passwordBlurb")), ColumnPanel.FULL_WIDTH); // Password @@ -186,14 +186,14 @@ public abstract class UserForm extends Form // Password confirmation m_confirm = new Password(new StringParameter( - FORM_PASSWORD_CONFIRMATION)); + FORM_PASSWORD_CONFIRMATION)); m_confirm.addValidationListener(new NotEmptyValidationListener()); m_securityPart.add(m_confirmationLabel); m_securityPart.add(m_confirm); m_securityPart.add(new Label(LoginHelper - .getMessage("login.userNewForm.questionBlurb")), + .getMessage("login.userNewForm.questionBlurb")), ColumnPanel.FULL_WIDTH); } @@ -215,13 +215,13 @@ public abstract class UserForm extends Form */ @Override public void init(final FormSectionEvent event) - throws FormProcessException { + throws FormProcessException { final PageState state = event.getPageState(); final User user = getUser(state); if (user == null) { throw new FormProcessException(LoginGlobalizationUtil.globalize( - "login.userForm.couldnt_load_user")); + "login.userForm.couldnt_load_user")); } m_firstName.setValue(state, user.getGivenName()); m_lastName.setValue(state, user.getFamilyName()); @@ -234,8 +234,9 @@ public abstract class UserForm extends Form * Gets the current user for initialising the form. * * @param state + * * @return the current user, if the form should not be initialised with user - * data. + * data. */ protected abstract User getUser(final PageState state); @@ -246,18 +247,19 @@ public abstract class UserForm extends Form * users. * * @param event + * * @throws com.arsdigita.bebop.FormProcessException */ @Override public void validate(final FormSectionEvent event) - throws FormProcessException { + throws FormProcessException { final PageState state = event.getPageState(); final FormData data = event.getFormData(); - final CdiUtil cdiUtil = new CdiUtil(); - final UserRepository userRepository = cdiUtil.findBean(UserRepository.class); - + final UserRepository userRepository = CdiUtil.createCdiUtil().findBean( + UserRepository.class); + try { if (m_newUser) { // Verify that password and confirmation match @@ -265,7 +267,7 @@ public abstract class UserForm extends Form String confirm = (String) m_confirm.getValue(state); if ((password != null) && (confirm != null) - && !password.equals(confirm)) { + && !password.equals(confirm)) { data.addError(FORM_PASSWORD_CONFIRMATION, ERROR_MISMATCH_PASSWORD); } @@ -286,7 +288,7 @@ public abstract class UserForm extends Form final String oldEmail = user.getPrimaryEmailAddress().getAddress(); final String email = (String) m_email.getValue(state); if (KernelConfig.getConfig().emailIsPrimaryIdentifier() - && email != null && !email.equals(oldEmail)) { + && email != null && !email.equals(oldEmail)) { final User result = userRepository.findByEmailAddress(email); if (result != null) { data.addError(FORM_EMAIL, ERROR_DUPLICATE_EMAIL); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/UserInfo.java b/ccm-core/src/main/java/com/arsdigita/ui/login/UserInfo.java index 583612086..c4873abe7 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/UserInfo.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/UserInfo.java @@ -37,7 +37,6 @@ import org.libreccm.security.User; import org.libreccm.web.ApplicationRepository; import org.libreccm.web.CcmApplication; - /** * A reusable Bebop component to display the primary attributes of the currently * logged in user. Users can extend this class to provide information about @@ -105,10 +104,9 @@ public class UserInfo extends SimpleContainer { m_contentCenters = new ArrayList<>(); - final CdiUtil cdiUtil = new CdiUtil(); - final ApplicationRepository appRepo = cdiUtil.findBean( - ApplicationRepository.class); - + final ApplicationRepository appRepo = CdiUtil + .createCdiUtil().findBean(ApplicationRepository.class); + m_contentCenters = appRepo.findByType( "com.arsdigita.cms.ContentCenter"); } @@ -185,6 +183,7 @@ public class UserInfo extends SimpleContainer { /** * @param state + * * @return true if the user is logged in * */ @@ -194,6 +193,7 @@ public class UserInfo extends SimpleContainer { /** * @param state + * * @return the User object for which we are generating information * * @throws IllegalStateException if user is not logged in. Call @@ -207,11 +207,10 @@ public class UserInfo extends SimpleContainer { if (!isLoggedIn(state)) { throw new IllegalStateException("user is not logged in"); } - - final CdiUtil cdiUtil = new CdiUtil(); - final Shiro shiro = cdiUtil.findBean(Shiro.class); + + final Shiro shiro = CdiUtil.createCdiUtil().findBean(Shiro.class); final User user = shiro.getUser(); - + return user; } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/UserLoginForm.java b/ccm-core/src/main/java/com/arsdigita/ui/login/UserLoginForm.java index 2299bd253..f0d7afe45 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/UserLoginForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/UserLoginForm.java @@ -141,27 +141,6 @@ public class UserLoginForm extends Form implements LoginConstants, final boolean autoRegistrationOn) { super(FORM_NAME, panel); -// final ConfigurationManager confManager = CDI.current().select( -// ConfigurationManager.class).get(); -// final BeanManager beanManager = CDI.current().getBeanManager(); -// final Set> beans = beanManager.getBeans( -// ConfigurationManager.class); -// final Iterator> iterator = beans.iterator(); -// final ConfigurationManager confManager; -// if (iterator.hasNext()) { -// @SuppressWarnings("unchecked") -// final Bean bean -// = (Bean) iterator -// .next(); -// final CreationalContext ctx = beanManager. -// createCreationalContext(bean); -// -// confManager = (ConfigurationManager) beanManager.getReference( -// bean, ConfigurationManager.class, ctx); -// } else { -// throw new UncheckedWrapperException( -// "Failed to lookup ConfigurationManager"); -// } final ConfigurationManager confManager = CdiUtil.createCdiUtil() .findBean(ConfigurationManager.class); securityConfig = confManager.findConfiguration(SecurityConfig.class); @@ -378,8 +357,7 @@ public class UserLoginForm extends Form implements LoginConstants, throws FormProcessException { PageState state = event.getPageState(); - final CdiUtil cdiUtil = new CdiUtil(); - final Subject subject = cdiUtil.findBean(Subject.class); + final Subject subject = CdiUtil.createCdiUtil().findBean(Subject.class); final UsernamePasswordToken token = new UsernamePasswordToken( m_loginName.getValue(state).toString(), @@ -389,11 +367,12 @@ public class UserLoginForm extends Form implements LoginConstants, try { LOGGER.debug("Trying to login user {}...", subject.toString()); subject.login(token); + LOGGER.debug("User {} logged in successfully.", token.getUsername()); } catch (AuthenticationException ex) { onLoginFail(event, ex); + LOGGER.debug("Login failed.", ex); } - LOGGER.debug("User {} logged in successfully.", token.getUsername()); LOGGER.debug("subject = {}", subject.toString()); LOGGER.debug("Current session is: {}", state.getRequest().getSession().getId()); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/UserLogoutListener.java b/ccm-core/src/main/java/com/arsdigita/ui/login/UserLogoutListener.java index ee020463e..7a03a0c04 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/UserLogoutListener.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/UserLogoutListener.java @@ -34,7 +34,7 @@ import org.libreccm.cdi.utils.CdiUtil; public class UserLogoutListener implements ActionListener { private static final Logger s_log = Logger.getLogger( - UserLogoutListener.class); + UserLogoutListener.class); /** * Logs out the user. @@ -44,9 +44,7 @@ public class UserLogoutListener implements ActionListener { */ @Override public void actionPerformed(final ActionEvent event) { - - final CdiUtil cdiUtil = new CdiUtil(); - final Subject subject = cdiUtil.findBean(Subject.class); + final Subject subject = CdiUtil.createCdiUtil().findBean(Subject.class); subject.logout(); } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/UserNewForm.java b/ccm-core/src/main/java/com/arsdigita/ui/login/UserNewForm.java index 41843ce69..04acac9e8 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/login/UserNewForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/login/UserNewForm.java @@ -151,7 +151,7 @@ public class UserNewForm extends UserForm implements FormInitListener, final Exception[] formExceptions = new Exception[]{null}; - final CdiUtil cdiUtil = new CdiUtil(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final Shiro shiro = cdiUtil.findBean(Shiro.class); shiro.getSystemUser().execute(new Callable() { @@ -159,9 +159,8 @@ public class UserNewForm extends UserForm implements FormInitListener, @Override public Void call() throws Exception { - final CdiUtil cdiUtil = new CdiUtil(); - final UserManager userManager = cdiUtil.findBean( - UserManager.class); + final UserManager userManager = CdiUtil.createCdiUtil() + .findBean(UserManager.class); userManager.createUser(firstName, lastName, screenName, diff --git a/ccm-core/src/main/java/com/arsdigita/web/WebConfig.java b/ccm-core/src/main/java/com/arsdigita/web/WebConfig.java index 1a5052d7c..10f52b3bb 100644 --- a/ccm-core/src/main/java/com/arsdigita/web/WebConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/web/WebConfig.java @@ -22,20 +22,16 @@ import com.arsdigita.util.UncheckedWrapperException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.message.ParameterizedMessage; +import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.configuration.Configuration; import org.libreccm.configuration.ConfigurationManager; import org.libreccm.configuration.Setting; import java.lang.reflect.Method; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import java.util.StringJoiner; -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.CDI; import javax.validation.ConstraintViolation; import javax.validation.Validation; @@ -84,36 +80,9 @@ public final class WebConfig { private String dynamicHostProviderClass; public static WebConfig getConfig() { - final ConfigurationManager confManager = CDI.current().select( - ConfigurationManager.class).get(); -// final BeanManager beanManager = CDI.current().getBeanManager(); -// final Set> beans = beanManager.getBeans( -// ConfigurationManager.class); -// final Iterator> iterator = beans.iterator(); -// final ConfigurationManager confManager; -// if (iterator.hasNext()) { -// @SuppressWarnings("unchecked") -// final Bean bean -// = (Bean) iterator -// .next(); -// final CreationalContext ctx = beanManager -// .createCreationalContext(bean); -// -// confManager = (ConfigurationManager) beanManager.getReference( -// bean, ConfigurationManager.class, ctx); -// } else { -// LOGGER.error(new ParameterizedMessage( -// "No CDI Bean for type {} found.", -// ConfigurationManager.class.getName())); -// throw new IllegalStateException(String.format( -// "No CDI Bean for type \"%s\" found", -// ConfigurationManager.class.getName())); -// } - -// final CdiUtil cdiUtil = new CdiUtil(); -// final ConfigurationManager confManager = cdiUtil.findBean( -// ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(WebConfig.class); } diff --git a/ccm-core/src/main/java/com/arsdigita/workflow/simple/WorkflowConfig.java b/ccm-core/src/main/java/com/arsdigita/workflow/simple/WorkflowConfig.java index 3a40dbbfc..bf213043a 100755 --- a/ccm-core/src/main/java/com/arsdigita/workflow/simple/WorkflowConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/workflow/simple/WorkflowConfig.java @@ -39,9 +39,8 @@ public final class WorkflowConfig { private String alertsSender; public static WorkflowConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(WorkflowConfig.class); } diff --git a/ccm-core/src/main/java/com/arsdigita/xml/XmlConfig.java b/ccm-core/src/main/java/com/arsdigita/xml/XmlConfig.java index 631ee3532..dc85b10f1 100644 --- a/ccm-core/src/main/java/com/arsdigita/xml/XmlConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/xml/XmlConfig.java @@ -72,9 +72,8 @@ public final class XmlConfig { private Boolean fullTimeFormatterEnabled = false; public static XmlConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(XmlConfig.class); } @@ -117,11 +116,11 @@ public final class XmlConfig { return domBuilder; } - /** + /** * Returns the Document Builder factory class name to use * * The method assures that the return value is a valid class name. - * + * * Not used at the moment. * * @return String Document Builder factory class name @@ -134,20 +133,19 @@ public final class XmlConfig { return getDefaultDomBuilderFactoryClassname(); } } - + /** - * Returns the class name of the default {@link DocumentBuilderFactory}. - * This method encapsulates the default value so that is easy to change. The method is only for - * use by the classes in the {@code com.arsdigita.xml} package, therefore the method is - * only accessible from the package. - * - * @return + * Returns the class name of the default {@link DocumentBuilderFactory}. + * This method encapsulates the default value so that is easy to change. The + * method is only for use by the classes in the {@code com.arsdigita.xml} + * package, therefore the method is only accessible from the package. + * + * @return */ String getDefaultDomBuilderFactoryClassname() { return DOM_XERCES; } - public void setDomBuilder(final String domBuilder) { this.domBuilder = domBuilder; } @@ -156,11 +154,11 @@ public final class XmlConfig { return saxParser; } - /** + /** * Returns the Sax Parser factory class name to use. * * The method assures that the return value is a valid class name. - * + * * Not used at the moment. * * @return String Sax Parser factory class name @@ -175,18 +173,17 @@ public final class XmlConfig { } /** - * Returns the class name of the default {@link SAXParserFactory}. - * This method encapsulates the default value so that is easy to change. The method is only for - * use by the classes in the {@code com.arsdigita.xml} package, therefore the method is - * only visible in the package. - * - * @return + * Returns the class name of the default {@link SAXParserFactory}. This + * method encapsulates the default value so that is easy to change. The + * method is only for use by the classes in the {@code com.arsdigita.xml} + * package, therefore the method is only visible in the package. + * + * @return */ String getDefaultSaxParserFactoryClassname() { return SAX_XERCES; } - public void setSaxParser(final String saxParser) { this.saxParser = saxParser; } diff --git a/ccm-core/src/main/java/com/arsdigita/xml/formatters/DateFormatterConfig.java b/ccm-core/src/main/java/com/arsdigita/xml/formatters/DateFormatterConfig.java index 56745b5a1..5663fe4df 100755 --- a/ccm-core/src/main/java/com/arsdigita/xml/formatters/DateFormatterConfig.java +++ b/ccm-core/src/main/java/com/arsdigita/xml/formatters/DateFormatterConfig.java @@ -36,9 +36,8 @@ public final class DateFormatterConfig { private String locale = null; public static DateFormatterConfig getConfig() { - final CdiUtil cdiUtil = new CdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); + final ConfigurationManager confManager = CdiUtil.createCdiUtil() + .findBean(ConfigurationManager.class); return confManager.findConfiguration(DateFormatterConfig.class); } diff --git a/ccm-core/src/main/java/org/libreccm/cdi/utils/CdiUtil.java b/ccm-core/src/main/java/org/libreccm/cdi/utils/CdiUtil.java index 640c2934f..a1a101c05 100644 --- a/ccm-core/src/main/java/org/libreccm/cdi/utils/CdiUtil.java +++ b/ccm-core/src/main/java/org/libreccm/cdi/utils/CdiUtil.java @@ -28,7 +28,6 @@ import java.util.Set; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; -import javax.enterprise.inject.spi.CDI; import javax.naming.InitialContext; import javax.naming.NamingException; @@ -42,10 +41,6 @@ public class CdiUtil { private final BeanManager beanManager; - public CdiUtil() { - beanManager = CDI.current().getBeanManager(); - } - private CdiUtil(final BeanManager beanManager) { this.beanManager = beanManager; } diff --git a/ccm-core/src/main/java/org/libreccm/security/Group.java b/ccm-core/src/main/java/org/libreccm/security/Group.java index 3ba918b05..286a8f6a1 100644 --- a/ccm-core/src/main/java/org/libreccm/security/Group.java +++ b/ccm-core/src/main/java/org/libreccm/security/Group.java @@ -21,10 +21,10 @@ package org.libreccm.security; import static org.libreccm.core.CoreConstants.*; import java.io.Serializable; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; +import java.util.HashSet; import java.util.Objects; +import java.util.Set; import javax.persistence.Entity; import javax.persistence.NamedQueries; @@ -65,21 +65,21 @@ public class Group extends Party implements Serializable { @OneToMany(mappedBy = "group") @XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS) @XmlElement(name = "group-membership", namespace = CORE_XML_NS) - private List memberships = new ArrayList<>(); + private Set memberships = new HashSet<>(); protected Group() { super(); } - public List getMemberships() { + public Set getMemberships() { if (memberships == null) { return null; } else { - return Collections.unmodifiableList(memberships); + return Collections.unmodifiableSet(memberships); } } - protected void setMemberships(final List memberships) { + protected void setMemberships(final Set memberships) { this.memberships = memberships; } diff --git a/ccm-core/src/main/java/org/libreccm/security/Party.java b/ccm-core/src/main/java/org/libreccm/security/Party.java index 32c544fb8..2e6b681d0 100644 --- a/ccm-core/src/main/java/org/libreccm/security/Party.java +++ b/ccm-core/src/main/java/org/libreccm/security/Party.java @@ -23,10 +23,10 @@ import static org.libreccm.core.CoreConstants.*; import org.libreccm.core.DefaultEntityGraph; import java.io.Serializable; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; +import java.util.HashSet; import java.util.Objects; +import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; @@ -91,7 +91,7 @@ public class Party implements Serializable { @OneToMany(mappedBy = "member") @XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS) @XmlElement(name = "role-membership", namespace = CORE_XML_NS) - private List roleMemberships = new ArrayList<>(); + private Set roleMemberships = new HashSet<>(); protected Party() { super(); @@ -113,15 +113,15 @@ public class Party implements Serializable { this.name = name; } - public List getRoleMemberships() { + public Set getRoleMemberships() { if (roleMemberships == null) { return null; } else { - return Collections.unmodifiableList(roleMemberships); + return Collections.unmodifiableSet(roleMemberships); } } - protected void setRoleMemberships(final List roleMemberships) { + protected void setRoleMemberships(final Set roleMemberships) { this.roleMemberships = roleMemberships; } diff --git a/ccm-core/src/main/java/org/libreccm/security/Role.java b/ccm-core/src/main/java/org/libreccm/security/Role.java index 97941088b..de0e36616 100644 --- a/ccm-core/src/main/java/org/libreccm/security/Role.java +++ b/ccm-core/src/main/java/org/libreccm/security/Role.java @@ -26,8 +26,10 @@ import org.libreccm.workflow.TaskAssignment; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; @@ -83,7 +85,7 @@ public class Role implements Serializable { @OneToMany(mappedBy = "role") @XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS) @XmlElement(name = "role-membership", namespace = CORE_XML_NS) - private List memberships = new ArrayList<>(); + private Set memberships = new HashSet<>(); /** * Permissions granted to the role. @@ -116,15 +118,15 @@ public class Role implements Serializable { this.name = name; } - public List getMemberships() { + public Set getMemberships() { if (memberships == null) { return null; } else { - return Collections.unmodifiableList(memberships); + return Collections.unmodifiableSet(memberships); } } - protected void setMemberships(final List memberships) { + protected void setMemberships(final Set memberships) { this.memberships = memberships; } diff --git a/ccm-core/src/main/java/org/libreccm/security/SecuredCollection.java b/ccm-core/src/main/java/org/libreccm/security/SecuredCollection.java index cccab8a9b..a99474597 100644 --- a/ccm-core/src/main/java/org/libreccm/security/SecuredCollection.java +++ b/ccm-core/src/main/java/org/libreccm/security/SecuredCollection.java @@ -111,9 +111,8 @@ public class SecuredCollection implements Collection { @Override @SuppressWarnings("unchecked") public Object[] toArray() { - final CdiUtil cdiUtil = new CdiUtil(); - final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); + final PermissionChecker permissionChecker = CdiUtil.createCdiUtil() + .findBean(PermissionChecker.class); final Object[] objects = collection.toArray(); for (int i = 0; i < objects.length; i++) { @@ -129,9 +128,8 @@ public class SecuredCollection implements Collection { @Override @SuppressWarnings({"unchecked", "PMD.UseVarargs"}) public T[] toArray(final T[] array) { - final CdiUtil cdiUtil = new CdiUtil(); - final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); + final PermissionChecker permissionChecker = CdiUtil.createCdiUtil() + .findBean(PermissionChecker.class); final T[] objects = collection.toArray(array); for (int i = 0; i < objects.length; i++) { diff --git a/ccm-core/src/main/java/org/libreccm/security/SecuredEntrySet.java b/ccm-core/src/main/java/org/libreccm/security/SecuredEntrySet.java index fb3265f0b..f46709b45 100644 --- a/ccm-core/src/main/java/org/libreccm/security/SecuredEntrySet.java +++ b/ccm-core/src/main/java/org/libreccm/security/SecuredEntrySet.java @@ -90,10 +90,9 @@ class SecuredEntrySet, K, V extends CcmObject> @Override @SuppressWarnings("unchecked") public Object[] toArray() { - final CdiUtil cdiUtil = new CdiUtil(); - final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); - + final PermissionChecker permissionChecker = CdiUtil.createCdiUtil() + .findBean(PermissionChecker.class); + final Object[] entries = set.toArray(); for (int i = 0; i < entries.length; i++) { final E entry = (E) entries[i]; @@ -109,10 +108,9 @@ class SecuredEntrySet, K, V extends CcmObject> @Override @SuppressWarnings({"unchecked", "PMD.UseVarargs"}) public T[] toArray(final T[] array) { - final CdiUtil cdiUtil = new CdiUtil(); - final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); - + final PermissionChecker permissionChecker = CdiUtil.createCdiUtil() + .findBean(PermissionChecker.class); + final E[] entries = (E[]) set.toArray(array); for (int i = 0; i < entries.length; i++) { if (!permissionChecker.isPermitted(requiredPrivilege, diff --git a/ccm-core/src/main/java/org/libreccm/security/SecuredHelper.java b/ccm-core/src/main/java/org/libreccm/security/SecuredHelper.java index 45bbbea99..839a7bc85 100644 --- a/ccm-core/src/main/java/org/libreccm/security/SecuredHelper.java +++ b/ccm-core/src/main/java/org/libreccm/security/SecuredHelper.java @@ -18,7 +18,6 @@ */ package org.libreccm.security; - import static org.libreccm.core.CoreConstants.*; import org.apache.logging.log4j.LogManager; @@ -34,7 +33,7 @@ import org.libreccm.core.CcmObject; class SecuredHelper { private final static Logger LOGGER = LogManager.getLogger( - SecuredHelper.class); + SecuredHelper.class); /** * Class of the objects in the collection. @@ -56,20 +55,21 @@ class SecuredHelper { * object with the provided privilege. * * @param object The object to check. + * * @return The provided {@code object} if the current subject has the - * permission to access it with the provided {@code privilege}. Otherwise a - * placeholder object is returned. The {@link CcmObject#displayName} - * property of these object is set to {@code Access denied}. + * permission to access it with the provided {@code privilege}. + * Otherwise a placeholder object is returned. The + * {@link CcmObject#displayName} property of these object is set to + * {@code Access denied}. */ protected E canAccess(final E object) { if (object == null) { return null; } - - final CdiUtil cdiUtil = new CdiUtil(); - final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); - + + final PermissionChecker permissionChecker = CdiUtil.createCdiUtil() + .findBean(PermissionChecker.class); + if (permissionChecker.isPermitted(requiredPrivilege, object)) { return object; } else { @@ -81,17 +81,18 @@ class SecuredHelper { * Helper method for creating an Access denied placeholder object. * * @return An object of the provided {@link #clazz} with it's - * {@link CcmObject#displayName} property set to {@code Access denied}. + * {@link CcmObject#displayName} property set to + * {@code Access denied}. */ protected E generateAccessDeniedObject() { try { final E placeholder = clazz.newInstance(); placeholder.setDisplayName(ACCESS_DENIED); - + return placeholder; } catch (InstantiationException | IllegalAccessException ex) { LOGGER.error( - "Failed to create placeholder object. Returing null.", ex); + "Failed to create placeholder object. Returing null.", ex); return null; } } diff --git a/ccm-core/src/main/java/org/libreccm/security/User.java b/ccm-core/src/main/java/org/libreccm/security/User.java index e92577363..7c9235325 100644 --- a/ccm-core/src/main/java/org/libreccm/security/User.java +++ b/ccm-core/src/main/java/org/libreccm/security/User.java @@ -26,8 +26,10 @@ import org.libreccm.core.EmailAddress; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Set; import javax.persistence.AssociationOverride; import javax.persistence.CollectionTable; @@ -43,8 +45,8 @@ import javax.persistence.NamedEntityGraph; import javax.persistence.NamedEntityGraphs; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import javax.persistence.NamedSubgraph; import javax.persistence.OneToMany; -import javax.persistence.OrderColumn; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.xml.bind.annotation.XmlElement; @@ -68,12 +70,28 @@ import javax.xml.bind.annotation.XmlTransient; + "u.primaryEmailAddress.address = :emailAddress") }) @NamedEntityGraphs({ - @NamedEntityGraph(name = "User.withGroupAndRoleMemberships", - attributeNodes = { - @NamedAttributeNode( - value = "groupMemberships"), - @NamedAttributeNode( - value = "roleMemberships")}) + @NamedEntityGraph( + name = "User.withGroupAndRoleMemberships", + attributeNodes = { + @NamedAttributeNode( + value = "groupMemberships"), + @NamedAttributeNode( + value = "roleMemberships", + subgraph = "role")}, + subgraphs = { + @NamedSubgraph( + name = "role", + attributeNodes = { + @NamedAttributeNode(value = "role", + subgraph = "permissions") + }), + @NamedSubgraph( + name = "permissions", + attributeNodes = { + @NamedAttributeNode(value = "permissions")} + ) + }) + }) @DefaultEntityGraph("User.withGroupAndRoleMemberships") @XmlRootElement(name = "user", namespace = CORE_XML_NS) @@ -157,7 +175,7 @@ public class User extends Party implements Serializable { @OneToMany(mappedBy = "member") @XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS) @XmlElement(name = "group-membership", namespace = CORE_XML_NS) - private List groupMemberships = new ArrayList<>(); + private Set groupMemberships = new HashSet<>(); protected User() { super(); @@ -232,12 +250,12 @@ public class User extends Party implements Serializable { this.passwordResetRequired = passwordResetRequired; } - public List getGroupMemberships() { - return Collections.unmodifiableList(groupMemberships); + public Set getGroupMemberships() { + return Collections.unmodifiableSet(groupMemberships); } protected void setGroupMemberships( - final List groupMemberships) { + final Set groupMemberships) { this.groupMemberships = groupMemberships; } diff --git a/ccm-core/src/main/java/org/libreccm/security/UserRepository.java b/ccm-core/src/main/java/org/libreccm/security/UserRepository.java index 41c523895..dff354952 100644 --- a/ccm-core/src/main/java/org/libreccm/security/UserRepository.java +++ b/ccm-core/src/main/java/org/libreccm/security/UserRepository.java @@ -23,6 +23,7 @@ import org.libreccm.core.AbstractEntityRepository; import java.util.List; import java.util.Optional; +import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.RequestScoped; import javax.persistence.EntityGraph; import javax.persistence.TypedQuery;