1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.decima.core.assessment.util;
28
29 import gov.nist.secauto.decima.core.assessment.Assessment;
30 import gov.nist.secauto.decima.core.assessment.AssessmentException;
31 import gov.nist.secauto.decima.core.assessment.AssessmentExecutionHelper;
32 import gov.nist.secauto.decima.core.assessment.result.AssessmentResultBuilder;
33 import gov.nist.secauto.decima.core.document.Document;
34
35 import java.util.ArrayList;
36 import java.util.Collections;
37 import java.util.List;
38
39
40
41
42
43
44
45 public class AssessmentSequence<DOC extends Document> implements Assessment<DOC> {
46 private final List<? extends Assessment<DOC>> assessments;
47
48 public AssessmentSequence(List<? extends Assessment<DOC>> assessments) {
49 this.assessments = Collections.unmodifiableList(new ArrayList<>(assessments));
50 }
51
52 @Override
53 public String getAssessmentType() {
54 return "SEQUENCE";
55 }
56
57 public List<Assessment<DOC>> getAssessments() {
58 return Collections.unmodifiableList(assessments);
59 }
60
61 @Override
62 public List<Assessment<DOC>> getExecutableAssessments(DOC targetDocument) throws AssessmentException {
63 return AssessmentExecutionHelper.getExecutableAssessments(targetDocument, getAssessments());
64 }
65
66 @Override
67 public void execute(DOC targetDocument, AssessmentResultBuilder builder) throws AssessmentException {
68
69 throw new UnsupportedOperationException(
70 "The execute method must be called from instances returned by getExecutableAssessments(Document).");
71 }
72
73 @Override
74 public String getName(boolean includeDetail) {
75 StringBuilder sb = new StringBuilder();
76 sb.append("sequence {");
77 boolean first = true;
78 for (Assessment<DOC> assessment : getAssessments()) {
79 if (!first) {
80 sb.append(", ");
81 }
82 sb.append(assessment.getName(includeDetail));
83 }
84 sb.append("}");
85 return sb.toString();
86 }
87
88 }