/** * Copyright (c) 2012--2014 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package com.redhat.rhn.frontend.action.audit.scap; import java.net.MalformedURLException; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import redstone.xmlrpc.XmlRpcException; import redstone.xmlrpc.XmlRpcFault; import com.redhat.rhn.common.db.datasource.DataResult; import com.redhat.rhn.common.util.DatePicker; import com.redhat.rhn.frontend.action.BaseSearchAction; import com.redhat.rhn.frontend.action.common.DateRangePicker; import com.redhat.rhn.frontend.struts.RequestContext; import com.redhat.rhn.frontend.struts.RhnHelper; import com.redhat.rhn.frontend.taglibs.list.TagHelper; import com.redhat.rhn.manager.audit.ScapManager; /** * XccdfSearchAction */ public class XccdfSearchAction extends BaseSearchAction { private static final String ANY_LABEL = "any"; private static final String SHOW_AS = "show_as"; private static final String TESTRESULT_ID = "tr"; private static final String RULERESULT_ID = "rr"; protected ActionForward doExecute(HttpServletRequest request, ActionMapping mapping, DynaActionForm form) throws MalformedURLException, XmlRpcException, XmlRpcFault { RequestContext context = new RequestContext(request); String searchString = form.getString(SEARCH_STR); String whereToSearch = form.getString(WHERE_TO_SEARCH); DateRangePicker picker = setupDatePicker(form, request); if (!StringUtils.isBlank(searchString)) { picker.processDatePickers(getOptionScanDateSearch(request), false); DataResult results = XccdfSearchHelper.performSearch(searchString, whereToSearch, getPickerDate(request, "start"), getPickerDate(request, "end"), getRuleResultLabel(form), isTestestResultRequested(form), context); request.setAttribute(RequestContext.PAGE_LIST, results != null ? results : Collections.EMPTY_LIST); if (isTestestResultRequested(form) && results != null) { TagHelper.bindElaboratorTo("searchResultsTr", results.getElaborator(), request); } } else { request.setAttribute(RequestContext.PAGE_LIST, Collections.EMPTY_LIST); picker.processDatePickers(false, false); } return mapping.findForward(RhnHelper.DEFAULT_FORWARD); } private Date getPickerDate(HttpServletRequest request, String paramName) { if (getOptionScanDateSearch(request)) { DatePicker dPick = (DatePicker)request.getAttribute(paramName); if (dPick != null) { return dPick.getDate(); } } return null; } private Boolean getOptionScanDateSearch(HttpServletRequest request) { Object dateSrch = request.getAttribute(SCAN_DATE_SEARCH); if (dateSrch instanceof Boolean) { return ((Boolean)dateSrch).booleanValue(); } String strDateSearch = (String)request.getAttribute(SCAN_DATE_SEARCH); return "on".equals(strDateSearch); } private DateRangePicker setupDatePicker(DynaActionForm form, HttpServletRequest request) { Calendar today = Calendar.getInstance(); today.setTime(new Date()); Calendar yesterday = (Calendar) today.clone(); yesterday.add(Calendar.DAY_OF_YEAR, -1); return new DateRangePicker(form, request, yesterday.getTime(), today.getTime(), DatePicker.YEAR_RANGE_NEGATIVE, "scapsearch.jsp.start_date", "scapsearch.jsp.end_date"); } private boolean isTestestResultRequested(DynaActionForm form) { String showAs = form.getString(SHOW_AS); if (showAs == null || RULERESULT_ID.equals(showAs) || "".equals(showAs)) { return false; } return true; } private void setupShowAsOption(DynaActionForm form) { String showAs = form.getString(SHOW_AS); form.set(SHOW_AS, TESTRESULT_ID.equals(showAs) ? showAs : RULERESULT_ID); } private String getRuleResultLabel(DynaActionForm form) { String resultFilter = form.getString("result_filter"); if (resultFilter == null || ANY_LABEL.equals(resultFilter) || "".equals(resultFilter)) { return null; } return resultFilter; } private void setupRuleResultLabelOptions(HttpServletRequest request) { List<Map<String, String>> possibleResults = ScapManager.ruleResultTypeLabels(); Map<String, String> anyLabel = new HashMap<String, String>(); anyLabel.put("label", ANY_LABEL); possibleResults.add(0, anyLabel); request.setAttribute("allResults", possibleResults); } @Override protected void insureFormDefaults(HttpServletRequest request, DynaActionForm form) { String searchString = form.getString(SEARCH_STR); String whereToSearch = form.getString(WHERE_TO_SEARCH); request.setAttribute(SEARCH_STR, searchString); form.set(WHERE_TO_SEARCH, "system_list".equals(whereToSearch) ? whereToSearch : "all"); setupRuleResultLabelOptions(request); setupShowAsOption(form); Map m = form.getMap(); Set<String> keys = m.keySet(); for (String key : keys) { Object vObj = m.get(key); request.setAttribute(key, vObj); } } }