View Javadoc
1   /**
2    * Portions of this software was developed by employees of the National Institute
3    * of Standards and Technology (NIST), an agency of the Federal Government and is
4    * being made available as a public service. Pursuant to title 17 United States
5    * Code Section 105, works of NIST employees are not subject to copyright
6    * protection in the United States. This software may be subject to foreign
7    * copyright. Permission in the United States and in foreign countries, to the
8    * extent that NIST may hold copyright, to use, copy, modify, create derivative
9    * works, and distribute this software and its documentation without fee is hereby
10   * granted on a non-exclusive basis, provided that this notice and disclaimer
11   * of warranty appears in all copies.
12   *
13   * THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER
14   * EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY
15   * THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF
16   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM
17   * INFRINGEMENT, AND ANY WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE
18   * SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE ERROR FREE.  IN NO EVENT
19   * SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT,
20   * INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM,
21   * OR IN ANY WAY CONNECTED WITH THIS SOFTWARE, WHETHER OR NOT BASED UPON WARRANTY,
22   * CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR
23   * PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT
24   * OF THE RESULTS OF, OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER.
25   */
26  
27  package gov.nist.secauto.decima.core.requirement;
28  
29  import gov.nist.secauto.decima.core.assessment.result.ResultStatus;
30  import gov.nist.secauto.decima.core.assessment.result.Severity;
31  import gov.nist.secauto.decima.core.assessment.result.TestStatus;
32  
33  public enum RequirementType {
34    MUST(Severity.ERROR, ResultStatus.PASS, ResultStatus.PASS, ResultStatus.FAIL, ResultStatus.WARNING),
35    MUST_NOT(Severity.ERROR, ResultStatus.PASS, ResultStatus.PASS, ResultStatus.FAIL, ResultStatus.WARNING),
36    SHOULD(Severity.WARNING, ResultStatus.PASS, ResultStatus.PASS, ResultStatus.WARNING, ResultStatus.WARNING),
37    SHOULD_NOT(Severity.WARNING, ResultStatus.PASS, ResultStatus.PASS, ResultStatus.WARNING, ResultStatus.WARNING),
38    MAY(Severity.INFO, ResultStatus.PASS, ResultStatus.PASS, ResultStatus.INFORMATIONAL, ResultStatus.INFORMATIONAL),
39    INFORMATIONAL(
40        Severity.INFO,
41        ResultStatus.INFORMATIONAL,
42        ResultStatus.INFORMATIONAL,
43        ResultStatus.INFORMATIONAL,
44        ResultStatus.INFORMATIONAL);
45  
46    private final Severity severity;
47    private final ResultStatus statusOnPass;
48    private final ResultStatus statusOnWarning;
49    private final ResultStatus statusOnFail;
50    private final ResultStatus statusOnConditionalFail;
51  
52    private RequirementType(Severity severity, ResultStatus./../../gov/nist/secauto/decima/core/assessment/result/ResultStatus.html#ResultStatus">ResultStatus statusOnPass, ResultStatus statusOnWarning,
53        ResultStatus./../../gov/nist/secauto/decima/core/assessment/result/ResultStatus.html#ResultStatus">ResultStatus statusOnFail, ResultStatus statusOnConditionalFail) {
54      this.severity = severity;
55      this.statusOnPass = statusOnPass;
56      this.statusOnWarning = statusOnWarning;
57      this.statusOnFail = statusOnFail;
58      this.statusOnConditionalFail = statusOnConditionalFail;
59    }
60  
61    public Severity getSeverity() {
62      return severity;
63    }
64  
65    /**
66     * Determines the {@link ResultStatus} for a provided {@link TestStatus}.
67     * 
68     * @param result
69     *          the result of a given test
70     * @param conditional
71     *          indicates if the test has a conditional requirement
72     * @return the appropriate mapped ResultStatus
73     */
74    public ResultStatus resolveTestResult(TestStatus result, boolean conditional) {
75      ResultStatus retval;
76      switch (result) {
77      case FAIL:
78        if (conditional) {
79          retval = getStatusOnConditionalFail();
80        } else {
81          retval = getStatusOnFail();
82        }
83        break;
84      case PASS:
85        retval = getStatusOnPass();
86        break;
87      case WARNING:
88        retval = getStatusOnWarning();
89        break;
90      case INFORMATIONAL:
91        retval = ResultStatus.INFORMATIONAL;
92        break;
93      default:
94        throw new IllegalStateException("Unknown test status: " + result.toString());
95      }
96      return retval;
97    }
98  
99    public ResultStatus getStatusOnPass() {
100     return statusOnPass;
101   }
102 
103   public ResultStatus getStatusOnWarning() {
104     return statusOnWarning;
105   }
106 
107   public ResultStatus getStatusOnFail() {
108     return statusOnFail;
109   }
110 
111   public ResultStatus getStatusOnConditionalFail() {
112     return statusOnConditionalFail;
113   }
114 
115 }