use of uk.nhs.adaptors.connector.model.PatientAttachmentLog in project nia-patient-switching-standard-adaptor by NHSDigital.
the class COPCMessageHandler method extractFragmentsAndLog.
private void extractFragmentsAndLog(PatientMigrationRequest migrationRequest, PatientAttachmentLog parentAttachmentLog, String conversationId, InboundMessage message) throws ParseException, SAXException, ValidationException, InlineAttachmentProcessingException {
List<EbxmlReference> attachmentReferenceDescription = new ArrayList<>();
attachmentReferenceDescription.addAll(xmlParseUtilService.getEbxmlAttachmentsData(message));
// first item is always the message payload reference so skip it
for (var index = 1; index < attachmentReferenceDescription.size(); index++) {
var payloadReference = attachmentReferenceDescription.get(index);
var descriptionString = "";
var messageId = "";
var fileUpload = false;
// in this instance there should only ever be one CID on a fragment index file
if (payloadReference.getHref().contains("cid:")) {
messageId = payloadReference.getHref().substring(payloadReference.getHref().indexOf("cid:") + "cid:".length());
descriptionString = message.getAttachments().get(0).getDescription();
// upload the file
attachmentHandlerService.storeAttachments(message.getAttachments(), conversationId);
fileUpload = true;
} else {
var localMessageId = payloadReference.getHref().substring(payloadReference.getHref().indexOf("mid:") + "mid:".length());
messageId = localMessageId;
var externalAttachmentResult = message.getExternalAttachments().stream().filter(attachment -> attachment.getMessageId().equals(localMessageId)).findFirst();
if (externalAttachmentResult == null || externalAttachmentResult.stream().count() != 1) {
throw new ValidationException("External Attachment in payload header does not match a received External Attachment ID");
}
var externalAttachment = externalAttachmentResult.get();
descriptionString = externalAttachment.getDescription();
}
PatientAttachmentLog fragmentLog = patientAttachmentLogService.findAttachmentLog(messageId, conversationId);
if (fragmentLog != null) {
updateFragmentLog(fragmentLog, parentAttachmentLog, descriptionString, index - 1, parentAttachmentLog.getLargeAttachment());
patientAttachmentLogService.updateAttachmentLog(fragmentLog, conversationId);
} else {
PatientAttachmentLog newFragmentLog = buildPatientAttachmentLog(messageId, descriptionString, parentAttachmentLog.getMid(), migrationRequest.getId(), index - 1, fileUpload, parentAttachmentLog.getLargeAttachment());
patientAttachmentLogService.addAttachmentLog(newFragmentLog);
}
}
}
Aggregations