java/code/src/com/redhat/rhn/common/db/datasource/xml/scap_queries.xml | 12
+
java/code/src/com/redhat/rhn/frontend/action/systems/audit/RuleDetailsAction.java | 83
++++++++++
java/code/src/com/redhat/rhn/frontend/dto/XccdfRuleResultDto.java | 42
+++++
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 27
+++
java/code/src/com/redhat/rhn/manager/audit/ScapManager.java | 15
+
java/code/webapp/WEB-INF/pages/systems/details/audit/ruledetails.jsp | 53
++++++
java/code/webapp/WEB-INF/pages/systems/details/audit/xccdfdetails.jsp | 18
+-
java/code/webapp/WEB-INF/struts-config.xml | 9
+
8 files changed, 250 insertions(+), 9 deletions(-)
New commits:
commit 3bfc9df89219aa4e2c41d8902b7fd974f09024cb
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Thu Mar 29 20:19:33 2012 +0200
New web page -- details of the xccdf:rule-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 deb69b8..3f810df 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
@@ -34,7 +34,7 @@
<mode name="show_ruleresults"
class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
<query params="xid">
- SELECT rr.id, rrt.label
+ SELECT rr.id, rrt.label, rr.testresult_id as test_result_id
FROM rhnXccdfRuleresult rr,
rhnXccdfRuleresultType rrt
WHERE rr.testresult_id = :xid
@@ -43,6 +43,16 @@
</query>
</mode>
+<mode name="ruleresult_by_id"
class="com.redhat.rhn.frontend.dto.XccdfRuleResultDto">
+ <query params="rr_id">
+ SELECT rr.id, rrt.label, rr.testresult_id as test_result_id
+ FROM rhnXccdfRuleresult rr,
+ rhnXccdfRuleresultType rrt
+ WHERE rr.id = :rr_id
+ AND rr.result_id = rrt.id
+ </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/systems/audit/RuleDetailsAction.java
b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/RuleDetailsAction.java
new file mode 100644
index 0000000..40ca594
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/RuleDetailsAction.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2012 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.systems.audit;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+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.dto.XccdfRuleResultDto;
+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.helper.ListHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
+import com.redhat.rhn.manager.audit.ScapManager;
+import com.redhat.rhn.manager.system.SystemManager;
+
+/**
+ * RuleDetailsAction
+ * @version $Rev$
+ */
+
+public class RuleDetailsAction extends RhnAction implements Listable {
+
+ /**
+ * {@inheritDoc}
+ */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+ RequestContext context = new RequestContext(request);
+ User user = context.getLoggedInUser();
+ Long sid = context.getRequiredParam("sid");
+ Server server = SystemManager.lookupByIdAndUser(sid, user);
+ Long ruleResultId = context.getRequiredParam("rrid");
+ XccdfRuleResultDto ruleResult = ScapManager.ruleResultById(ruleResultId);
+
+ request.setAttribute("ruleResult", ruleResult);
+ request.setAttribute("system", server);
+
+ ListHelper helper = new ListHelper(this, request);
+ helper.execute();
+
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ request.getRequestURI() + "?sid=" + sid +
"&rrid=" + ruleResultId);
+
+ return mapping.findForward(RhnHelper.DEFAULT_FORWARD);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List getResult(RequestContext context) {
+ Long ruleResultId = context.getRequiredParam("rrid");
+ XccdfRuleResultDto ruleResult = ScapManager.ruleResultById(ruleResultId);
+ if (ruleResult == null) {
+ return null;
+ }
+ else {
+ return ruleResult.getIdentsWithoutIdref();
+ }
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/XccdfRuleResultDto.java
b/java/code/src/com/redhat/rhn/frontend/dto/XccdfRuleResultDto.java
index 2e842d0..6865840 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/XccdfRuleResultDto.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/XccdfRuleResultDto.java
@@ -14,8 +14,11 @@
*/
package com.redhat.rhn.frontend.dto;
+import java.util.ArrayList;
import java.util.List;
+import com.redhat.rhn.domain.audit.ScapFactory;
+import com.redhat.rhn.domain.audit.XccdfTestResult;
import com.redhat.rhn.manager.audit.ScapManager;
/**
@@ -26,6 +29,7 @@ public class XccdfRuleResultDto {
private Long id;
private String label;
+ private Long testResultId;
private List<XccdfIdentDto> idents;
/**
@@ -61,6 +65,30 @@ public class XccdfRuleResultDto {
}
/**
+ * Returns id of parent xccdf:TestResult
+ * @return the id
+ */
+ public Long getTestResultId() {
+ return this.testResultId;
+ }
+
+ /**
+ * Sets the id of parent xccdf:TestResult
+ * @param testResultIdIn to set
+ */
+ public void setTestResultId(Long testResultIdIn) {
+ testResultId = testResultIdIn;
+ }
+
+ /**
+ * Returns the parent testResult
+ * @return the parent testResult
+ */
+ public XccdfTestResult getTestResult() {
+ return ScapFactory.lookupTestResultById(this.testResultId);
+ }
+
+ /**
* Get idref attribute of xccdf:rule-result
* @return idref attribute
*/
@@ -74,6 +102,20 @@ public class XccdfRuleResultDto {
}
/**
+ * Get idents without idref
+ * @return list of idents without the idref
+ */
+ public List<XccdfIdentDto> getIdentsWithoutIdref() {
+ List<XccdfIdentDto> result = new ArrayList<XccdfIdentDto>();
+ for (XccdfIdentDto i : getIdents()) {
+ if (!i.isDocumentIdref()) {
+ result.add(i);
+ }
+ }
+ return result;
+ }
+
+ /**
* Return summary of xccdf:idents in xccdf:rule-result
* @return comma separated list of xccdf:ident identifiers
*/
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 4e1e624..4fc5d98 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
@@ -11900,6 +11900,33 @@ the <strong>Red Hat Enterprise Linux System
Administration Guide.</stro
</trans-unit>
</group>
+ <group>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Detailed view of single SCAP
XCCDF rule-result</context>
+ </context-group>
+ <trans-unit id="system.audit.ruledetails.jsp.heading">
+ <source>Details of Rule Result</source>
+ </trans-unit>
+ <trans-unit id="system.audit.ruledetails.jsp.idref">
+ <source>Reference within Document</source>
+ </trans-unit>
+ <trans-unit id="system.audit.ruledetails.jsp.result">
+ <source>Evaluation Result</source>
+ </trans-unit>
+ <trans-unit id="system.audit.ruledetails.jsp.parent">
+ <source>Parent Scan</source>
+ </trans-unit>
+ <trans-unit id="system.audit.ruledetails.jsp.assignedidents">
+ <source>Assigned Ident Tags</source>
+ </trans-unit>
+ <trans-unit id="system.audit.ruledetails.jsp.system">
+ <source>Naming System</source>
+ </trans-unit>
+ <trans-unit id="system.audit.ruledetails.jsp.ident">
+ <source>Identifier</source>
+ </trans-unit>
+ </group>
+
<!-- Action common -->
<group>
<context-group name="ctx">
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 8f03779..3040932 100644
--- a/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
+++ b/java/code/src/com/redhat/rhn/manager/audit/ScapManager.java
@@ -25,6 +25,7 @@ import com.redhat.rhn.common.db.datasource.SelectMode;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.dto.XccdfIdentDto;
+import com.redhat.rhn.frontend.dto.XccdfRuleResultDto;
import com.redhat.rhn.manager.BaseManager;
/**
@@ -77,6 +78,20 @@ public class ScapManager extends BaseManager {
}
/**
+ * Get xccdf:rule-result by id
+ * @param ruleResultId of the XccdfRuleResult
+ * @return the result
+ */
+ public static XccdfRuleResultDto ruleResultById(Long ruleResultId) {
+ SelectMode m = ModeFactory.getMode("scap_queries",
+ "ruleresult_by_id");
+ HashMap params = new HashMap();
+ params.put("rr_id", ruleResultId);
+ List<XccdfRuleResultDto> result = (List<XccdfRuleResultDto>)
m.execute(params);
+ return result.isEmpty() ? null : result.get(0);
+ }
+
+ /**
* Show xccdf:ident results for given rule-result
* @param ruleResultId of XccdfRuleResultDto
* @return the list of idents
diff --git a/java/code/webapp/WEB-INF/pages/systems/details/audit/ruledetails.jsp
b/java/code/webapp/WEB-INF/pages/systems/details/audit/ruledetails.jsp
new file mode 100644
index 0000000..babd448
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/systems/details/audit/ruledetails.jsp
@@ -0,0 +1,53 @@
+<%@ taglib
uri="http://rhn.redhat.com/rhn" prefix="rhn" %>
+<%@ taglib
uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
+<%@ taglib
uri="http://struts.apache.org/tags-html" prefix="html"
%>
+<%@ taglib
uri="http://struts.apache.org/tags-bean" prefix="bean"
%>
+<%@ taglib
uri="http://rhn.redhat.com/tags/list" prefix="rl"
%>
+<%@ taglib
uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"
%>
+
+<html:xhtml/>
+<html>
+
+<body>
+
+<%@ include
file="/WEB-INF/pages/common/fragments/systems/system-header.jspf" %>
+
+<h2><bean:message
key="system.audit.ruledetails.jsp.heading"/></h2>
+<rhn:csrf/>
+
+<table class="details">
+ <tr>
+ <th><bean:message
key="system.audit.ruledetails.jsp.idref"/>:</th>
+ <td><c:out value="${ruleResult.documentIdref}"/></td>
+ </tr>
+ <tr>
+ <th><bean:message
key="system.audit.ruledetails.jsp.result"/>:</th>
+ <td><c:out value="${ruleResult.label}"/></td>
+ </tr>
+ <tr>
+ <th><bean:message
key="system.audit.ruledetails.jsp.parent"/>:</th>
+ <td>
+ <a
href="/rhn/systems/details/audit/XccdfDetails.do?sid=${param.sid}&xid=${ruleResult.testResult.id}">
+ <c:out value="${ruleResult.testResult.identifier}"/>
+ </a>
+ </td>
+ </tr>
+</table>
+
+<h2><bean:message
key="system.audit.ruledetails.jsp.assignedidents"/></h2>
+
+<rl:listset name="groupSet">
+ <rl:list>
+ <rhn:csrf/>
+
+ <rl:column headerkey="system.audit.ruledetails.jsp.system"
sortattr="system" sortable="true">
+ <c:out value="${current.system}"/>
+ </rl:column>
+ <rl:column headerkey="system.audit.ruledetails.jsp.ident"
sortattr="identifier" sortable="true">
+ <c:out value="${current.identifier}"/>
+ </rl:column>
+ </rl:list>
+</rl:listset>
+
+</body>
+</html>
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 87a4b10..59ff6c9 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
@@ -57,14 +57,16 @@
<rhn:csrf/>
<rl:column headerkey="system.audit.xccdfdetails.jsp.idref"
sortattr="documentIdref" sortable="true">
- <c:choose>
- <c:when test="${empty current.documentIdref}">
- <bean:message key="system.audit.xccdfdetails.jsp.unknown"/>
- </c:when>
- <c:otherwise>
- <c:out value="${current.documentIdref}"/>
- </c:otherwise>
- </c:choose>
+ <a
href="/rhn/systems/details/audit/RuleDetails.do?sid=${param.sid}&rrid=${current.id}">
+ <c:choose>
+ <c:when test="${empty current.documentIdref}">
+ <bean:message key="system.audit.xccdfdetails.jsp.unknown"/>
+ </c:when>
+ <c:otherwise>
+ <c:out value="${current.documentIdref}"/>
+ </c:otherwise>
+ </c:choose>
+ </a>
</rl:column>
<rl:column headerkey="system.audit.xccdfdetails.jsp.idents"
sortattr="identsString" sortable="true">
diff --git a/java/code/webapp/WEB-INF/struts-config.xml
b/java/code/webapp/WEB-INF/struts-config.xml
index ad0ca4d..e20aa63 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -2849,6 +2849,15 @@
path="/WEB-INF/pages/systems/details/audit/xccdfdetails.jsp"/>
</action>
+ <action path="/systems/details/audit/RuleDetails"
+ scope="request"
+ input="/WEB-INF/pages/systems/details/audit/ruledetails.jsp"
+ type="com.redhat.rhn.frontend.action.systems.audit.RuleDetailsAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <forward name="default"
+ path="/WEB-INF/pages/systems/details/audit/ruledetails.jsp"/>
+ </action>
+
<!-- ===== SYSTEMS DETAILS ===== -->
<action path="/systems/details/packages/Packages"
scope="request"