1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.openehealth.ipf.commons.ihe.fhir.audit;
18
19 import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
20 import org.hl7.fhir.instance.model.api.IBaseResource;
21 import org.openehealth.ipf.commons.audit.AuditContext;
22 import org.openehealth.ipf.commons.audit.codes.EventOutcomeIndicator;
23 import org.openehealth.ipf.commons.ihe.core.atna.AuditStrategySupport;
24
25 import java.util.Map;
26
27 import static org.openehealth.ipf.commons.ihe.fhir.Constants.*;
28
29
30
31
32
33
34
35 public abstract class AbstractFhirAuditStrategy<T extends FhirAuditDataset, O extends IBaseOperationOutcome> extends AuditStrategySupport<T> {
36
37
38 protected AbstractFhirAuditStrategy(boolean serverSide) {
39 super(serverSide);
40 }
41
42 @Override
43 public T enrichAuditDatasetFromRequest(T auditDataset, Object request, Map<String, Object> parameters) {
44
45 if (parameters.get(HTTP_URI) != null) {
46 auditDataset.setSourceUserId((String) parameters.get(HTTP_URI));
47 }
48 if (parameters.get(HTTP_URL) != null) {
49 auditDataset.setDestinationUserId((String) parameters.get(HTTP_URL));
50 }
51 if (parameters.get(HTTP_CLIENT_IP_ADDRESS) != null) {
52 auditDataset.setRemoteAddress((String) parameters.get(HTTP_CLIENT_IP_ADDRESS));
53 }
54 return auditDataset;
55 }
56
57 @Override
58 public boolean enrichAuditDatasetFromResponse(T auditDataset, Object response, AuditContext auditContext) {
59 if (response instanceof IBaseResource) {
60 EventOutcomeIndicator eventOutcomeIndicator = getEventOutcomeIndicator(response);
61 auditDataset.setEventOutcomeIndicator(eventOutcomeIndicator);
62 auditDataset.setEventOutcomeDescription(getEventOutcomeDescription(response));
63 return eventOutcomeIndicator == EventOutcomeIndicator.Success;
64 }
65 return true;
66 }
67
68
69 @Override
70 public EventOutcomeIndicator getEventOutcomeIndicator(Object response) {
71 return getEventOutcomeCodeFromResource((IBaseResource) response);
72 }
73
74
75
76
77
78
79
80 protected EventOutcomeIndicator getEventOutcomeCodeFromResource(IBaseResource resource) {
81 return resource instanceof IBaseOperationOutcome ?
82 getEventOutcomeCodeFromOperationOutcome((O)resource) :
83 EventOutcomeIndicator.Success;
84 }
85
86 @Override
87 public String getEventOutcomeDescription(Object response) {
88 return response instanceof IBaseOperationOutcome ?
89 getEventOutcomeDescriptionFromOperationOutcome((O)response) :
90 null;
91 }
92
93
94
95
96
97
98
99
100
101
102 public abstract EventOutcomeIndicator getEventOutcomeCodeFromOperationOutcome(O response);
103
104 public abstract String getEventOutcomeDescriptionFromOperationOutcome(O response);
105
106 }