5 commits - java/code

Šimon Lukašík isimluk at fedoraproject.org
Fri Jun 15 07:41:29 UTC 2012


 java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml             |  268 ++++++++++
 java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchAction.java     |   32 +
 java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchHelper.java     |   18 
 java/code/src/com/redhat/rhn/frontend/action/systems/audit/RuleDetailsAction.java  |    2 
 java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java    |    3 
 java/code/src/com/redhat/rhn/frontend/action/systems/audit/XccdfDetailsAction.java |    2 
 java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml         |    9 
 java/code/src/com/redhat/rhn/manager/audit/ScapManager.java                        |   17 
 java/code/webapp/WEB-INF/pages/audit/listxccdf.jsp                                 |    9 
 java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp                          |   32 +
 java/code/webapp/WEB-INF/pages/common/fragments/audit/xccdf-easy-list.jspf         |    9 
 java/code/webapp/WEB-INF/struts-config.xml                                         |    1 
 12 files changed, 373 insertions(+), 29 deletions(-)

New commits:
commit cf9d299c2bb529c02cea3096b4f4b648d733919a
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Thu Jun 14 12:04:54 2012 +0200

    Setup {inSSM} variable on audit pages.
    
    Do not show 'add to ssm' link for system that is already in.

diff --git a/java/code/src/com/redhat/rhn/frontend/action/systems/audit/RuleDetailsAction.java b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/RuleDetailsAction.java
index ff36b53..0f6ee95 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/systems/audit/RuleDetailsAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/RuleDetailsAction.java
@@ -25,6 +25,7 @@ import org.apache.struts.action.ActionMapping;
 
 import com.redhat.rhn.domain.server.Server;
 import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.action.systems.sdc.SdcHelper;
 import com.redhat.rhn.frontend.dto.XccdfRuleResultDto;
 import com.redhat.rhn.frontend.struts.RequestContext;
 import com.redhat.rhn.frontend.struts.RhnAction;
@@ -63,6 +64,7 @@ public class RuleDetailsAction extends RhnAction implements Listable {
 
         request.setAttribute(ListTagHelper.PARENT_URL,
                 request.getRequestURI() + "?sid=" + sid + "&rrid=" + ruleResultId);
+        SdcHelper.ssmCheck(request, sid, user);
 
         return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
     }
diff --git a/java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java
index 31fb82c..263706a 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java
@@ -16,6 +16,7 @@ package com.redhat.rhn.frontend.action.systems.audit;
 
 import com.redhat.rhn.domain.server.Server;
 import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.action.systems.sdc.SdcHelper;
 import com.redhat.rhn.frontend.struts.RequestContext;
 import com.redhat.rhn.frontend.struts.RhnAction;
 import com.redhat.rhn.manager.audit.ScapManager;
@@ -36,5 +37,7 @@ public abstract class ScapSetupAction extends RhnAction {
         boolean enabled = ScapManager.isScapEnabled(server, user);
         context.getRequest().setAttribute(SCAP_ENABLED, enabled);
         context.getRequest().setAttribute(REQUIRED_PKG, SPACEWALK_OSCAP);
+
+        SdcHelper.ssmCheck(context.getRequest(), server.getId(), user);
     }
 }
diff --git a/java/code/src/com/redhat/rhn/frontend/action/systems/audit/XccdfDetailsAction.java b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/XccdfDetailsAction.java
index 7475768..35618c0 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/systems/audit/XccdfDetailsAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/XccdfDetailsAction.java
@@ -27,6 +27,7 @@ import com.redhat.rhn.domain.audit.ScapFactory;
 import com.redhat.rhn.domain.audit.XccdfTestResult;
 import com.redhat.rhn.domain.server.Server;
 import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.action.systems.sdc.SdcHelper;
 import com.redhat.rhn.frontend.struts.RequestContext;
 import com.redhat.rhn.frontend.struts.RhnAction;
 import com.redhat.rhn.frontend.struts.RhnHelper;
@@ -64,6 +65,7 @@ public class XccdfDetailsAction extends RhnAction implements Listable {
 
         request.setAttribute(ListTagHelper.PARENT_URL,
                 request.getRequestURI() + "?sid=" + sid + "&xid=" + xid);
+        SdcHelper.ssmCheck(request, sid, user);
 
         return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
     }


commit ec2bc0832ce4e7d2586f98c15bd9764fea6df1e7
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Thu Jun 14 11:40:40 2012 +0200

    Add forgotten hidden form variable.

diff --git a/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp b/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
index 8065091..fbb6910 100644
--- a/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
@@ -137,6 +137,7 @@
     <input type="hidden" name="search_string" value="${search_string}"/>
     <input type="hidden" name="whereToSearch" value="${param.whereToSearch}"/>
     <input type="hidden" name="show_as" value="${param.show_as}"/>
+    <input type="hidden" name="result_filter" value="{param.result_filter}"/>
     <input type="hidden" name="optionScanDateSearch" value="${param.optionScanDateSearch}"/>
     <input type="hidden" name="start_year" value="${param.start_year}"/>
     <input type="hidden" name="start_month" value="${param.start_month}"/>


commit cd01241e2832fc4749c5912573a9db82cd092096
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Wed Jun 13 09:38:44 2012 +0200

    Improve SCAP search: Return list of xccdf:TestResults-s

diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
index 13d9459..53a9a35 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
@@ -295,6 +295,270 @@
   </query>
 </mode>
 
+<mode name="tr_by_idents" class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+  <elaborator name="testresult_counts"/>
+  <query params="user_id">
+  SELECT DISTINCT tr.id AS xid,
+      xp.identifier AS profile,
+      tr.server_id as sid,
+      s.name as server_name,
+      sa.completion_time AS completed
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestresult tr,
+          rhnUserServerPerms usp,
+          rhnXccdfProfile xp,
+          rhnServer s,
+          rhnActionScap ras,
+          rhnServerAction sa
+      WHERE rim.ident_id IN (%s)
+          AND rim.rresult_id = rr.id
+          AND tr.id = rr.testresult_id
+          AND tr.server_id = usp.server_id
+          AND usp.user_id = :user_id
+          AND tr.profile_id = xp.id
+          AND tr.server_id = s.id
+          AND tr.action_scap_id = ras.id
+          AND sa.action_id = ras.action_id
+          AND tr.server_id = sa.server_id
+      ORDER BY tr.id DESC
+  </query>
+</mode>
+
+<mode name="tr_by_idents_slabel" class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+  <elaborator name="testresult_counts"/>
+  <query params="user_id, slabel">
+  SELECT DISTINCT tr.id AS xid,
+      xp.identifier AS profile,
+      tr.server_id as sid,
+      s.name as server_name,
+      sa.completion_time AS completed
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestResult tr,
+          rhnSet st,
+          rhnXccdfProfile xp,
+          rhnServer s,
+          rhnActionScap ras,
+          rhnServerAction sa
+      WHERE rim.ident_id IN (%s)
+          AND rim.rresult_id = rr.id
+          AND tr.id = testresult_id
+          AND tr.server_id = st.element
+          AND st.user_id = :user_id
+          AND st.label = :slabel
+          AND tr.profile_id = xp.id
+          AND tr.server_id = s.id
+          AND tr.action_scap_id = ras.id
+          AND tr.server_id = sa.server_id
+          AND sa.action_id = ras.action_id
+      ORDER BY tr.id DESC
+  </query>
+</mode>
+
+<mode name="tr_by_idents_start_end" class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+  <elaborator name="testresult_counts"/>
+  <query params="user_id, start, end">
+  SELECT DISTINCT tr.id AS xid,
+      xp.identifier AS profile,
+      tr.server_id as sid,
+      s.name as server_name,
+      sa.completion_time AS completed
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestresult tr,
+          rhnUserServerPerms usp,
+          rhnActionScap ras,
+          rhnServerAction sa,
+          rhnXccdfProfile xp,
+          rhnServer s
+      WHERE rim.ident_id IN (%s)
+          AND rim.rresult_id = rr.id
+          AND tr.id = rr.testresult_id
+          AND tr.server_id = usp.server_id
+          AND usp.user_id = :user_id
+          AND tr.profile_id = xp.id
+          AND tr.server_id = s.id
+          AND tr.action_scap_id = ras.id
+          AND tr.server_id = sa.server_id
+          AND sa.action_id = ras.action_id
+          AND sa.completion_time &gt;= :start
+          AND sa.completion_time &lt;= :end
+      ORDER BY tr.id DESC
+  </query>
+</mode>
+
+<mode name="tr_by_idents_slabel_start_end" class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+  <elaborator name="testresult_counts"/>
+  <query params="user_id, slabel, start, end">
+  SELECT DISTINCT tr.id AS xid,
+      xp.identifier AS profile,
+      tr.server_id as sid,
+      s.name as server_name,
+      sa.completion_time AS completed
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestResult tr,
+          rhnSet st,
+          rhnActionScap ras,
+          rhnServerAction sa,
+          rhnXccdfProfile xp,
+          rhnServer s
+      WHERE rim.ident_id IN (%s)
+          AND rim.rresult_id = rr.id
+          AND tr.id = testresult_id
+          AND tr.server_id = st.element
+          AND st.user_id = :user_id
+          AND st.label = :slabel
+          AND tr.profile_id = xp.id
+          AND tr.server_id = s.id
+          AND tr.action_scap_id = ras.id
+          AND tr.server_id = sa.server_id
+          AND sa.action_id = ras.action_id
+          AND sa.completion_time &gt;= :start
+          AND sa.completion_time &lt;= :end
+      ORDER BY tr.id DESC
+  </query>
+</mode>
+
+<mode name="tr_by_idents_result" class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+  <elaborator name="testresult_counts"/>
+  <query params="user_id, result">
+  SELECT DISTINCT tr.id AS xid,
+      xp.identifier AS profile,
+      tr.server_id as sid,
+      s.name as server_name,
+      sa.completion_time AS completed
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestresult tr,
+          rhnUserServerPerms usp,
+          rhnActionScap ras,
+          rhnServerAction sa,
+          rhnXccdfProfile xp,
+          rhnServer s
+      WHERE rim.ident_id IN (%s)
+          AND rim.rresult_id = rr.id
+          AND rr.result_id = rrt.id
+          AND tr.id = rr.testresult_id
+          AND tr.server_id = usp.server_id
+          AND usp.user_id = :user_id
+          AND tr.profile_id = xp.id
+          AND tr.server_id = s.id
+          AND tr.action_scap_id = ras.id
+          AND tr.server_id = sa.server_id
+          AND sa.action_id = ras.action_id
+          AND rrt.label = :result
+      ORDER BY tr.id DESC
+  </query>
+</mode>
+
+<mode name="tr_by_idents_slabel_result" class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+  <elaborator name="testresult_counts"/>
+  <query params="user_id, slabel, result">
+  SELECT DISTINCT tr.id AS xid,
+      xp.identifier AS profile,
+      tr.server_id as sid,
+      s.name as server_name,
+      sa.completion_time AS completed
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestResult tr,
+          rhnSet st,
+          rhnActionScap ras,
+          rhnServerAction sa,
+          rhnXccdfProfile xp,
+          rhnServer s
+      WHERE rim.ident_id IN (%s)
+          AND rim.rresult_id = rr.id
+          AND rr.result_id = rrt.id
+          AND tr.id = testresult_id
+          AND tr.server_id = st.element
+          AND st.user_id = :user_id
+          AND st.label = :slabel
+          AND tr.profile_id = xp.id
+          AND tr.server_id = s.id
+          AND tr.action_scap_id = ras.id
+          AND tr.server_id = sa.server_id
+          AND sa.action_id = ras.action_id
+          AND rrt.label = :result
+      ORDER BY tr.id DESC
+  </query>
+</mode>
+
+<mode name="tr_by_idents_start_end_result" class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+  <elaborator name="testresult_counts"/>
+  <query params="user_id, start, end, result">
+  SELECT DISTINCT tr.id AS xid,
+      xp.identifier AS profile,
+      tr.server_id as sid,
+      s.name as server_name,
+      sa.completion_time AS completed
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestresult tr,
+          rhnUserServerPerms usp,
+          rhnActionScap ras,
+          rhnServerAction sa,
+          rhnXccdfProfile xp,
+          rhnServer s
+      WHERE rim.ident_id IN (%s)
+          AND rim.rresult_id = rr.id
+          AND rr.result_id = rrt.id
+          AND tr.id = rr.testresult_id
+          AND tr.server_id = usp.server_id
+          AND usp.user_id = :user_id
+          AND tr.profile_id = xp.id
+          AND tr.server_id = s.id
+          AND tr.action_scap_id = ras.id
+          AND tr.server_id = sa.server_id
+          AND sa.action_id = ras.action_id
+          AND sa.completion_time &gt;= :start
+          AND sa.completion_time &lt;= :end
+          AND rrt.label = :result
+      ORDER BY tr.id DESC
+  </query>
+</mode>
+
+<mode name="tr_by_idents_slabel_start_end_result" class="com.redhat.rhn.frontend.dto.XccdfTestResultDto">
+  <elaborator name="testresult_counts"/>
+  <query params="user_id, slabel, start, end, result">
+  SELECT DISTINCT tr.id AS xid,
+      xp.identifier AS profile,
+      tr.server_id as sid,
+      s.name as server_name,
+      sa.completion_time AS completed
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestResult tr,
+          rhnSet st,
+          rhnActionScap ras,
+          rhnServerAction sa,
+          rhnXccdfProfile xp,
+          rhnServer s
+      WHERE rim.ident_id IN (%s)
+          AND rim.rresult_id = rr.id
+          AND rr.result_id = rrt.id
+          AND tr.id = testresult_id
+          AND tr.server_id = st.element
+          AND st.user_id = :user_id
+          AND st.label = :slabel
+          AND tr.profile_id = xp.id
+          AND tr.server_id = s.id
+          AND tr.action_scap_id = ras.id
+          AND tr.server_id = sa.server_id
+          AND sa.action_id = ras.action_id
+          AND sa.completion_time &gt;= :start
+          AND sa.completion_time &lt;= :end
+          AND rrt.label = :result
+      ORDER BY tr.id DESC
+  </query>
+</mode>
+
 <mode name="idents_per_ruleresult" class="com.redhat.rhn.frontend.dto.XccdfIdentDto">
   <query params="rr_id">
   SELECT xi.id, xi.identifier, xis.system
diff --git a/java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchAction.java b/java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchAction.java
index 7fd0410..9c09ce7 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchAction.java
@@ -39,12 +39,14 @@ import org.directwebremoting.util.Logger;
 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.common.DateRangePicker;
 import com.redhat.rhn.frontend.struts.RequestContext;
 import com.redhat.rhn.frontend.struts.RhnAction;
 import com.redhat.rhn.frontend.struts.RhnHelper;
 import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.frontend.taglibs.list.TagHelper;
 import com.redhat.rhn.manager.audit.ScapManager;
 
 /**
@@ -56,6 +58,9 @@ public class XccdfSearchAction extends RhnAction {
     private static final String WHERE_TO_SEARCH = "whereToSearch";
     private static final String SCAN_DATE_SEARCH = "optionScanDateSearch";
     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";
     private static Logger log = Logger.getLogger(XccdfSearchAction.class);
 
     /** {@inheritDoc} */
@@ -129,15 +134,21 @@ public class XccdfSearchAction extends RhnAction {
         form.set(WHERE_TO_SEARCH,
                 "system_list".equals(whereToSearch) ? whereToSearch : "all");
         setupRuleResultLabelOptions(request);
+        setupShowAsOption(form);
         DateRangePicker picker = setupDatePicker(form, request);
 
         if (!StringUtils.isBlank(searchString)) {
             picker.processDatePickers(getOptionScanDateSearch(request), false);
-            List results = XccdfSearchHelper.performSearch(searchString, whereToSearch,
-                getPickerDate(request, "start"), getPickerDate(request, "end"),
-                getRuleResultLabel(form), context);
+            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("searchResults", results.getElaborator(),
+                        request);
+            }
         }
         else {
             request.setAttribute(RequestContext.PAGE_LIST, Collections.EMPTY_LIST);
@@ -186,6 +197,21 @@ public class XccdfSearchAction extends RhnAction {
                 "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 ||
diff --git a/java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchHelper.java b/java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchHelper.java
index 53dad98..a13dff6 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchHelper.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchHelper.java
@@ -27,6 +27,7 @@ import redstone.xmlrpc.XmlRpcException;
 import redstone.xmlrpc.XmlRpcFault;
 
 import com.redhat.rhn.common.conf.ConfigDefaults;
+import com.redhat.rhn.common.db.datasource.DataResult;
 import com.redhat.rhn.frontend.struts.RequestContext;
 import com.redhat.rhn.frontend.struts.RhnAction;
 import com.redhat.rhn.manager.audit.ScapManager;
@@ -44,17 +45,20 @@ public class XccdfSearchHelper extends RhnAction {
      * Perform search over XCCDF
      * @param searchString A string to search within xccdf:Rules
      * @param whereToSearch Where to search for scans, either ssm or all machines
-     * @param startDate search scans performed after startDate (null to ommit)
-     * @param endDate search scans performed before endDate (null to ommit)
-     * @param ruleResult search rules with given ruleresult label (null to ommit)
-     * @param context A context of cuyrrent request
+     * @param startDate search scans performed after startDate (null to omit)
+     * @param endDate search scans performed before endDate (null to omit)
+     * @param ruleResult search rules with given ruleresult label (null to omit)
+     * @param returnTestResults return results as list of TestResult (true),
+     * or RuleResults (false)
+     * @param context A context of current request
      * @return a list of xccdf:rule-results
      * @throws MalformedURLException possibly bad configuration for search server address
      * @throws XmlRpcException in the case of a serialization failure
      * @throws XmlRpcFault bad communication with search server
      */
-    public static List performSearch(String searchString, String whereToSearch,
-            Date startDate, Date endDate, String ruleResult, RequestContext context)
+    public static DataResult performSearch(String searchString, String whereToSearch,
+            Date startDate, Date endDate, String ruleResult, boolean returnTestResults,
+            RequestContext context)
             throws MalformedURLException, XmlRpcException, XmlRpcFault {
         ArrayList args = new ArrayList();
         args.add(context.getWebSession().getId());
@@ -83,7 +87,7 @@ public class XccdfSearchHelper extends RhnAction {
         if (ruleResult != null) {
             params.put("result", ruleResult);
         }
-        return ScapManager.ruleResultsByIdentIds(params, identIds);
+        return ScapManager.searchByIdentIds(params, identIds, returnTestResults);
     }
 
     private static String preprocessSearchString(String searchString) {
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 1fb8e89..8c8a3a7 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -12157,6 +12157,15 @@ the &lt;strong&gt;Red Hat Enterprise Linux System Administration Guide.&lt;/stro
        <trans-unit id="scapsearch.jsp.end_date">
          <source>End Date</source>
        </trans-unit>
+       <trans-unit id="scapsearch.jsp.show_as">
+         <source>Show Search Result As</source>
+       </trans-unit>
+       <trans-unit id="scapsearch.jsp.list_rr">
+         <source>List of XCCDF Rule Results</source>
+       </trans-unit>
+       <trans-unit id="scapsearch.jsp.list_tr">
+         <source>List of XCCDF Scans</source>
+       </trans-unit>
      </group>
 
      <!-- Action common -->
diff --git a/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java b/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
index dbe8120..3c71e14 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
@@ -134,22 +134,29 @@ public class ScapManager extends BaseManager {
     }
 
     /**
-     * Get xccdf:rule-results by ident's ids
+     * Get xccdf:rule-result-s or xccdf:TestResult-s by ident's ids
      * @param inParams direct parameters for query.
      * user_id is the only compulsory
      * @param identIds list of xccdf:ident ids
+     * @param returnTestResults what to return
+     * (true - list of testresults, false - list of rule-results)
      * @return the result
      */
-    public static List<XccdfRuleResultDto> ruleResultsByIdentIds(Map inParams,
-            List<Long> identIds) {
-        String modeName = "rr_by_idents";
+    public static DataResult searchByIdentIds(Map inParams,
+            List<Long> identIds, boolean returnTestResults) {
+        String modeName = (returnTestResults ? "t" : "r") + "r_by_idents";
         for (String term : SEARCH_TERM_PRECEDENCE) {
             if (inParams.containsKey(term)) {
                 modeName += "_" + term;
             }
         }
         SelectMode m = ModeFactory.getMode("scap_queries", modeName);
-        return m.execute(inParams, identIds);
+        DataResult dr = m.execute(inParams, identIds);
+        if (returnTestResults) {
+            dr.setTotalSize(dr.size());
+            dr = processPageControl(dr, null, new HashMap());
+        }
+        return dr;
     }
 
     /**
diff --git a/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp b/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
index aa42a0e..8065091 100644
--- a/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
@@ -93,6 +93,18 @@
             </div>
           </td>
         </tr>
+        <tr><th><bean:message key="scapsearch.jsp.show_as"/>:</th>
+          <td>
+            <div style="text-align: left">
+              <html:radio property="show_as" value="rr" styleId="show_as-rr"/>
+              <label for="show_as-rr"><bean:message key="scapsearch.jsp.list_rr"/></label>
+            </div>
+            <div style="text-align: left">
+              <html:radio property="show_as" value="tr" styleId="show_as-tr"/>
+              <label for="show_as-tr"><bean:message key="scapsearch.jsp.list_tr"/></label>
+            </div>
+          </td>
+        </tr>
       </table>
     </div> <!-- search-choices-group -->
   </div> <!-- search-choices -->
@@ -105,15 +117,26 @@
 
   <rl:listset name="searchSet" legend="xccdf">
     <rhn:csrf/>
-    <rl:list emptykey="generic.jsp.none" name="searchResults" dataset="pageList">
-      <rl:decorator name="PageSizeDecorator"/>
-      <%@ include file="/WEB-INF/pages/common/fragments/audit/rule-common-columns.jspf" %>
-    </rl:list>
+    <c:choose>
+      <c:when test="${param.show_as == 'tr'}">
+        <rl:list emptykey="generic.jsp.none" name="searchResults" dataset="pageList">
+          <%@ include file="/WEB-INF/pages/common/fragments/audit/xccdf-easy-list.jspf" %>
+        </rl:list>
+      </c:when>
+
+      <c:otherwise>
+        <rl:list emptykey="generic.jsp.none" name="searchResults" dataset="pageList">
+          <rl:decorator name="PageSizeDecorator"/>
+          <%@ include file="/WEB-INF/pages/common/fragments/audit/rule-common-columns.jspf" %>
+        </rl:list>
+      </c:otherwise>
+    </c:choose>
 
     <!-- there are two forms here, need to keep the formvars around for pagination -->
     <input type="hidden" name="submitted" value="true"/>
     <input type="hidden" name="search_string" value="${search_string}"/>
     <input type="hidden" name="whereToSearch" value="${param.whereToSearch}"/>
+    <input type="hidden" name="show_as" value="${param.show_as}"/>
     <input type="hidden" name="optionScanDateSearch" value="${param.optionScanDateSearch}"/>
     <input type="hidden" name="start_year" value="${param.start_year}"/>
     <input type="hidden" name="start_month" value="${param.start_month}"/>
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index 5002670..bab6c1d 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -239,6 +239,7 @@
             <form-property name="whereToSearch" type="java.lang.String"/>
             <form-property name="submitted" type="java.lang.Boolean" />
             <form-property name="result_filter" type="java.lang.String"/>
+            <form-property name="show_as" type="java.lang.String"/>
             <form-property name="optionScanDateSearch" type="java.lang.Boolean" />
             <form-property name="start_year" type="java.lang.Integer"/>
             <form-property name="start_month" type="java.lang.Integer"/>


commit 9395a74f2fe2e4bcce2db4dca508501c2647d570
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Wed Jun 13 12:58:19 2012 +0200

    Move the listset definition out off the fragment.

diff --git a/java/code/webapp/WEB-INF/pages/audit/listxccdf.jsp b/java/code/webapp/WEB-INF/pages/audit/listxccdf.jsp
index b57d55b..30ce4c8 100644
--- a/java/code/webapp/WEB-INF/pages/audit/listxccdf.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/listxccdf.jsp
@@ -17,7 +17,14 @@
   <bean:message key="system.audit.listscap.jsp.overview"/>
 </rhn:toolbar>
 
-<%@ include file="/WEB-INF/pages/common/fragments/audit/xccdf-easy-list.jspf" %>
+<rl:listset name="groupSet" legend="xccdf">
+  <rhn:csrf />
+  <rhn:submitted />
+  <rl:list emptykey="audit.listxccdf.jsp.noscans">
+    <%@ include file="/WEB-INF/pages/common/fragments/audit/xccdf-easy-list.jspf" %>
+  </rl:list>
+  <rhn:tooltip key="audit.listxccdf.jsp.tooltip"/>
+</rl:listset>
 
 </body>
 </html>
diff --git a/java/code/webapp/WEB-INF/pages/common/fragments/audit/xccdf-easy-list.jspf b/java/code/webapp/WEB-INF/pages/common/fragments/audit/xccdf-easy-list.jspf
index d824c70..6d2bd37 100644
--- a/java/code/webapp/WEB-INF/pages/common/fragments/audit/xccdf-easy-list.jspf
+++ b/java/code/webapp/WEB-INF/pages/common/fragments/audit/xccdf-easy-list.jspf
@@ -1,8 +1,3 @@
-<rl:listset name="groupSet" legend="xccdf">
-  <rhn:csrf />
-  <rhn:submitted />
-
-  <rl:list emptykey="audit.listxccdf.jsp.noscans">
     <rl:decorator name="ElaborationDecorator"/>
     <rl:decorator name="PageSizeDecorator"/>
 
@@ -33,7 +28,3 @@
     <rl:column headerkey="audit.listxccdf.jsp.satisfactionunknown">
       <c:out value="${current.satisfactionUnknown}"/>
     </rl:column>
-  </rl:list>
-</rl:listset>
-
-<rhn:tooltip key="audit.listxccdf.jsp.tooltip"/>


commit cfb3422440554a7700c29735bede25b37b28b156
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Wed Jun 13 13:21:20 2012 +0200

    Fix flawed SQL queries.
    
    When searching for rule-results within given dates,
    correct server_id needs to be bind. Otherwise, query
    can return more results than expected.

diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
index e51fa27..13d9459 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml
@@ -170,6 +170,7 @@
           AND usp.user_id = :user_id
           AND tr.action_scap_id = ras.id
           AND sa.action_id = ras.action_id
+          AND sa.server_id = tr.server_id
           AND sa.completion_time &gt;= :start
           AND sa.completion_time &lt;= :end
       ORDER BY rr.id DESC
@@ -195,6 +196,7 @@
           AND st.label = :slabel
           AND tr.action_scap_id = ras.id
           AND sa.action_id = ras.action_id
+          AND sa.server_id = tr.server_id
           AND sa.completion_time &gt;= :start
           AND sa.completion_time &lt;= :end
       ORDER BY rr.id DESC
@@ -258,6 +260,7 @@
           AND usp.user_id = :user_id
           AND tr.action_scap_id = ras.id
           AND sa.action_id = ras.action_id
+          AND sa.server_id = tr.server_id
           AND sa.completion_time &gt;= :start
           AND sa.completion_time &lt;= :end
           AND rrt.label = :result
@@ -284,6 +287,7 @@
           AND st.label = :slabel
           AND tr.action_scap_id = ras.id
           AND sa.action_id = ras.action_id
+          AND sa.server_id = tr.server_id
           AND sa.completion_time &gt;= :start
           AND sa.completion_time &lt;= :end
           AND rrt.label = :result




More information about the spacewalk-commits mailing list