1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.openehealth.ipf.commons.ihe.fhir.support;
18
19 import org.hl7.fhir.dstu3.model.OperationOutcome;
20 import org.openehealth.ipf.commons.audit.codes.EventOutcomeIndicator;
21 import org.openehealth.ipf.commons.ihe.fhir.audit.AbstractFhirAuditStrategy;
22 import org.openehealth.ipf.commons.ihe.fhir.audit.FhirAuditDataset;
23
24 import java.util.Comparator;
25
26
27
28
29 public abstract class FhirAuditStrategy<T extends FhirAuditDataset> extends AbstractFhirAuditStrategy<T, OperationOutcome> {
30
31 public FhirAuditStrategy(boolean serverSide) {
32 super(serverSide);
33 }
34
35 @Override
36 public EventOutcomeIndicator getEventOutcomeCodeFromOperationOutcome(OperationOutcome response) {
37 if (!response.hasIssue()) {
38 return EventOutcomeIndicator.Success;
39 }
40
41 OperationOutcome.IssueSeverity severity = response.getIssue().stream()
42 .map(OperationOutcome.OperationOutcomeIssueComponent::getSeverity)
43 .min(Comparator.naturalOrder())
44 .orElse(OperationOutcome.IssueSeverity.NULL);
45 switch (severity) {
46 case FATAL:
47 case ERROR:
48 return EventOutcomeIndicator.MajorFailure;
49 case WARNING:
50 return EventOutcomeIndicator.MinorFailure;
51 default:
52 return EventOutcomeIndicator.Success;
53 }
54
55 }
56
57 @Override
58 public String getEventOutcomeDescriptionFromOperationOutcome(OperationOutcome response) {
59 if (!response.hasIssue()) {
60 return null;
61 }
62 return response.getIssue().get(0).getDiagnostics();
63 }
64 }