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;
28
29 import gov.nist.secauto.decima.core.assessment.result.AssessmentResultBuilder;
30 import gov.nist.secauto.decima.core.assessment.util.LoggingHandler;
31 import gov.nist.secauto.decima.core.document.Document;
32 import gov.nist.secauto.decima.core.util.ObjectUtil;
33
34 import java.util.Collections;
35 import java.util.List;
36 import java.util.Objects;
37
38
39
40
41
42 public abstract class AbstractAssessmentExecutor<DOC extends Document> implements AssessmentExecutor<DOC> {
43 private final List<? extends Assessment<DOC>> assessments;
44
45 public AbstractAssessmentExecutor(List<? extends Assessment<DOC>> assessments) {
46 ObjectUtil.requireNonEmpty(assessments, "assessments");
47 this.assessments = Collections.unmodifiableList(assessments);
48 }
49
50
51
52
53
54
55 public List<? extends Assessment<DOC>> getAssessments() {
56 return Collections.unmodifiableList(assessments);
57 }
58
59 protected List<Assessment<DOC>> getExecutableAssessments(DOC targetDocument) throws AssessmentException {
60 return AssessmentExecutionHelper.getExecutableAssessments(targetDocument, getAssessments());
61 }
62
63 @Override
64 public void execute(DOC documentToAssess, AssessmentResultBuilder resultBuilder) throws AssessmentException {
65 Objects.requireNonNull(documentToAssess, "documentToAssess");
66 Objects.requireNonNull(resultBuilder, "resultBuilder");
67
68 resultBuilder.start();
69
70 LoggingHandler handler = resultBuilder.getLoggingHandler();
71
72 handler.assessmentExecutionStarted(documentToAssess);
73
74 executeInternal(documentToAssess, resultBuilder);
75
76 handler.assessmentExecutionCompleted(documentToAssess);
77 }
78
79 protected void executeInternal(DOC documentToAssess, AssessmentResultBuilder resultBuilder)
80 throws AssessmentException {
81 for (Assessment<DOC> assessment : getExecutableAssessments(documentToAssess)) {
82 AssessmentExecutionHelper.executeAssessment(assessment, documentToAssess, resultBuilder);
83 }
84
85 }
86 }