/* =============================================================================== * * Part of the InfoGlue Content Management Platform (www.infoglue.org) * * =============================================================================== * * Copyright (C) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2, as published by the * Free Software Foundation. See the file LICENSE.html for more information. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple * Place, Suite 330 / Boston, MA 02111-1307 / USA. * * =============================================================================== */ package org.infoglue.cms.applications.managementtool.actions; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; import org.exolab.castor.jdo.Database; import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction; import org.infoglue.cms.controllers.kernel.impl.simple.GroupControllerProxy; import org.infoglue.cms.controllers.kernel.impl.simple.LuceneUsersController; import org.infoglue.cms.controllers.kernel.impl.simple.RoleControllerProxy; import org.infoglue.cms.controllers.kernel.impl.simple.UserControllerProxy; import org.infoglue.cms.security.InfoGlueGroup; import org.infoglue.cms.security.InfoGluePrincipal; import org.infoglue.cms.security.InfoGlueRole; import org.infoglue.cms.util.CmsPropertyHandler; import org.infoglue.cms.util.sorters.ReflectionComparator; import org.infoglue.deliver.util.Timer; /** * @author Magnus G�venal * @author Mattias Bogeblad * * Action class for usecase ViewListSystemUserUCC * */ public class ViewListSystemUserAction extends InfoGlueAbstractAction { private static final long serialVersionUID = 1L; private final static Logger logger = Logger.getLogger(ViewListSystemUserAction.class.getName()); private List infogluePrincipals; private String mode = null; private String filterUserName = null; private String filterFirstName = null; private String filterLastName = null; private String filterEmail = null; private String[] filterRoleNames = null; private int slotId = 0; private int numberOfSlots = 0; private String filterChar = null; //DataTable parameters for dynamic filtering private String sEcho = null; private int iTotalRecords = 0; private int iTotalDisplayRecords = 0; private String sSearch = null; private String format = "normal"; private Boolean searchGroups = false; private Boolean searchRoles = false; private String roleName; private String groupName; private List assignedInfoGluePrincipals; protected String doExecute() throws Exception { return doV3(); } public String doV3() throws Exception { return "successV3"; } /** * */ public String doPopupProcessAndFilter() throws Exception { doProcessAndFilter(); return "successPopupFiltered"; } public String doProcessAndFilter() throws Exception { String sortColNumber = getRequest().getParameter("iSortCol_0"); String sortDirection = getRequest().getParameter("sSortDir_0"); if(sortDirection == null || sortDirection.equals("")) sortDirection = "asc"; String sortProperty = "userName"; if(sortColNumber != null && sortColNumber.equals("2")) sortProperty = "firstName"; else if(sortColNumber != null && sortColNumber.equals("3")) sortProperty = "lastName"; else if(sortColNumber != null && sortColNumber.equals("4")) sortProperty = "source"; else if(sortColNumber != null && sortColNumber.equals("5")) sortProperty = "isActive"; String iDisplayStartString = getRequest().getParameter("iDisplayStart"); String iDisplayLengthString = getRequest().getParameter("iDisplayLength"); if(iDisplayStartString == null) iDisplayStartString = "0"; if(iDisplayLengthString == null) iDisplayLengthString = "1000000"; int start = new Integer(iDisplayStartString); int end = start + new Integer(iDisplayLengthString); if(sSearch == null || sSearch.equals("")) { String filterAssignedRoleUsers = getRequest().getParameter("filterAssignedRoleUsers"); String filterAssignedGroupUsers = getRequest().getParameter("filterAssignedGroupUsers"); if(filterAssignedRoleUsers != null && filterAssignedRoleUsers.equalsIgnoreCase("true")) { this.infogluePrincipals = RoleControllerProxy.getController().getInfoGluePrincipalsNotInRole(roleName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer unassignedInfogluePrincipalsCount = RoleControllerProxy.getController().getInfoGluePrincipalsNotInRoleCount(roleName, this.sSearch); this.iTotalRecords = unassignedInfogluePrincipalsCount; this.iTotalDisplayRecords = unassignedInfogluePrincipalsCount; } else if(filterAssignedGroupUsers != null && filterAssignedGroupUsers.equalsIgnoreCase("true")) { this.infogluePrincipals = GroupControllerProxy.getController().getInfoGluePrincipalsNotInGroup(groupName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer unassignedInfogluePrincipalsCount = GroupControllerProxy.getController().getInfoGluePrincipalsNotInGroupCount(groupName, this.sSearch); this.iTotalRecords = unassignedInfogluePrincipalsCount; this.iTotalDisplayRecords = unassignedInfogluePrincipalsCount; } else { //this.infogluePrincipals = UserControllerProxy.getController().getFilteredUsers(start, new Integer(iDisplayLengthString), sortProperty, sortDirection, null, false); this.infogluePrincipals = LuceneUsersController.getController().getFilteredUsers(start, new Integer(iDisplayLengthString), sortProperty, sortDirection, null, false); Integer totalRecords = LuceneUsersController.getController().getUserCount(this.sSearch); //Integer totalRecords = UserControllerProxy.getController().getUserCount(this.sSearch); this.iTotalRecords = totalRecords; this.iTotalDisplayRecords = totalRecords; } } else { String filterAssignedRoleUsers = getRequest().getParameter("filterAssignedRoleUsers"); String filterAssignedGroupUsers = getRequest().getParameter("filterAssignedGroupUsers"); if(filterAssignedRoleUsers != null && filterAssignedRoleUsers.equalsIgnoreCase("true")) { this.infogluePrincipals = RoleControllerProxy.getController().getInfoGluePrincipalsNotInRole(roleName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer unassignedInfogluePrincipalsCount = RoleControllerProxy.getController().getInfoGluePrincipalsNotInRoleCount(roleName, this.sSearch); this.iTotalRecords = unassignedInfogluePrincipalsCount; this.iTotalDisplayRecords = unassignedInfogluePrincipalsCount; } else if(filterAssignedGroupUsers != null && filterAssignedGroupUsers.equalsIgnoreCase("true")) { this.infogluePrincipals = GroupControllerProxy.getController().getInfoGluePrincipalsNotInGroup(groupName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer unassignedInfogluePrincipalsCount = GroupControllerProxy.getController().getInfoGluePrincipalsNotInGroupCount(groupName, this.sSearch); this.iTotalRecords = unassignedInfogluePrincipalsCount; this.iTotalDisplayRecords = unassignedInfogluePrincipalsCount; } else { this.infogluePrincipals = LuceneUsersController.getController().getFilteredUsers(new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch, false); //this.infogluePrincipals = UserControllerProxy.getController().getFilteredUsers(new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch, false); //this.iTotalRecords = UserControllerProxy.getController().getUserCount(this.sSearch); //this.iTotalDisplayRecords = UserControllerProxy.getController().getUserCount(this.sSearch); this.iTotalRecords = LuceneUsersController.getController().getUserCount(this.sSearch); this.iTotalDisplayRecords = LuceneUsersController.getController().getUserCount(this.sSearch); if(this.searchRoles) { try { InfoGlueRole infoGlueRole = RoleControllerProxy.getController().getRole(this.sSearch); List rolePrincipals = infoGlueRole.getAutorizationModule().getRoleUsers(this.sSearch); this.iTotalRecords = rolePrincipals.size(); this.iTotalDisplayRecords = rolePrincipals.size(); if(rolePrincipals.size() > end) rolePrincipals = rolePrincipals.subList(start, end); else rolePrincipals = rolePrincipals.subList(start, rolePrincipals.size()); List newInfogluePrincipals = new ArrayList(); newInfogluePrincipals.addAll(this.infogluePrincipals); newInfogluePrincipals.removeAll(rolePrincipals); newInfogluePrincipals.addAll(rolePrincipals); this.infogluePrincipals = newInfogluePrincipals; } catch (Exception e) { logger.info("Could not find a role by that name:" + e.getMessage()); } } if(this.searchGroups) { try { InfoGlueGroup infoGlueGroup = GroupControllerProxy.getController().getGroup(this.sSearch); List groupPrincipals = infoGlueGroup.getAutorizationModule().getGroupUsers(this.sSearch); this.iTotalRecords = groupPrincipals.size(); this.iTotalDisplayRecords = groupPrincipals.size(); if(groupPrincipals.size() > end) groupPrincipals = groupPrincipals.subList(start, end); else groupPrincipals = groupPrincipals.subList(start, groupPrincipals.size()); List newInfogluePrincipals = new ArrayList(); newInfogluePrincipals.addAll(this.infogluePrincipals); newInfogluePrincipals.removeAll(groupPrincipals); newInfogluePrincipals.addAll(groupPrincipals); this.infogluePrincipals = newInfogluePrincipals; } catch (Exception e) { logger.info("Could not find a group by that name:" + e.getMessage()); } } } } return "successFiltered"; } public String doPopupProcessAndFilterAssignedForRole() throws Exception { doProcessAndFilterAssignedForRole(); return "successPopupFiltered"; } public String doProcessAndFilterAssignedForRole() throws Exception { String sortColNumber = getRequest().getParameter("iSortCol_0"); String sortDirection = getRequest().getParameter("sSortDir_0"); if(sortDirection == null || sortDirection.equals("")) sortDirection = "asc"; String sortProperty = "userName"; if(sortColNumber != null && sortColNumber.equals("2")) sortProperty = "firstName"; else if(sortColNumber != null && sortColNumber.equals("3")) sortProperty = "lastName"; else if(sortColNumber != null && sortColNumber.equals("4")) sortProperty = "source"; else if(sortColNumber != null && sortColNumber.equals("5")) sortProperty = "isActive"; String iDisplayStartString = getRequest().getParameter("iDisplayStart"); String iDisplayLengthString = getRequest().getParameter("iDisplayLength"); if(iDisplayStartString == null) iDisplayStartString = "0"; if(iDisplayLengthString == null) iDisplayLengthString = "1000000"; int start = new Integer(iDisplayStartString); int end = start + new Integer(iDisplayLengthString); if(sSearch == null || sSearch.equals("")) { String filterAssignedRoleUsers = getRequest().getParameter("filterAssignedRoleUsers"); if(filterAssignedRoleUsers != null && filterAssignedRoleUsers.equalsIgnoreCase("true")) { InfoGlueRole infoGlueRole = RoleControllerProxy.getController().getRole(roleName); List allInfogluePrincipals = UserControllerProxy.getController().getAllUsers(); List assignedInfogluePrincipals = infoGlueRole.getAutorizationModule().getRoleUsers(roleName); List unassignedInfogluePrincipals = new ArrayList(); unassignedInfogluePrincipals.addAll(allInfogluePrincipals); unassignedInfogluePrincipals.removeAll(assignedInfogluePrincipals); this.infogluePrincipals = unassignedInfogluePrincipals; } else { this.infogluePrincipals = RoleControllerProxy.getController().getInfoGluePrincipals(roleName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer principalsCount = RoleControllerProxy.getController().getInfoGluePrincipalsCount(roleName, this.sSearch); this.iTotalRecords = principalsCount; this.iTotalDisplayRecords = principalsCount; } } else { List assignedInfogluePrincipals = RoleControllerProxy.getController().getInfoGluePrincipals(roleName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer assignedInfogluePrincipalsCount = RoleControllerProxy.getController().getInfoGluePrincipalsCount(roleName, this.sSearch); this.iTotalRecords = assignedInfogluePrincipalsCount; this.iTotalDisplayRecords = assignedInfogluePrincipalsCount; this.infogluePrincipals = assignedInfogluePrincipals; } return "successFilteredAssignedForRole"; } public String doPopupProcessAndFilterAssignedForGroup() throws Exception { doProcessAndFilterAssignedForGroup(); return "successPopupFiltered"; } public String doProcessAndFilterAssignedForGroup() throws Exception { String sortColNumber = getRequest().getParameter("iSortCol_0"); String sortDirection = getRequest().getParameter("sSortDir_0"); if(sortDirection == null || sortDirection.equals("")) sortDirection = "asc"; String sortProperty = "userName"; if(sortColNumber != null && sortColNumber.equals("2")) sortProperty = "firstName"; else if(sortColNumber != null && sortColNumber.equals("3")) sortProperty = "lastName"; else if(sortColNumber != null && sortColNumber.equals("4")) sortProperty = "source"; else if(sortColNumber != null && sortColNumber.equals("5")) sortProperty = "isActive"; String iDisplayStartString = getRequest().getParameter("iDisplayStart"); String iDisplayLengthString = getRequest().getParameter("iDisplayLength"); if(iDisplayStartString == null) iDisplayStartString = "0"; if(iDisplayLengthString == null) iDisplayLengthString = "1000000"; int start = new Integer(iDisplayStartString); int end = start + new Integer(iDisplayLengthString); //InfoGlueGroup infoGlueGroup = GroupControllerProxy.getController().getGroup(groupName); if(sSearch == null || sSearch.equals("")) { String filterAssignedGroupUsers = getRequest().getParameter("filterAssignedGroupUsers"); if(filterAssignedGroupUsers != null && filterAssignedGroupUsers.equalsIgnoreCase("true")) { List unassignedInfogluePrincipals = GroupControllerProxy.getController().getInfoGluePrincipalsNotInGroup(groupName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer unassignedInfogluePrincipalsCount = GroupControllerProxy.getController().getInfoGluePrincipalsNotInGroupCount(groupName, this.sSearch); this.iTotalRecords = unassignedInfogluePrincipalsCount; this.iTotalDisplayRecords = unassignedInfogluePrincipalsCount; this.infogluePrincipals = unassignedInfogluePrincipals; } else { this.infogluePrincipals = GroupControllerProxy.getController().getInfoGluePrincipals(groupName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer principalsCount = GroupControllerProxy.getController().getInfoGluePrincipalsCount(groupName, this.sSearch); this.iTotalRecords = principalsCount; this.iTotalDisplayRecords = principalsCount; } } else { List assignedInfogluePrincipals = GroupControllerProxy.getController().getInfoGluePrincipals(groupName, new Integer(iDisplayStartString), new Integer(iDisplayLengthString), sortProperty, sortDirection, this.sSearch); Integer assignedInfogluePrincipalsCount = GroupControllerProxy.getController().getInfoGluePrincipalsCount(groupName, this.sSearch); this.iTotalRecords = assignedInfogluePrincipalsCount; this.iTotalDisplayRecords = assignedInfogluePrincipalsCount; this.infogluePrincipals = assignedInfogluePrincipals; } return "successFilteredAssignedForGroup"; } public String doUserListForPopup() throws Exception { this.infogluePrincipals = UserControllerProxy.getController().getAllUsers(); Collections.sort(this.infogluePrincipals, new ReflectionComparator("firstName")); return "successPopup"; } public String doUserListForPopupV3() throws Exception { /* this.infogluePrincipals = UserControllerProxy.getController().getAllUsers(); Collections.sort(this.infogluePrincipals, new ReflectionComparator("firstName")); */ return "successPopupV3"; } public List getUsersFirstNameChars() { List usersFirstNameChars = new ArrayList(); Iterator principalIterator = this.infogluePrincipals.iterator(); while(principalIterator.hasNext()) { InfoGluePrincipal infogluePrincipal = (InfoGluePrincipal)principalIterator.next(); if(!usersFirstNameChars.contains(infogluePrincipal.getName().charAt(0))) usersFirstNameChars.add(infogluePrincipal.getName().charAt(0)); //else // logger.info("Exists:" + infogluePrincipal.getName().charAt(0)); } Collections.sort(usersFirstNameChars); return usersFirstNameChars; } public List getFilteredInfogluePrincipals() { List subList = new ArrayList(); char filterChar = ((InfoGluePrincipal)this.infogluePrincipals.get(0)).getFirstName().charAt(0); if(this.filterChar != null && this.filterChar.length() == 1) filterChar = this.filterChar.charAt(0); Iterator infogluePrincipalsIterator = this.infogluePrincipals.iterator(); boolean foundSection = false; while(infogluePrincipalsIterator.hasNext()) { InfoGluePrincipal infogluePrincipal = (InfoGluePrincipal)infogluePrincipalsIterator.next(); if(infogluePrincipal.getName().charAt(0) == filterChar) { subList.add(infogluePrincipal); foundSection = true; } else if(foundSection) break; } return subList; } /* public String doUserListSearch() throws Exception { String searchString = this.getRequest().getParameter("searchString"); List<InfoGluePrincipal> searchResult = UserControllerProxy.getController().getFilteredUsers(searchString, null, null, null, null); ServletOutputStream myOut = getResponse().getOutputStream(); myOut.print("<select name=\"searchResult\" size=\"10\" class=\"userSelectBox\" multiple=\"true\">"); for (InfoGluePrincipal igp : searchResult) { myOut.print("<option value=\"" + igp.getName() + "\">" + igp.getFirstName() + " " + igp.getLastName() + "</option>"); } myOut.print("</select>"); return "none"; } */ public List getRoles() throws Exception { List roles = RoleControllerProxy.getController().getAllRoles(); return roles; } public List getInfogluePrincipals() { return this.infogluePrincipals; } public String getFilterEmail() { return filterEmail; } public void setFilterEmail(String email) { if(email != null && !email.equals("")) this.filterEmail = email; } public String getFilterFirstName() { return filterFirstName; } public void setFilterFirstName(String firstName) { if(firstName != null && !firstName.equals("")) this.filterFirstName = firstName; } public String getFilterLastName() { return filterLastName; } public void setFilterLastName(String lastName) { if(lastName != null && !lastName.equals("")) this.filterLastName = lastName; } public String getFilterUserName() { return filterUserName; } public void setFilterUserName(String userName) { if(userName != null && !userName.equals("")) this.filterUserName = userName; } public String getFilterChar() { return filterChar; } public void setFilterChar(String filterChar) { if(filterChar != null && !filterChar.equals("")) this.filterChar = filterChar; } public String getMode() { return mode; } public void setMode(String mode) { this.mode = mode; } public String[] getFilterRoleNames() { return filterRoleNames; } public int getSlotId() { return slotId; } public void setSlotId(int slotId) { this.slotId = slotId; } public int getNumberOfSlots() { return numberOfSlots; } public void setNumberOfSlots(int numberOfSlots) { this.numberOfSlots = numberOfSlots; } public int getTotalRecords() { return iTotalRecords; } public int getTotalDisplayRecords() { return iTotalDisplayRecords; } public String getsEcho() { return sEcho; } public void setsEcho(String sEcho) { this.sEcho = sEcho; } public String getsSearch() { return sSearch; } public void setsSearch(String sSearch) { this.sSearch = sSearch; } public void setFormat(String format) { this.format = format; } public String getFormat() { return this.format; } public String getRoleName() { return this.roleName; } public void setRoleName(String roleName) throws Exception { if(roleName != null) { byte[] bytes = Base64.decodeBase64(roleName); String decodedRoleName = new String(bytes, "utf-8"); if(RoleControllerProxy.getController().roleExists(decodedRoleName)) { roleName = decodedRoleName; } else { String fromEncoding = CmsPropertyHandler.getURIEncoding(); String toEncoding = "utf-8"; String testRoleName = new String(roleName.getBytes(fromEncoding), toEncoding); if(testRoleName.indexOf((char)65533) == -1) roleName = testRoleName; } } this.roleName = roleName; } public String getGroupName() { return this.groupName; } public void setGroupName(String groupName) throws Exception { if(groupName != null) { byte[] bytes = Base64.decodeBase64(groupName); String decodedGroupName = new String(bytes, "utf-8"); if(GroupControllerProxy.getController().groupExists(decodedGroupName)) { groupName = decodedGroupName; } else { String fromEncoding = CmsPropertyHandler.getURIEncoding(); String toEncoding = "utf-8"; String testGroupName = new String(groupName.getBytes(fromEncoding), toEncoding); if(testGroupName.indexOf((char)65533) == -1) groupName = testGroupName; } } this.groupName = groupName; } public String getRolesAndGroups(InfoGluePrincipal principal) { if((principal.getRoles() == null || principal.getRoles().size() == 1) && (principal.getGroups() == null || principal.getGroups().size() == 0)) { try { principal = UserControllerProxy.getController((Database)principal.getAutorizationModule().getTransactionObject()).getUser(principal.getName()); } catch (Exception e) { //logger.error(); } } StringBuilder sb = new StringBuilder(""); sb.append("<b>Roles:</b> "); int i = 0; for(InfoGlueRole role : (List<InfoGlueRole>)principal.getRoles()) { if(!role.getName().equals("anonymous") || sb.indexOf("anonymous") == -1) { sb.append((i > 0 ? ", " : "") + role.getDisplayName()); i++; } } sb.append("<br/><b>Groups:</b> "); i = 0; for(InfoGlueGroup group : (List<InfoGlueGroup>)principal.getGroups()) { sb.append((i > 0 ? ", " : "") + group.getDisplayName()); i++; } return sb.toString(); } /** * @return the searchGroups */ public Boolean getSearchGroups() { return searchGroups; } /** * @param searchGroups the searchGroups to set */ public void setSearchGroups(Boolean searchGroups) { this.searchGroups = searchGroups; } /** * @return the searchRoles */ public Boolean getSearchRoles() { return searchRoles; } /** * @param searchRoles the searchRoles to set */ public void setSearchRoles(Boolean searchRoles) { this.searchRoles = searchRoles; } }