/* * Created on Oct 26, 2004 * *Copyright Reliable Response, 2004 */ package net.reliableresponse.notification.web.actions; import java.net.URLEncoder; import java.util.Hashtable; import java.util.Vector; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import net.reliableresponse.notification.broker.BrokerFactory; import net.reliableresponse.notification.device.Device; import net.reliableresponse.notification.usermgmt.Group; import net.reliableresponse.notification.usermgmt.Member; import net.reliableresponse.notification.usermgmt.User; import net.reliableresponse.notification.util.SortedVector; import net.reliableresponse.notification.util.StringUtils; import net.reliableresponse.notification.web.util.FindSearchMembers; import net.reliableresponse.notification.web.util.JSPHelper; /** * @author drig * * Copyright 2004 - David Rudder */ public class SearchAction implements Action { /* * (non-Javadoc) * * @see net.reliableresponse.notification.web.actions.Action#doAction(javax.servlet.ServletRequest) */ public ServletRequest doAction(ServletRequest request, ServletResponse response) { ActionRequest actionRequest = new ActionRequest( (HttpServletRequest) request); boolean doAction = false; String[] uuidArray = new String[0]; // Process the search buttoencoden submission if (request.getParameter("action_search_recipients.x") != null) { FindSearchMembers fsm = new FindSearchMembers(actionRequest); Vector uuids = fsm.findSearchMembers(); uuidArray = (String[]) uuids.toArray(new String[0]); // See if we added users through the lists } else { // If we don't have the action, slurp in the previous values uuidArray = request.getParameterValues("found_recipient"); if (uuidArray == null) uuidArray = new String[0]; } actionRequest.setParameter("recipient_search_uuids", uuidArray); // Add the found users SortedVector members = new SortedVector(); for (int i = 0; i < uuidArray.length; i++) { BrokerFactory.getLoggingBroker().logDebug("uuid=" + uuidArray[i]); // TODO: This should be extracted into a utility class Member member = BrokerFactory.getUserMgmtBroker().getUserByUuid( uuidArray[i]); if (member == null) { member = BrokerFactory.getGroupMgmtBroker().getGroupByUuid( uuidArray[i]); } if (member != null) { members.addElement(member, false); } } members.sort(); for (int i = 0; i < members.size(); i++) { Member member = (Member) members.elementAt(i); String title = "<td><strong>" + StringUtils.htmlEscape(member.toString()) + "</strong></td>"; title += "<td>"; if (member instanceof Group) { int numMembers = ((Group) member).getMembers().length; if (numMembers == 1) { title += numMembers; title += " member"; } else if (numMembers == 0) { title += "<font color=\"#990000\"> "+numMembers+" members</font>"; } else { title += numMembers; title += " members"; } } title += "</td><td width=\"40%\">"; switch (member.getType()) { case Member.USER: title += "Individual"; title += "</td><td width=\"10\"><input name=\"add_user_" + member.getUuid() + "\" type=\"checkbox\" id=\"add\" value=\"dynamic\" onchange=\"setCheckUsersDevices("+ member.getUuid()+", this)\"></td>"; break; case Member.ESCALATION: title += "Escalation Group"; title += "</td><td width=\"10\"><input name=\"add_group_" + member.getUuid() + "\" type=\"checkbox\" id=\"add\" value=\"dynamic\"</td>"; break; case Member.BROADCAST: title += "Broadcast Group"; title += "</td><td width=\"10\"><input name=\"add_group_" + member.getUuid() + "\" type=\"checkbox\" id=\"add\" value=\"dynamic\"></td>"; break; case Member.ONCALL: title += "On Call Group"; title += "</td><td width=\"10\"><input name=\"add_group_" + member.getUuid() + "\" type=\"checkbox\" id=\"add\" value=\"dynamic\"></td>"; break; default: title += "Group"; title += "</td><td width=\"10\"><input name=\"add_group_" + member.getUuid() + "\" type=\"checkbox\" id=\"add\" value=\"dynamic\"></td>"; break; } BrokerFactory.getLoggingBroker().logDebug( "Adding recipient parameter recipient_search_found_" + ((Member) members.elementAt(i)).getUuid() + "=" + title); actionRequest.setParameter("recipient_search_found_" + ((Member) members.elementAt(i)).getUuid(), title); } // Limit to 100 members if (uuidArray.length > 100) { actionRequest .addParameter( "search_system_message", "Your search returned more than 100 records. Please limit the scope of your search."); } // Look for added members if (request.getParameter("add_selected.x") != null) { Hashtable userDevices = new FindSearchMembers(actionRequest).getUserDeviceList(); BrokerFactory.getLoggingBroker().logDebug("userDevice = "+userDevices); String[] userUuids = (String[]) userDevices.keySet().toArray(new String[0]); String[] groupUuids = JSPHelper.getParameterEndings(request, "add_group_"); for (int i = 0; i < userUuids.length; i++) { User newUser = BrokerFactory.getUserMgmtBroker().getUserByUuid( userUuids[i]); if (newUser != null) { actionRequest.setParameter("selected_user_" + userUuids[i], newUser.toString()); } Vector devices = (Vector) userDevices.get(userUuids[i]); for (int d = 0; d < devices.size(); d++) { String deviceUuid = (String) devices.elementAt(d); actionRequest.addParameter("selected_userdevice_" + userUuids[i], deviceUuid); } } for (int i = 0; i < groupUuids.length; i++) { Group newGroup = BrokerFactory.getGroupMgmtBroker() .getGroupByUuid(groupUuids[i]); if (newGroup != null) { actionRequest.setParameter("selected_group_" + groupUuids[i], newGroup.toString()); } } } else if (request.getParameter("action_add_from_list.x") != null) { String[] userUuids = actionRequest .getParameterValues("add_users_from_list"); String[] groupUuids = actionRequest .getParameterValues("add_groups_from_list"); //String[] sendtoByDefault = BrokerFactory.getConfigurationBroker().getStringValues("sendto.bydefault"); if (userUuids != null) { for (int i = 0; i < userUuids.length; i++) { User newUser = BrokerFactory.getUserMgmtBroker() .getUserByUuid(userUuids[i]); if (newUser != null) { actionRequest.setParameter("selected_user_" + userUuids[i], newUser.toString()); Device[] devices = newUser.getDevices(); for (int d = 0; d < devices.length; d++) { actionRequest.addParameter("selected_userdevice_" + userUuids[i], devices[d].getUuid()); } } } } if (groupUuids != null) { for (int i = 0; i < groupUuids.length; i++) { Group newGroup = BrokerFactory.getGroupMgmtBroker() .getGroupByUuid(groupUuids[i]); if (newGroup != null) { actionRequest.setParameter("selected_group_" + groupUuids[i], newGroup.toString()); } } } } return actionRequest; } }