6 commits - java/code

Šimon Lukašík isimluk at fedoraproject.org
Tue Jun 12 16:14:14 UTC 2012


 java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml         |  156 +++++++++-
 java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchAction.java |   59 +++
 java/code/src/com/redhat/rhn/frontend/action/audit/scap/XccdfSearchHelper.java |   22 +
 java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml     |   18 +
 java/code/src/com/redhat/rhn/manager/audit/ScapManager.java                    |   46 +-
 java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp                      |   63 +++-
 java/code/webapp/WEB-INF/pages/common/fragments/audit/scapcap-list.jspf        |   11 
 java/code/webapp/WEB-INF/pages/systems/details/audit/xccdfdetails.jsp          |    7 
 java/code/webapp/WEB-INF/struts-config.xml                                     |   14 
 9 files changed, 363 insertions(+), 33 deletions(-)

New commits:
commit 3663910c694f999d5f466a28ffb93b749e3ce98c
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Fri Jun 8 14:08:52 2012 +0200

    Improve SCAP search: searching by scan's result

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 81c9b3d..e51fa27 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
@@ -201,6 +201,96 @@
   </query>
 </mode>
 
+<mode name="rr_by_idents_result" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+  <query params="user_id, result">
+  SELECT DISTINCT rr.id, rrt.label, rr.testresult_id AS test_result_id
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestresult tr,
+          rhnUserServerPerms usp
+      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 rrt.label = :result
+      ORDER BY rr.id DESC
+  </query>
+</mode>
+
+<mode name="rr_by_idents_slabel_result" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+  <query params="user_id, slabel, result">
+  SELECT DISTINCT rr.id, rrt.label, rr.testresult_id AS test_result_id
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestResult tr,
+          rhnSet st
+      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 rrt.label = :result
+      ORDER BY rr.id DESC
+  </query>
+</mode>
+
+<mode name="rr_by_idents_start_end_result" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+  <query params="user_id, start, end, result">
+  SELECT DISTINCT rr.id, rrt.label, rr.testresult_id AS test_result_id
+    FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestresult tr,
+          rhnUserServerPerms usp,
+          rhnActionScap ras,
+          rhnServerAction sa
+      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.action_scap_id = ras.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 rr.id DESC
+  </query>
+</mode>
+
+<mode name="rr_by_idents_slabel_start_end_result" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+  <query params="user_id, slabel, start, end, result">
+  SELECT DISTINCT rr.id, rrt.label, rr.testresult_id AS test_result_id
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestResult tr,
+          rhnSet st,
+          rhnActionScap ras,
+          rhnServerAction sa
+      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.action_scap_id = ras.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 rr.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
@@ -263,4 +353,11 @@
   </query>
 </mode>
 
+<mode name="result_type_labels">
+  <query>
+  SELECT label
+      FROM rhnXccdfRuleresultType
+  </query>
+</mode>
+
 </datasource_modes>
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 3a80b31..7fd0410 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
@@ -19,6 +19,7 @@ import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -44,6 +45,7 @@ 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.manager.audit.ScapManager;
 
 /**
  * XccdfSearchAction
@@ -53,6 +55,7 @@ public class XccdfSearchAction extends RhnAction {
     private static final String SEARCH_STRING = "search_string";
     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 Logger log = Logger.getLogger(XccdfSearchAction.class);
 
     /** {@inheritDoc} */
@@ -125,12 +128,14 @@ public class XccdfSearchAction extends RhnAction {
         request.setAttribute(SEARCH_STRING, searchString);
         form.set(WHERE_TO_SEARCH,
                 "system_list".equals(whereToSearch) ? whereToSearch : "all");
+        setupRuleResultLabelOptions(request);
         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"), context);
+                getPickerDate(request, "start"), getPickerDate(request, "end"),
+                getRuleResultLabel(form), context);
             request.setAttribute(RequestContext.PAGE_LIST,
                     results != null ? results : Collections.EMPTY_LIST);
         }
@@ -180,4 +185,22 @@ public class XccdfSearchAction extends RhnAction {
                 DatePicker.YEAR_RANGE_NEGATIVE, "scapsearch.jsp.start_date",
                 "scapsearch.jsp.end_date");
     }
+
+    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);
+    }
 }
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 26d7f10..53dad98 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
@@ -46,6 +46,7 @@ public class XccdfSearchHelper extends RhnAction {
      * @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
      * @return a list of xccdf:rule-results
      * @throws MalformedURLException possibly bad configuration for search server address
@@ -53,7 +54,7 @@ public class XccdfSearchHelper extends RhnAction {
      * @throws XmlRpcFault bad communication with search server
      */
     public static List performSearch(String searchString, String whereToSearch,
-            Date startDate, Date endDate, RequestContext context)
+            Date startDate, Date endDate, String ruleResult, RequestContext context)
             throws MalformedURLException, XmlRpcException, XmlRpcFault {
         ArrayList args = new ArrayList();
         args.add(context.getWebSession().getId());
@@ -79,6 +80,9 @@ public class XccdfSearchHelper extends RhnAction {
             params.put("start", new Timestamp(startDate.getTime()));
             params.put("end", new Timestamp(endDate.getTime()));
         }
+        if (ruleResult != null) {
+            params.put("result", ruleResult);
+        }
         return ScapManager.ruleResultsByIdentIds(params, identIds);
     }
 
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 f455759..1fb8e89 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
@@ -12142,6 +12142,9 @@ the &lt;strong&gt;Red Hat Enterprise Linux System Administration Guide.&lt;/stro
        <trans-unit id="scapsearch.jsp.whatsearch.tip">
          <source>&lt;strong&gt;Examples:&lt;/strong&gt; &#39;no_hashes_outside_shadow&#39;, &#39;CCE-14300-8&#39;</source>
        </trans-unit>
+       <trans-unit id="scapsearch.jsp.withresult">
+         <source>With Result</source>
+       </trans-unit>
        <trans-unit id="scapsearch.jsp.scan_date">
          <source>Scan Dates to Search</source>
        </trans-unit>
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 ad90d19..dbe8120 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
@@ -43,7 +43,7 @@ import com.redhat.rhn.manager.rhnset.RhnSetDecl;
 public class ScapManager extends BaseManager {
 
     private static final List<String> SEARCH_TERM_PRECEDENCE = Arrays.asList(
-            "slabel", "start", "end");
+            "slabel", "start", "end", "result");
 
     /**
      * Returns the given system is scap enabled.
@@ -222,6 +222,14 @@ public class ScapManager extends BaseManager {
     }
 
     /**
+     * Return list of possible results of xccdf:rule evaluation
+     * @return the result
+     */
+    public static List<Map<String, String>> ruleResultTypeLabels() {
+        return ModeFactory.getMode("scap_queries", "result_type_labels").execute();
+    }
+
+    /**
      * Checks if the user has permission to see the XCCDF scan.
      * @param user User being checked.
      * @param testResultId ID of the XCCDF scan being checked.
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 03232c8..aa42a0e 100644
--- a/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
@@ -48,6 +48,13 @@
             </span>
           </td>
         </tr>
+        <tr><th><bean:message key="scapsearch.jsp.withresult"/>:</th>
+          <td>
+            <html:select property="result_filter">
+              <html:options collection="allResults" property="label" labelProperty="label"/>
+            </html:select>
+          </td>
+        </tr>
         <tr><th><bean:message key="systemsearch.jsp.wheretosearch"/></th>
           <td>
             <div style="text-align: left">
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index c2d8ec6..5002670 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -238,6 +238,7 @@
             <form-property name="search_string" type="java.lang.String"/>
             <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="optionScanDateSearch" type="java.lang.Boolean" />
             <form-property name="start_year" type="java.lang.Integer"/>
             <form-property name="start_month" type="java.lang.Integer"/>


commit 1d9be627985364fbdc99aac0ad130f034c7f3bbc
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Wed Jun 6 15:34:17 2012 +0200

    Improve SCAP search: searching by scan date

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 b1c0383..81c9b3d 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
@@ -152,6 +152,55 @@
   </query>
 </mode>
 
+<mode name="rr_by_idents_start_end" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+  <query params="user_id, start, end">
+  SELECT DISTINCT rr.id, rrt.label, rr.testresult_id AS test_result_id
+    FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestresult tr,
+          rhnUserServerPerms usp,
+          rhnActionScap ras,
+          rhnServerAction sa
+      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.action_scap_id = ras.id
+          AND sa.action_id = ras.action_id
+          AND sa.completion_time &gt;= :start
+          AND sa.completion_time &lt;= :end
+      ORDER BY rr.id DESC
+  </query>
+</mode>
+
+<mode name="rr_by_idents_slabel_start_end" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+  <query params="user_id, slabel, start, end">
+  SELECT DISTINCT rr.id, rrt.label, rr.testresult_id AS test_result_id
+      FROM rhnXccdfRuleresult rr,
+          rhnXccdfRuleresultType rrt,
+          rhnXccdfRuleIdentMap rim,
+          rhnXccdfTestResult tr,
+          rhnSet st,
+          rhnActionScap ras,
+          rhnServerAction sa
+      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.action_scap_id = ras.id
+          AND sa.action_id = ras.action_id
+          AND sa.completion_time &gt;= :start
+          AND sa.completion_time &lt;= :end
+      ORDER BY rr.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 3a16605..3a80b31 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
@@ -15,7 +15,9 @@
 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.Enumeration;
 import java.util.List;
 import java.util.Map;
@@ -36,6 +38,8 @@ import org.directwebremoting.util.Logger;
 import redstone.xmlrpc.XmlRpcException;
 import redstone.xmlrpc.XmlRpcFault;
 
+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;
@@ -48,6 +52,7 @@ public class XccdfSearchAction extends RhnAction {
 
     private static final String SEARCH_STRING = "search_string";
     private static final String WHERE_TO_SEARCH = "whereToSearch";
+    private static final String SCAN_DATE_SEARCH = "optionScanDateSearch";
     private static Logger log = Logger.getLogger(XccdfSearchAction.class);
 
     /** {@inheritDoc} */
@@ -120,15 +125,18 @@ public class XccdfSearchAction extends RhnAction {
         request.setAttribute(SEARCH_STRING, searchString);
         form.set(WHERE_TO_SEARCH,
                 "system_list".equals(whereToSearch) ? whereToSearch : "all");
+        DateRangePicker picker = setupDatePicker(form, request);
 
         if (!StringUtils.isBlank(searchString)) {
+            picker.processDatePickers(getOptionScanDateSearch(request), false);
             List results = XccdfSearchHelper.performSearch(searchString, whereToSearch,
-                    context);
+                getPickerDate(request, "start"), getPickerDate(request, "end"), context);
             request.setAttribute(RequestContext.PAGE_LIST,
                     results != null ? results : Collections.EMPTY_LIST);
         }
         else {
             request.setAttribute(RequestContext.PAGE_LIST, Collections.EMPTY_LIST);
+            picker.processDatePickers(false, false);
         }
     }
 
@@ -146,4 +154,30 @@ public class XccdfSearchAction extends RhnAction {
         }
         return forwardParams;
     }
+
+    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) {
+        String strDateSearch = request.getParameter(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");
+    }
 }
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 d0e4a30..26d7f10 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
@@ -15,7 +15,9 @@
 package com.redhat.rhn.frontend.action.audit.scap;
 
 import java.net.MalformedURLException;
+import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -42,6 +44,8 @@ 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 context A context of cuyrrent request
      * @return a list of xccdf:rule-results
      * @throws MalformedURLException possibly bad configuration for search server address
@@ -49,7 +53,7 @@ public class XccdfSearchHelper extends RhnAction {
      * @throws XmlRpcFault bad communication with search server
      */
     public static List performSearch(String searchString, String whereToSearch,
-            RequestContext context)
+            Date startDate, Date endDate, RequestContext context)
             throws MalformedURLException, XmlRpcException, XmlRpcFault {
         ArrayList args = new ArrayList();
         args.add(context.getWebSession().getId());
@@ -71,6 +75,10 @@ public class XccdfSearchHelper extends RhnAction {
         if (SYSTEM_LIST.equals(whereToSearch)) {
             params.put("slabel", SYSTEM_LIST);
         }
+        if (startDate != null && endDate != null) {
+            params.put("start", new Timestamp(startDate.getTime()));
+            params.put("end", new Timestamp(endDate.getTime()));
+        }
         return ScapManager.ruleResultsByIdentIds(params, identIds);
     }
 
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 3a923eb..f455759 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
@@ -12142,6 +12142,18 @@ the &lt;strong&gt;Red Hat Enterprise Linux System Administration Guide.&lt;/stro
        <trans-unit id="scapsearch.jsp.whatsearch.tip">
          <source>&lt;strong&gt;Examples:&lt;/strong&gt; &#39;no_hashes_outside_shadow&#39;, &#39;CCE-14300-8&#39;</source>
        </trans-unit>
+       <trans-unit id="scapsearch.jsp.scan_date">
+         <source>Scan Dates to Search</source>
+       </trans-unit>
+       <trans-unit id="scapsearch.jsp.search_by_scan_dates">
+         <source>Search Scans Performed Between Dates</source>
+       </trans-unit>
+       <trans-unit id="scapsearch.jsp.start_date">
+         <source>Start Date</source>
+       </trans-unit>
+       <trans-unit id="scapsearch.jsp.end_date">
+         <source>End Date</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 10a0317..ad90d19 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
@@ -43,7 +43,7 @@ import com.redhat.rhn.manager.rhnset.RhnSetDecl;
 public class ScapManager extends BaseManager {
 
     private static final List<String> SEARCH_TERM_PRECEDENCE = Arrays.asList(
-            "slabel");
+            "slabel", "start", "end");
 
     /**
      * Returns the given system is scap enabled.
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 00bbf37..03232c8 100644
--- a/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
@@ -6,6 +6,21 @@
 
 <html:xhtml/>
 <html>
+<head>
+  <script language="javascript">
+    Event.observe(window, 'load', function() {
+        scanDateSearchOptions();
+        });
+    function scanDateSearchOptions() {
+      if ($("scanDateOptionsCheckBox").checked) {
+        Element.show("scanDateOptions");
+      } else {
+        Element.hide("scanDateOptions");
+      }
+    }
+  </script>
+</head>
+
 <body>
 
 <rhn:toolbar base="h1" img="/img/rhn-icon-search.gif" imgAlt="search.alt.img">
@@ -45,6 +60,32 @@
             </div>
           </td>
         </tr>
+        <tr><th><bean:message key="scapsearch.jsp.scan_date"/>:</th>
+          <td>
+            <html:checkbox styleId="scanDateOptionsCheckBox" property="optionScanDateSearch" onclick="javascript:scanDateSearchOptions()">
+              <label for="scanDateOptionsCheckBox">
+                <bean:message key="scapsearch.jsp.search_by_scan_dates"/>
+              </label>
+            </html:checkbox>
+            </br>
+            <div id="scanDateOptions" class="indent">
+              <table>
+                <tr><td><bean:message key="scapsearch.jsp.start_date"/>:</td>
+                  <td><jsp:include page="/WEB-INF/pages/common/fragments/date-picker.jsp">
+                      <jsp:param name="widget" value="start"/>
+                    </jsp:include>
+                  </td>
+                </tr>
+                <tr><td><bean:message key="scapsearch.jsp.end_date"/>:</td>
+                  <td><jsp:include page="/WEB-INF/pages/common/fragments/date-picker.jsp">
+                      <jsp:param name="widget" value="end"/>
+                    </jsp:include>
+                  </td>
+                <tr>
+              </table>
+            </div>
+          </td>
+        </tr>
       </table>
     </div> <!-- search-choices-group -->
   </div> <!-- search-choices -->
@@ -66,6 +107,19 @@
     <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="optionScanDateSearch" value="${param.optionScanDateSearch}"/>
+    <input type="hidden" name="start_year" value="${param.start_year}"/>
+    <input type="hidden" name="start_month" value="${param.start_month}"/>
+    <input type="hidden" name="start_day" value="${param.start_day}"/>
+    <input type="hidden" name="start_hour" value="${param.start_hour}"/>
+    <input type="hidden" name="start_minute" value="${param.start_minute}"/>
+    <input type="hidden" name="start_am_pm" value="${param.start_am_pm}"/>
+    <input type="hidden" name="end_year" value="${param.end_year}"/>
+    <input type="hidden" name="end_month" value="${param.end_month}"/>
+    <input type="hidden" name="end_day" value="${param.end_day}"/>
+    <input type="hidden" name="end_hour" value="${param.end_hour}"/>
+    <input type="hidden" name="end_minute" value="${param.end_minute}"/>
+    <input type="hidden" name="end_am_pm" value="${param.end_am_pm}"/>
   </rl:listset>
 </c:if>
 
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index ac1e0fa..c2d8ec6 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -238,6 +238,19 @@
             <form-property name="search_string" type="java.lang.String"/>
             <form-property name="whereToSearch" type="java.lang.String"/>
             <form-property name="submitted" type="java.lang.Boolean" />
+            <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"/>
+            <form-property name="start_day" type="java.lang.Integer"/>
+            <form-property name="start_hour" type="java.lang.Integer"/>
+            <form-property name="start_minute" type="java.lang.Integer"/>
+            <form-property name="start_am_pm" type="java.lang.Integer"/>
+            <form-property name="end_year" type="java.lang.Integer"/>
+            <form-property name="end_month" type="java.lang.Integer"/>
+            <form-property name="end_day" type="java.lang.Integer"/>
+            <form-property name="end_hour" type="java.lang.Integer"/>
+            <form-property name="end_minute" type="java.lang.Integer"/>
+            <form-property name="end_am_pm" type="java.lang.Integer"/>
         </form-bean>
         <form-bean name="errataSearchForm"
                    type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">


commit 0b73cf56be459798a650ad89eba531f3873f239a
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Thu Jun 7 18:36:39 2012 +0200

    Bind named query dynamically.

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 592cd8d..b1c0383 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
@@ -113,7 +113,9 @@
   </query>
 </mode>
 
-<mode name="ruleresults_by_idents" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+<!-- Queries starting with rr_by_idents are binded dynamically
+     in ScapManager.ruleResultsByIdents() method. -->
+<mode name="rr_by_idents" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
   <query params="user_id">
   SELECT DISTINCT rr.id, rrt.label, rr.testresult_id AS test_result_id
       FROM rhnXccdfRuleresult rr,
@@ -131,8 +133,8 @@
   </query>
 </mode>
 
-<mode name="ruleresults_by_idents_for_ssm" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
-  <query params="user_id">
+<mode name="rr_by_idents_slabel" class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+  <query params="user_id, slabel">
   SELECT DISTINCT rr.id, rrt.label, rr.testresult_id AS test_result_id
       FROM rhnXccdfRuleresult rr,
           rhnXccdfRuleresultType rrt,
@@ -145,7 +147,7 @@
           AND tr.id = testresult_id
           AND tr.server_id = st.element
           AND st.user_id = :user_id
-          AND st.label = 'system_list'
+          AND st.label = :slabel
       ORDER BY rr.id DESC
   </query>
 </mode>
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 5b16d8d..d0e4a30 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
@@ -16,6 +16,7 @@ package com.redhat.rhn.frontend.action.audit.scap;
 
 import java.net.MalformedURLException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -65,11 +66,12 @@ public class XccdfSearchHelper extends RhnAction {
             identIds.add(id);
         }
 
+        Map params = new HashMap<String, Object>();
+        params.put("user_id", context.getCurrentUser().getId());
         if (SYSTEM_LIST.equals(whereToSearch)) {
-            return ScapManager.ruleResultsByIdentIdsForSsm(context.getCurrentUser(),
-                     identIds);
+            params.put("slabel", SYSTEM_LIST);
         }
-        return ScapManager.ruleResultsByIdentIds(context.getCurrentUser(), identIds);
+        return ScapManager.ruleResultsByIdentIds(params, identIds);
     }
 
     private static String preprocessSearchString(String searchString) {
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 46cc269..10a0317 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
@@ -15,6 +15,7 @@
 package com.redhat.rhn.manager.audit;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -41,6 +42,9 @@ import com.redhat.rhn.manager.rhnset.RhnSetDecl;
  */
 public class ScapManager extends BaseManager {
 
+    private static final List<String> SEARCH_TERM_PRECEDENCE = Arrays.asList(
+            "slabel");
+
     /**
      * Returns the given system is scap enabled.
      * @param server The system for which to seach scap capability
@@ -131,33 +135,21 @@ public class ScapManager extends BaseManager {
 
     /**
      * Get xccdf:rule-results by ident's ids
-     * @param user attempting to view results
+     * @param inParams direct parameters for query.
+     * user_id is the only compulsory
      * @param identIds list of xccdf:ident ids
      * @return the result
      */
-    public static List<XccdfRuleResultDto> ruleResultsByIdentIds(User user,
+    public static List<XccdfRuleResultDto> ruleResultsByIdentIds(Map inParams,
             List<Long> identIds) {
-        SelectMode m = ModeFactory.getMode("scap_queries",
-                "ruleresults_by_idents");
-        HashMap params = new HashMap();
-        params.put("user_id", user.getId());
-        return m.execute(params, identIds);
-    }
-
-    /**
-     * Get xccdf:rule-results by ident's ids, but only those in relation
-     * with some of the SSM systems.
-     * @param user requesting results
-     * @param identIds list of xccdf:ident ids
-     * @return the result
-     */
-    public static List<XccdfRuleResultDto> ruleResultsByIdentIdsForSsm(
-            User user, List<Long> identIds) {
-        SelectMode m = ModeFactory.getMode("scap_queries",
-                "ruleresults_by_idents_for_ssm");
-        HashMap params = new HashMap();
-        params.put("user_id", user.getId());
-        return m.execute(params, identIds);
+        String modeName = "rr_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);
     }
 
     /**


commit 1491980408f824b50c5c9d43d0017376c9839a6d
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Wed Jun 6 13:34:33 2012 +0200

    Add a link for easy scan reschedule.

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 04feaed..3a923eb 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
@@ -12064,6 +12064,9 @@ the &lt;strong&gt;Red Hat Enterprise Linux System Administration Guide.&lt;/stro
        <trans-unit id="system.audit.xccdfdetails.jsp.unknown">
          <source>Unknown</source>
        </trans-unit>
+       <trans-unit id="system.audit.xccdfdetails.jsp.reschedule">
+         <source>reschedule</source>
+       </trans-unit>
      </group>
 
      <group>
diff --git a/java/code/webapp/WEB-INF/pages/systems/details/audit/xccdfdetails.jsp b/java/code/webapp/WEB-INF/pages/systems/details/audit/xccdfdetails.jsp
index b017e65..6248806 100644
--- a/java/code/webapp/WEB-INF/pages/systems/details/audit/xccdfdetails.jsp
+++ b/java/code/webapp/WEB-INF/pages/systems/details/audit/xccdfdetails.jsp
@@ -12,6 +12,13 @@
 
 <%@ include file="/WEB-INF/pages/common/fragments/systems/system-header.jspf" %>
 
+<div class="toolbar">
+  <a href="/rhn/systems/details/audit/ScheduleXccdf.do?sid=${param.sid}&path=${testResult.scapActionDetails.path}&params=${testResult.scapActionDetails.parametersContents}">
+    <img src="/img/restart.png" alt="<bean:message key="system.audit.xccdfdetails.jsp.reschedule"/>"/>
+    <bean:message key="system.audit.xccdfdetails.jsp.reschedule"/>
+  </a>
+</div>
+
 <h2><bean:message key="system.audit.xccdfdetails.jsp.header"/></h2>
 <rhn:csrf/>
 


commit 181a5596de7bb0bee22d9a15f98376f2fe940dd9
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Tue Jun 5 16:42:20 2012 +0200

    Forward main-form variables when going through system list
    
    On the page, there are 2 forms -- the first for user's input,
    the other is a listhelper. When going through list, the second
    form must not neglect user's input.

diff --git a/java/code/webapp/WEB-INF/pages/common/fragments/audit/scapcap-list.jspf b/java/code/webapp/WEB-INF/pages/common/fragments/audit/scapcap-list.jspf
index 7fc31e8..4834614 100644
--- a/java/code/webapp/WEB-INF/pages/common/fragments/audit/scapcap-list.jspf
+++ b/java/code/webapp/WEB-INF/pages/common/fragments/audit/scapcap-list.jspf
@@ -22,4 +22,15 @@
       </c:choose>
     </rl:column>
   </rl:list>
+
+  <input type="hidden" name="submitted" value="true"/>
+  <input type="hidden" name="params" value="${param.params}"/>
+  <input type="hidden" name="path" value="${param.path}"/>
+  <input type="hidden" name="use_date" value="true"/>
+  <input type="hidden" name="date_year" value="${param.date_year}"/>
+  <input type="hidden" name="date_month" value="${param.date_month}"/>
+  <input type="hidden" name="date_day" value="${param.date_day}"/>
+  <input type="hidden" name="date_hour" value="${param.date_hour}"/>
+  <input type="hidden" name="date_minute" value="${param.date_minute}"/>
+  <input type="hidden" name="date_am_pm" value="${param.date_am_pm}"/>
 </rl:listset>


commit 4f114c64f118dd85433d6fff57e8667c2a2cb8d5
Author: Simon Lukasik <slukasik at redhat.com>
Date:   Tue Jun 5 16:18:02 2012 +0200

    Fix incorrect variable reference.

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 55d85fe..00bbf37 100644
--- a/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
+++ b/java/code/webapp/WEB-INF/pages/audit/scap/xccdfsearch.jsp
@@ -65,7 +65,7 @@
     <!-- 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="${whereToSearch}"/>
+    <input type="hidden" name="whereToSearch" value="${param.whereToSearch}"/>
   </rl:listset>
 </c:if>
 




More information about the spacewalk-commits mailing list