Java tutorial
/* * This software was designed and created by Jason Carroll. * Copyright (c) 2002, 2003, 2004 Jason Carroll. * The author can be reached at jcarroll@cowsultants.com * ITracker website: http://www.cowsultants.com * ITracker forums: http://www.cowsultants.com/phpBB/index.php * * This program is free software; you can redistribute it and/or modify * it only under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ package org.itracker.web.actions.issuesearch; import org.apache.commons.beanutils.PropertyUtils; import org.apache.log4j.Logger; import org.apache.struts.action.*; import org.apache.struts.validator.ValidatorForm; import org.itracker.IssueSearchException; import org.itracker.model.Issue; import org.itracker.model.IssueSearchQuery; import org.itracker.model.PermissionType; import org.itracker.model.User; import org.itracker.services.ReportService; import org.itracker.services.UserService; import org.itracker.web.actions.base.ItrackerBaseAction; import org.itracker.web.util.Constants; import org.itracker.web.util.RequestHelper; import org.itracker.web.util.ServletContextUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; public class SearchIssuesAction extends ItrackerBaseAction { private static final Logger log = Logger.getLogger(SearchIssuesAction.class); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ActionMessages errors = new ActionMessages(); String pageTitleKey = "itracker.web.search.title"; String pageTitleArg = ""; request.setAttribute("pageTitleKey", pageTitleKey); request.setAttribute("pageTitleArg", pageTitleArg); HttpSession session = request.getSession(); User user = (User) session.getAttribute(Constants.USER_KEY); Map<Integer, Set<PermissionType>> userPermissions = RequestHelper.getUserPermissions(session); try { ReportService reportService = ServletContextUtils.getItrackerServices().getReportService(); UserService userService = ServletContextUtils.getItrackerServices().getUserService(); request.setAttribute("rh", reportService); request.setAttribute("uh", userService); IssueSearchQuery isqm = (IssueSearchQuery) session.getAttribute(Constants.SEARCH_QUERY_KEY); if (isqm == null) { return mapping.findForward("searchissues"); } processQueryParameters(isqm, (ValidatorForm) form, errors); if (errors.isEmpty()) { List<Issue> results = ServletContextUtils.getItrackerServices().getIssueService().searchIssues(isqm, user, userPermissions); if (log.isDebugEnabled()) { log.debug("SearchIssuesAction received " + results.size() + " results to query."); } isqm.setResults(results); log.debug("Setting search results with " + isqm.getResults().size() + " results"); session.setAttribute(Constants.SEARCH_QUERY_KEY, isqm); } } catch (IssueSearchException ise) { if (ise.getType() == IssueSearchException.ERROR_NULL_QUERY) { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.nullsearch")); } else { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system")); } } catch (Exception e) { log.error(e.getMessage(), e); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system")); } if (!errors.isEmpty()) { saveErrors(request, errors); } return mapping.getInputForward(); } private IssueSearchQuery processQueryParameters(IssueSearchQuery isqm, ValidatorForm form, ActionMessages errors) { if (isqm == null) { isqm = new IssueSearchQuery(); } try { Integer creatorValue = (Integer) PropertyUtils.getSimpleProperty(form, "creator"); if (creatorValue != null && creatorValue.intValue() != -1) { isqm.setCreator(ServletContextUtils.getItrackerServices().getUserService().getUser(creatorValue)); } else { isqm.setCreator(null); } Integer ownerValue = (Integer) PropertyUtils.getSimpleProperty(form, "owner"); if (ownerValue != null && ownerValue.intValue() != -1) { isqm.setOwner(ServletContextUtils.getItrackerServices().getUserService().getUser(ownerValue)); } else { isqm.setOwner(null); } String textValue = (String) PropertyUtils.getSimpleProperty(form, "textphrase"); if (textValue != null && textValue.trim().length() > 0) { isqm.setText(textValue.trim()); } else { isqm.setText(null); } String resolutionValue = (String) PropertyUtils.getSimpleProperty(form, "resolution"); if (resolutionValue != null && !resolutionValue.equals("")) { isqm.setResolution(resolutionValue); } else { isqm.setResolution(null); } Integer[] projectsArray = (Integer[]) PropertyUtils.getSimpleProperty(form, "projects"); List<Integer> projects = Arrays.asList(projectsArray); if (projects == null || projects.size() == 0) { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.projectrequired")); } else { isqm.setProjects(projects); } Integer[] severitiesArray = (Integer[]) PropertyUtils.getSimpleProperty(form, "severities"); if (severitiesArray != null && severitiesArray.length > 0) { List<Integer> severities = Arrays.asList(severitiesArray); isqm.setSeverities(severities); } else { isqm.setSeverities(null); } Integer[] statusesArray = (Integer[]) PropertyUtils.getSimpleProperty(form, "statuses"); if (statusesArray != null && statusesArray.length > 0) { List<Integer> statuses = Arrays.asList(statusesArray); isqm.setStatuses(statuses); } else { isqm.setStatuses(null); } Integer[] componentsArray = (Integer[]) PropertyUtils.getSimpleProperty(form, "components"); if (componentsArray != null && componentsArray.length > 0) { List<Integer> components = Arrays.asList(componentsArray); isqm.setComponents(components); } else { isqm.setComponents(null); } Integer[] versionsArray = (Integer[]) PropertyUtils.getSimpleProperty(form, "versions"); if (versionsArray != null && versionsArray.length > 0) { List<Integer> versions = Arrays.asList(versionsArray); isqm.setVersions(versions); } else { isqm.setVersions(null); } Integer targetVersion = (Integer) PropertyUtils.getSimpleProperty(form, "targetVersion"); if (targetVersion != null && targetVersion > 0) { isqm.setTargetVersion(targetVersion); } else { isqm.setTargetVersion(null); } String orderBy = (String) PropertyUtils.getSimpleProperty(form, "orderBy"); if (orderBy != null && !orderBy.equals("")) { if (log.isDebugEnabled()) { log.debug("processQueryParameters: set orderBy: " + orderBy); } isqm.setOrderBy(orderBy); } Integer type = (Integer) PropertyUtils.getSimpleProperty(form, "type"); if (type != null) { if (log.isDebugEnabled()) { log.debug("processQueryParameters: set type: " + type); } isqm.setType(type); } } catch (RuntimeException e) { log.error("processQueryParameters: Unable to parse search query parameters: " + e.getMessage(), e); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidsearchquery")); } catch (IllegalAccessException e) { log.error("processQueryParameters: Unable to parse search query parameters: " + e.getMessage(), e); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidsearchquery")); } catch (InvocationTargetException e) { log.error("processQueryParameters: Unable to parse search query parameters: " + e.getMessage(), e); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidsearchquery")); } catch (NoSuchMethodException e) { log.error("processQueryParameters: Unable to parse search query parameters: " + e.getMessage(), e); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidsearchquery")); } return isqm; } }