Java tutorial
/* * Copyright (c) 2002-2014, Mairie de Paris * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright notice * and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice * and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * License 1.0 */ package fr.paris.lutece.plugins.mylutece.modules.database.authentication.web; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.DatabaseHome; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.DatabaseUser; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.DatabaseUserFilter; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.DatabaseUserHome; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.Group; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.GroupFilter; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.GroupHome; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.business.GroupRoleHome; import fr.paris.lutece.plugins.mylutece.modules.database.authentication.service.DatabaseService; import fr.paris.lutece.portal.business.role.Role; import fr.paris.lutece.portal.business.role.RoleHome; import fr.paris.lutece.portal.service.message.AdminMessage; import fr.paris.lutece.portal.service.message.AdminMessageService; import fr.paris.lutece.portal.service.template.AppTemplateService; import fr.paris.lutece.portal.service.util.AppPathService; import fr.paris.lutece.portal.service.util.AppPropertiesService; import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService; import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean; import fr.paris.lutece.portal.web.constants.Messages; import fr.paris.lutece.portal.web.constants.Parameters; import fr.paris.lutece.portal.web.util.LocalizedPaginator; import fr.paris.lutece.util.ReferenceItem; import fr.paris.lutece.util.ReferenceList; import fr.paris.lutece.util.html.HtmlTemplate; import fr.paris.lutece.util.html.ItemNavigator; import fr.paris.lutece.util.html.Paginator; import fr.paris.lutece.util.sort.AttributeComparator; import fr.paris.lutece.util.url.UrlItem; import org.apache.commons.lang.StringUtils; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; /** * This class provides the user interface to manage Lutece group features ( manage, create, modify, remove ) */ public class GroupJspBean extends PluginAdminPageJspBean { // Right public static final String RIGHT_GROUPS_MANAGEMENT = "DATABASE_GROUPS_MANAGEMENT"; // Constants private static final String QUESTION_MARK = "?"; private static final String EQUAL = "="; private static final String AMPERSAND = "&"; private static final String SPACE = " "; private static final String OPEN_BRACKET = "("; private static final String CLOSED_BRACKET = ")"; private static final String SHARP = "#"; // JSP private static final String JSP_URL_DO_REMOVE_GROUP = "jsp/admin/plugins/mylutece/modules/database/DoRemoveGroup.jsp"; private static final String JSP_URL_MODIFY_GROUP = "jsp/admin/plugins/mylutece/modules/database/ModifyGroup.jsp"; private static final String JSP_URL_MANAGE_ROLES_GROUP = "jsp/admin/plugins/mylutece/modules/database/ManageRolesGroup.jsp"; private static final String JSP_URL_MANAGE_USERS_GROUP = "jsp/admin/plugins/mylutece/modules/database/ManageUsersGroup.jsp"; private static final String JSP_MODIFY_GROUP = "ModifyGroup.jsp"; private static final String JSP_MANAGE_ROLES_GROUP = "ManageRolesGroup.jsp"; private static final String JSP_MANAGE_GROUPS = "ManageGroups.jsp"; private static final String JSP_MANAGE_USERS_GROUP = "ManageUsersGroup.jsp"; //Markers private static final String MARK_GROUPS_LIST = "groups_list"; private static final String MARK_GROUP = "group"; private static final String MARK_ROLES_LIST = "role_list"; private static final String MARK_ROLES_LIST_FOR_GROUP = "group_role_list"; private static final String MARK_PAGINATOR = "paginator"; private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page"; private static final String MARK_ITEM_NAVIGATOR = "item_navigator"; private static final String MARK_SEARCH_IS_SEARCH = "search_is_search"; private static final String MARK_SORT_SEARCH_ATTRIBUTE = "sort_search_attribute"; private static final String MARK_SEARCH_GROUP_FILTER = "search_group_filter"; private static final String MARK_AVAILABLE_USERS = "available_users"; private static final String MARK_ASSIGNED_USERS = "assigned_users"; private static final String MARK_ASSIGNED_USERS_NUMBER = "assigned_users_number"; // Parameters private static final String PARAMETER_GROUP_KEY = "group_key"; private static final String PARAMETER_GROUP_DESCRIPTION = "group_description"; private static final String PARAMETER_ROLE_KEY = "role_key"; private static final String PARAMETER_CANCEL = "cancel"; private static final String PARAMETER_MYLUTECE_DATABASE_USER_ID = "mylutece_database_user_id"; private static final String PARAMETER_ANCHOR = "anchor"; private static final String PARAMETER_AVAILABLE_USERS = "available_users"; private static final String PARAMETER_MODIFY_GROUP = "modify_group"; private static final String PARAMETER_ASSIGN_USER = "assign_user"; private static final String PARAMETER_ASSIGN_ROLE = "assign_role"; // Templates private static final String TEMPLATE_MANAGE_GROUPS = "admin/plugins/mylutece/modules/database/manage_groups.html"; private static final String TEMPLATE_CREATE_GROUP = "admin/plugins/mylutece/modules/database/create_group.html"; private static final String TEMPLATE_GROUP_MODIFY = "admin/plugins/mylutece/modules/database/modify_group.html"; private static final String TEMPLATE_MANAGE_ROLES_GROUP = "admin/plugins/mylutece/modules/database/manage_roles_group.html"; private static final String TEMPLATE_MANAGE_USERS_GROUP = "admin/plugins/mylutece/modules/database/manage_users_group.html"; // Properties private static final String PROPERTY_PAGE_TITLE_CREATE_GROUP = "module.mylutece.database.create_group.pageTitle"; private static final String PROPERTY_PAGE_TITLE_MODIFY_GROUP = "module.mylutece.database.modify_group.pageTitle"; private static final String PROPERTY_PAGE_TITLE_MANAGE_ROLES_GROUP = "module.mylutece.database.manage_roles_group.pageTitle"; private static final String PROPERTY_GROUPS_PER_PAGE = "paginator.groups.itemsPerPage"; private static final String PROPERTY_PAGE_TITLE_MANAGE_USERS_GROUP = "module.mylutece.database.manage_users_group.pageTitle"; private static final String PROPERTY_USERS_PER_PAGE = "paginator.users.itemsPerPage"; // Message private static final String MESSAGE_GROUP_EXIST = "module.mylutece.database.message.groupExist"; private static final String MESSAGE_CONFIRM_REMOVE = "module.mylutece.database.message.confirmRemoveGroup"; private static final String MESSAGE_ERROR_MODIFY = "module.mylutece.database.message.errorModifyGroup"; private static final String MESSAGE_ERROR_REMOVE = "module.mylutece.database.message.errorRemoveGroup"; private static final String MESSAGE_ERROR_MANAGE_GROUPS = "module.mylutece.database.message.errorManageGroups"; private int _nItemsPerPage; private int _nDefaultItemsPerPage; private String _strCurrentPageIndex; private Map<String, ItemNavigator> _itemNavigators = new HashMap<String, ItemNavigator>(); private GroupFilter _gFilter; private String _strSortedAttributeName; private boolean _bIsAscSort; private DatabaseService _databaseService = DatabaseService.getService(); /** * Creates a new GroupJspBean object. */ public GroupJspBean() { } /** * Returns Group management form * @param request The Http request * @return Html form */ public String getManageGroups(HttpServletRequest request) { setPageTitleProperty(null); // Reinit session reinitItemNavigators(); List<Group> listGroups = getAuthorizedGroups(); // FILTER _gFilter = new GroupFilter(); boolean bIsSearch = _gFilter.setGroupFilter(request); List<Group> listFilteredGroups = GroupHome.findByFilter(_gFilter, getPlugin()); List<Group> listAvailableGroups = new ArrayList<Group>(); for (Group filteredGroup : listFilteredGroups) { for (Group group : listGroups) { if (filteredGroup.getGroupKey().equals(group.getGroupKey())) { listAvailableGroups.add(group); } } } // SORT _strSortedAttributeName = request.getParameter(Parameters.SORTED_ATTRIBUTE_NAME); String strAscSort = null; if (_strSortedAttributeName != null) { strAscSort = request.getParameter(Parameters.SORTED_ASC); _bIsAscSort = Boolean.parseBoolean(strAscSort); Collections.sort(listAvailableGroups, new AttributeComparator(_strSortedAttributeName, _bIsAscSort)); } String strURL = getHomeUrl(request); UrlItem url = new UrlItem(strURL); if (_strSortedAttributeName != null) { url.addParameter(Parameters.SORTED_ATTRIBUTE_NAME, _strSortedAttributeName); } if (strAscSort != null) { url.addParameter(Parameters.SORTED_ASC, strAscSort); } String strSortSearchAttribute = StringUtils.EMPTY; if (bIsSearch) { _gFilter.setUrlAttributes(url); if (StringUtils.isNotBlank(_gFilter.getUrlAttributes())) { strSortSearchAttribute = AMPERSAND + _gFilter.getUrlAttributes(); } } _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt(PROPERTY_GROUPS_PER_PAGE, 50); _strCurrentPageIndex = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex); _nItemsPerPage = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, _nDefaultItemsPerPage); LocalizedPaginator<Group> paginator = new LocalizedPaginator<Group>(listAvailableGroups, _nItemsPerPage, url.getUrl(), Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale()); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_NB_ITEMS_PER_PAGE, "" + _nItemsPerPage); model.put(MARK_PAGINATOR, paginator); model.put(MARK_GROUPS_LIST, paginator.getPageItems()); model.put(MARK_SEARCH_IS_SEARCH, bIsSearch); model.put(MARK_SEARCH_GROUP_FILTER, _gFilter); model.put(MARK_SORT_SEARCH_ATTRIBUTE, strSortSearchAttribute); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MANAGE_GROUPS, getLocale(), model); return getAdminPage(template.getHtml()); } /** * Insert a new group * @param request The HTTP request * @return String The html code page */ public String getCreateGroup(HttpServletRequest request) { setPageTitleProperty(PROPERTY_PAGE_TITLE_CREATE_GROUP); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_CREATE_GROUP, getLocale()); return getAdminPage(template.getHtml()); } /** * Create Group * @param request The HTTP request * @return String The url page */ public String doCreateGroup(HttpServletRequest request) { String strGroupKey = request.getParameter(PARAMETER_GROUP_KEY); String strGroupDescription = request.getParameter(PARAMETER_GROUP_DESCRIPTION); // Mandatory field if (strGroupKey.length() == 0) { return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP); } // check if group exist if (GroupHome.findByPrimaryKey(strGroupKey, getPlugin()) != null) { return AdminMessageService.getMessageUrl(request, MESSAGE_GROUP_EXIST, AdminMessage.TYPE_STOP); } Group group = new Group(); group.setGroupKey(strGroupKey); group.setGroupDescription(strGroupDescription); GroupHome.create(group, getPlugin()); return getHomeUrl(request); } /** * * @param request The HTTP request * @return String The html code page */ public String getModifyGroup(HttpServletRequest request) { setPageTitleProperty(PROPERTY_PAGE_TITLE_MODIFY_GROUP); Group selectedGroup = getGroupFromRequest(request); if (selectedGroup == null) { return getCreateGroup(request); } // ASSIGNED USERS NUMBER List<DatabaseUser> listAllAssignedUsers = DatabaseHome .findGroupUsersFromGroupKey(selectedGroup.getGroupKey(), getPlugin()); int nAssignedUsersNumber = listAllAssignedUsers.size(); // ITEM NAVIGATION setItemNavigator(PARAMETER_MODIFY_GROUP, selectedGroup.getGroupKey(), AppPathService.getBaseUrl(request) + JSP_URL_MODIFY_GROUP); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_GROUP, selectedGroup); model.put(MARK_ITEM_NAVIGATOR, _itemNavigators.get(PARAMETER_MODIFY_GROUP)); model.put(MARK_ASSIGNED_USERS_NUMBER, nAssignedUsersNumber); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_GROUP_MODIFY, getLocale(), model); return getAdminPage(template.getHtml()); } /** * Modify group * @param request The HTTP request * @return String The url page */ public String doModifyGroup(HttpServletRequest request) { String strReturn; String strActionCancel = request.getParameter(PARAMETER_CANCEL); if (strActionCancel != null) { strReturn = JSP_MANAGE_GROUPS; } else { String strGroupKey = request.getParameter(PARAMETER_GROUP_KEY); String strGroupDescription = request.getParameter(PARAMETER_GROUP_DESCRIPTION); Group group = getGroupFromRequest(request); if (group == null) { return AdminMessageService.getMessageUrl(request, MESSAGE_ERROR_MODIFY, AdminMessage.TYPE_ERROR); } // Mandatory field if (strGroupKey.length() == 0) { return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP); } group.setGroupKey(strGroupKey); group.setGroupDescription(strGroupDescription); GroupHome.update(group, getPlugin()); strReturn = JSP_MODIFY_GROUP + QUESTION_MARK + PARAMETER_GROUP_KEY + EQUAL + group.getGroupKey(); } return strReturn; } /** * confirm Delete Group * @param request The HTTP request * @return String The html code page */ public String getRemoveGroup(HttpServletRequest request) { UrlItem url = new UrlItem(JSP_URL_DO_REMOVE_GROUP); url.addParameter(PARAMETER_GROUP_KEY, request.getParameter(PARAMETER_GROUP_KEY)); return AdminMessageService.getMessageUrl(request, MESSAGE_CONFIRM_REMOVE, url.getUrl(), AdminMessage.TYPE_CONFIRMATION); } /** * Delete Group * @param request The HTTP request * @return String The url page */ public String doRemoveGroup(HttpServletRequest request) { Group group = getGroupFromRequest(request); if (group == null) { return AdminMessageService.getMessageUrl(request, MESSAGE_ERROR_REMOVE, AdminMessage.TYPE_ERROR); } GroupHome.remove(group.getGroupKey(), getPlugin()); return getHomeUrl(request); } /** * Returns roles management form for a specified group * * @param request The Http request * @return Html form */ public String getManageRolesGroup(HttpServletRequest request) { setPageTitleProperty(PROPERTY_PAGE_TITLE_MANAGE_ROLES_GROUP); Group selectedGroup = getGroupFromRequest(request); if (selectedGroup == null) { return getManageGroups(request); } // ASSIGNED USERS NUMBER List<DatabaseUser> listAllAssignedUsers = DatabaseHome .findGroupUsersFromGroupKey(selectedGroup.getGroupKey(), getPlugin()); int nAssignedUsersNumber = listAllAssignedUsers.size(); Collection<Role> allRoleList = RoleHome.findAll(); allRoleList = AdminWorkgroupService.getAuthorizedCollection(allRoleList, getUser()); List<String> groupRoleKeyList = GroupRoleHome.findGroupRoles(selectedGroup.getGroupKey(), getPlugin()); Collection<Role> groupRoleList = new ArrayList<Role>(); for (String strRoleKey : groupRoleKeyList) { for (Role role : allRoleList) { if (role.getRole().equals(strRoleKey)) { groupRoleList.add(RoleHome.findByPrimaryKey(strRoleKey)); } } } // ITEM NAVIGATION setItemNavigator(PARAMETER_ASSIGN_ROLE, selectedGroup.getGroupKey(), AppPathService.getBaseUrl(request) + JSP_URL_MANAGE_ROLES_GROUP); Map<String, Object> model = new HashMap<String, Object>(); model.put(MARK_ROLES_LIST, allRoleList); model.put(MARK_ROLES_LIST_FOR_GROUP, groupRoleList); model.put(MARK_GROUP, selectedGroup); model.put(MARK_ITEM_NAVIGATOR, _itemNavigators.get(PARAMETER_ASSIGN_ROLE)); model.put(MARK_ASSIGNED_USERS_NUMBER, nAssignedUsersNumber); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MANAGE_ROLES_GROUP, getLocale(), model); return getAdminPage(template.getHtml()); } /** * Process assignation roles for a specified group * * @param request The Http request * @return Html form */ public String doAssignRoleGroup(HttpServletRequest request) { String strReturn; String strActionCancel = request.getParameter(PARAMETER_CANCEL); if (strActionCancel != null) { strReturn = JSP_MANAGE_GROUPS; } else { //get group Group group = getGroupFromRequest(request); if (group == null) { return AdminMessageService.getMessageUrl(request, MESSAGE_ERROR_MANAGE_GROUPS, AdminMessage.TYPE_ERROR); } String[] roleArray = request.getParameterValues(PARAMETER_ROLE_KEY); GroupRoleHome.removeRoles(group.getGroupKey(), getPlugin()); if (roleArray != null) { for (int i = 0; i < roleArray.length; i++) { GroupRoleHome.addRole(group.getGroupKey(), roleArray[i], getPlugin()); } } strReturn = JSP_MANAGE_ROLES_GROUP + QUESTION_MARK + PARAMETER_GROUP_KEY + EQUAL + group.getGroupKey(); } return strReturn; } /** * * @param request The HTTP request * @return the group */ private Group getGroupFromRequest(HttpServletRequest request) { String strGroupKey = request.getParameter(PARAMETER_GROUP_KEY); if ((strGroupKey == null) || (strGroupKey.length() == 0)) { return null; } Group group = GroupHome.findByPrimaryKey(strGroupKey, getPlugin()); return group; } /** * Get the list of authorized group * @return a list of groups */ private List<Group> getAuthorizedGroups() { Collection<Group> allGroupList = GroupHome.findAll(getPlugin()); List<Group> groupList = new ArrayList<Group>(); for (Group group : allGroupList) { List<String> groupRoleKeyList = GroupRoleHome.findGroupRoles(group.getGroupKey(), getPlugin()); if (groupRoleKeyList.size() == 0) { groupList.add(group); continue; } for (String groupRoleKey : groupRoleKeyList) { Role role = RoleHome.findByPrimaryKey(groupRoleKey); if (AdminWorkgroupService.isAuthorized(role, getUser())) { groupList.add(group); break; } } } return groupList; } /** * Returns users management formfor a specified group * @param request HttpServletRequest * @return Html form */ public String getManageUsersGroup(HttpServletRequest request) { setPageTitleProperty(PROPERTY_PAGE_TITLE_MANAGE_USERS_GROUP); Map<String, Object> model = new HashMap<String, Object>(); String strURL = AppPathService.getBaseUrl(request) + JSP_URL_MANAGE_USERS_GROUP; UrlItem url = new UrlItem(strURL); // SELECTED GROUP Group selectedGroup = getGroupFromRequest(request); if (selectedGroup == null) { return getManageGroups(request); } // ASSIGNED USERS List<DatabaseUser> listAllAssignedUsers = DatabaseHome .findGroupUsersFromGroupKey(selectedGroup.getGroupKey(), getPlugin()); List<DatabaseUser> listAssignedUsers = getListAssignedUsers(listAllAssignedUsers); DatabaseUserFilter duFilter = new DatabaseUserFilter(); boolean bIsSearch = duFilter.setDatabaseUserFilter(request); List<DatabaseUser> listFilteredUsers = _databaseService.getFilteredUsersInterface(duFilter, bIsSearch, listAssignedUsers, request, model, url); // AVAILABLE USERS ReferenceList listAvailableUsers = getAvailableUsers(listAssignedUsers); // SORT String strSortedAttributeName = request.getParameter(Parameters.SORTED_ATTRIBUTE_NAME); String strAscSort = null; if (strSortedAttributeName != null) { strAscSort = request.getParameter(Parameters.SORTED_ASC); boolean bIsAscSort = Boolean.parseBoolean(strAscSort); Collections.sort(listFilteredUsers, new AttributeComparator(strSortedAttributeName, bIsAscSort)); } _strCurrentPageIndex = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex); _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt(PROPERTY_USERS_PER_PAGE, 50); _nItemsPerPage = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, _nDefaultItemsPerPage); if (strSortedAttributeName != null) { url.addParameter(Parameters.SORTED_ATTRIBUTE_NAME, strSortedAttributeName); } if (strAscSort != null) { url.addParameter(Parameters.SORTED_ASC, strAscSort); } // ITEM NAVIGATION setItemNavigator(PARAMETER_ASSIGN_USER, selectedGroup.getGroupKey(), url.getUrl()); LocalizedPaginator<DatabaseUser> paginator = new LocalizedPaginator<DatabaseUser>(listFilteredUsers, _nItemsPerPage, url.getUrl(), Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale()); model.put(MARK_GROUP, selectedGroup); model.put(MARK_ITEM_NAVIGATOR, _itemNavigators.get(PARAMETER_ASSIGN_USER)); model.put(MARK_PAGINATOR, paginator); model.put(MARK_NB_ITEMS_PER_PAGE, Integer.toString(_nItemsPerPage)); model.put(MARK_AVAILABLE_USERS, listAvailableUsers); model.put(MARK_ASSIGNED_USERS, paginator.getPageItems()); model.put(MARK_ASSIGNED_USERS_NUMBER, listAllAssignedUsers.size()); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MANAGE_USERS_GROUP, getLocale(), model); return getAdminPage(template.getHtml()); } /** * Assign users to a group * @param request HttpServletRequest * @return JSP return */ public String doAssignUsersGroup(HttpServletRequest request) { String strReturn; String strActionCancel = request.getParameter(PARAMETER_CANCEL); if (strActionCancel != null) { strReturn = JSP_MANAGE_GROUPS; } else { Group selectedGroup = getGroupFromRequest(request); if (selectedGroup == null) { return getCreateGroup(request); } //retrieve the selected portlets ids String[] arrayUsersIds = request.getParameterValues(PARAMETER_AVAILABLE_USERS); if ((arrayUsersIds != null)) { for (int i = 0; i < arrayUsersIds.length; i++) { int nUserId = Integer.parseInt(arrayUsersIds[i]); DatabaseUser user = DatabaseUserHome.findByPrimaryKey(nUserId, getPlugin()); DatabaseHome.addGroupForUser(user.getUserId(), selectedGroup.getGroupKey(), getPlugin()); } } strReturn = JSP_MANAGE_USERS_GROUP + QUESTION_MARK + PARAMETER_GROUP_KEY + EQUAL + selectedGroup.getGroupKey(); } return strReturn; } /** * Unassign user from a given group * @param request HttpServletRequest * @return JSP return */ public String doUnAssignUserGroup(HttpServletRequest request) { Group selectedGroup = getGroupFromRequest(request); if (selectedGroup == null) { return getCreateGroup(request); } int nIdUser = Integer.parseInt(request.getParameter(PARAMETER_MYLUTECE_DATABASE_USER_ID)); String strAnchor = request.getParameter(PARAMETER_ANCHOR); DatabaseUser user = DatabaseUserHome.findByPrimaryKey(nIdUser, getPlugin()); if (user != null) { DatabaseHome.removeGroupsForUser(user.getUserId(), getPlugin()); } return JSP_MANAGE_USERS_GROUP + QUESTION_MARK + PARAMETER_GROUP_KEY + EQUAL + selectedGroup.getGroupKey() + SHARP + strAnchor; } /** * Get the list of assigned user to the given group * @param listAllAssignedUsers the list of all assigned userse * @return a list of {@link DatabaseUser} */ private List<DatabaseUser> getListAssignedUsers(List<DatabaseUser> listAllAssignedUsers) { List<DatabaseUser> listAssignedUsers = new ArrayList<DatabaseUser>(); for (DatabaseUser user : listAllAssignedUsers) { if (_databaseService.isAuthorized(user, getUser(), getPlugin())) { listAssignedUsers.add(user); } } return listAssignedUsers; } /** * Get the list of avaivable users * @param listAssignedUsers the list of assigned users * @return a {@link ReferenceList} */ private ReferenceList getAvailableUsers(List<DatabaseUser> listAssignedUsers) { ReferenceList listAvailableUsers = new ReferenceList(); for (DatabaseUser user : DatabaseUserHome.findDatabaseUsersList(getPlugin())) { boolean bIsAvailable = Boolean.TRUE; for (DatabaseUser assignedUser : listAssignedUsers) { if (!_databaseService.isAuthorized(user, getUser(), getPlugin()) || (user.getUserId() == assignedUser.getUserId())) { bIsAvailable = Boolean.FALSE; break; } } if (bIsAvailable) { ReferenceItem userItem = new ReferenceItem(); userItem.setCode(String.valueOf(user.getUserId())); userItem.setName(user.getLastName() + SPACE + user.getFirstName() + SPACE + OPEN_BRACKET + user.getLogin() + CLOSED_BRACKET); listAvailableUsers.add(userItem); } } return listAvailableUsers; } /** * Set the item navigator * @param strItemNavigatorKey The item navigator key * @param strGroupKey the group key * @param strUrl the url */ private void setItemNavigator(String strItemNavigatorKey, String strGroupKey, String strUrl) { ItemNavigator itemNavigator = _itemNavigators.get(strItemNavigatorKey); if (itemNavigator == null) { List<Group> listGroups = getAuthorizedGroups(); // FILTER if (_gFilter == null) { _gFilter = new GroupFilter(); } List<Group> listFilteredGroups = GroupHome.findByFilter(_gFilter, getPlugin()); List<Group> listAvailableGroups = new ArrayList<Group>(); for (Group filteredGroup : listFilteredGroups) { for (Group group : listGroups) { if (filteredGroup.getGroupKey().equals(group.getGroupKey())) { listAvailableGroups.add(group); } } } // SORT if (StringUtils.isNotBlank(_strSortedAttributeName)) { Collections.sort(listAvailableGroups, new AttributeComparator(_strSortedAttributeName, _bIsAscSort)); } List<String> listIdsDatabaseUser = new ArrayList<String>(); int nCurrentItemId = 0; int nIndex = 0; for (Group group : listAvailableGroups) { if (group != null) { listIdsDatabaseUser.add(group.getGroupKey()); if (group.getGroupKey().equals(strGroupKey)) { nCurrentItemId = nIndex; } nIndex++; } } itemNavigator = new ItemNavigator(listIdsDatabaseUser, nCurrentItemId, strUrl, PARAMETER_GROUP_KEY); } else { itemNavigator.setCurrentItemId(strGroupKey); } _itemNavigators.put(strItemNavigatorKey, itemNavigator); } /** * Reinit the item navigator */ private void reinitItemNavigators() { _itemNavigators = new HashMap<String, ItemNavigator>(); _strSortedAttributeName = StringUtils.EMPTY; _bIsAscSort = true; } }