Commits

njo@kvalitetsit.dk authored a630e255228
[SDS-4242] Map Consent-fields.

git-svn-id: https://svn.nspop.dk/svn/components/labsvar/trunk@4663 3203d48c-b89f-428c-a2b9-71f4dc330d7c
No tags

xdswrappers/documentprovider-parent/documentprovider/src/main/java/dk/nsi/dds/projects/sxa/documentprovider/audit/LogRecordBuilder.java

Modified
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));

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut