com.redhat.rhn.frontend.action.audit.scap.XccdfSearchAction.java Source code

Java tutorial

Introduction

Here is the source code for com.redhat.rhn.frontend.action.audit.scap.XccdfSearchAction.java

Source

/**
 * 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);
        }
    }
}