Commits
njo@kvalitetsit.dk authored a630e255228
1 1 | package dk.nsi.dds.projects.sxa.documentprovider.audit; |
2 2 | |
3 3 | import dk.medcom.dgws._2006._04.dgws_1_0.Header; |
4 - | import dk.nsi.dds.projects.sxa.common.DocumentIdEncoderDecoder; |
4 + | import dk.nsi.hsuid.ConsentOverrideAttribute; |
5 5 | import dk.nsi.hsuid._2016._08.hsuid_1_1.Attribute; |
6 6 | import dk.nsi.hsuid._2016._08.hsuid_1_1.HsuidHeader; |
7 7 | import dk.nsi.hsuid._2016._08.hsuid_1_1.NameConstraint; |
8 8 | import dk.nsi.hsuid._2016._08.hsuid_1_1.SubjectIdentifierType; |
9 9 | import loginfo.healthcare._2017_03_01.*; |
10 10 | import org.openehealth.ipf.commons.ihe.xds.core.ebxml.ebxml30.RetrieveDocumentSetRequestType; |
11 11 | |
12 12 | import javax.xml.datatype.DatatypeConfigurationException; |
13 13 | import javax.xml.datatype.DatatypeFactory; |
14 14 | import javax.xml.datatype.XMLGregorianCalendar; |
15 15 | import java.math.BigInteger; |
16 - | import java.security.Guard; |
17 - | import java.util.ArrayList; |
18 - | import java.util.List; |
19 16 | import java.util.UUID; |
20 - | import java.util.regex.Pattern; |
21 17 | import java.util.stream.Collectors; |
22 18 | |
23 19 | public class LogRecordBuilder { |
24 20 | private DateTimeProvider dateTimeProvider; |
25 21 | |
26 22 | public LogRecordBuilder(DateTimeProvider dateTimeProvider) { |
27 23 | this.dateTimeProvider = dateTimeProvider; |
28 24 | } |
29 25 | |
30 26 | public LogRecord buildLogRecord(HsuidHeader hsuidHeader, Header header, LogRecord inboundLogRecord, RetrieveDocumentSetRequestType request) { |
31 27 | LogRecord logRecord = new LogRecord(); |
32 28 | |
33 29 | logRecord.setTraceInfo(buildTraceInfo(header, inboundLogRecord)); |
34 30 | logRecord.setRequestingClient(buildRequestingClientType(hsuidHeader)); |
35 31 | logRecord.setPatient(buildPatient(request)); |
36 - | |
32 + | logRecord.setConsent(buildConsent(hsuidHeader)); |
37 33 | logRecord.setExtendedRequestInfo(buildExtendedRequestInfo(request)); |
38 34 | |
39 35 | return logRecord; |
40 36 | } |
41 37 | |
42 38 | private TraceInfoType buildTraceInfo(Header header, LogRecord inboundLogRecord) { |
43 39 | TraceInfoType traceInfo = new TraceInfoType(); |
44 40 | |
45 41 | traceInfo.setRequestTime(getRequestTime()); |
46 42 | traceInfo.setSessionId(getSessionId(header)); |
264 260 | // Taken from DocumentIdEncoderDecoder |
265 261 | private static final String magic = "b"; |
266 262 | private String decodeId(String encoded) { |
267 263 | String decoded = new BigInteger(encoded).toString(16); |
268 264 | if (decoded == null || !decoded.toLowerCase().startsWith(magic.toLowerCase())) { |
269 265 | throw new IllegalArgumentException(); |
270 266 | } |
271 267 | return decoded.substring(magic.length()); |
272 268 | } |
273 269 | |
270 + | private ConsentInfoType buildConsent(HsuidHeader hsuidHeader) { |
271 + | ConsentInfoType consentInfo = new ConsentInfoType(); |
272 + | |
273 + | if(consentOverridden(hsuidHeader)) { |
274 + | consentInfo.setCode(LogRecordConstants.CONSENT_OVERRIDDEN_CODE); |
275 + | consentInfo.setText(LogRecordConstants.CONSENT_OVERRIDDEN_TEXT); |
276 + | consentInfo.setPrivacyOverrideCode(LogRecordConstants.CONSENT_OVERRIDDEN_PRIVACY_OVERRIDE_CODE); |
277 + | } |
278 + | else { |
279 + | consentInfo.setCode(LogRecordConstants.CONSENT_GRANTED_CODE); |
280 + | consentInfo.setText(LogRecordConstants.CONSENT_GRANTED_TEXT); |
281 + | consentInfo.setPrivacyOverrideCode(LogRecordConstants.CONSENT_GRANTED_PRIVACY_OVERRIDE_CODE); |
282 + | } |
283 + | |
284 + | return consentInfo; |
285 + | } |
286 + | |
287 + | private boolean consentOverridden(HsuidHeader hsuidHeader) { |
288 + | Attribute consentOverrideAttribute = getOptionalAttribute(hsuidHeader, NameConstraint.NSI_CONSENT_OVERRIDE); |
289 + | return consentOverrideAttribute != null && consentOverrideAttribute.getAttributeValue().equals(ConsentOverrideAttribute.LegalValues.TRUE.getValue()); |
290 + | } |
291 + | |
274 292 | private ExtendedRequestInfoType buildExtendedRequestInfo(RetrieveDocumentSetRequestType request) { |
275 293 | ExtendedRequestInfoType extendedRequestInfo = new ExtendedRequestInfoType(); |
276 294 | |
277 295 | extendedRequestInfo.setFormat("Text"); |
278 296 | String requestBody = request |
279 297 | .getDocumentRequest() |
280 298 | .stream() |
281 299 | .map(dr -> String.format("{HomeCommunityId: %s, RepositoryUniqueId: %s, DocumentUniqueId: %s}", dr.getHomeCommunityId(), dr.getRepositoryUniqueId(), dr.getDocumentUniqueId())) |
282 300 | .collect(Collectors.joining(", ")); |
283 301 | extendedRequestInfo.setValue(String.format("<![CDATA[%s]]", requestBody)); |