Search in sources :

Example 1 with AttachmentLogException

use of uk.nhs.adaptors.pss.translator.exception.AttachmentLogException in project nia-patient-switching-standard-adaptor by NHSDigital.

the class COPCMessageHandler method checkAndMergeFileParts.

public void checkAndMergeFileParts(InboundMessage inboundMessage, String conversationId) throws SAXException, AttachmentLogException, ValidationException, InlineAttachmentProcessingException {
    Document ebXmlDocument = xPathService.parseDocumentFromXml(inboundMessage.getEbXML());
    var inboundMessageId = xPathService.getNodeValue(ebXmlDocument, MESSAGE_ID_PATH);
    var currentAttachmentLog = patientAttachmentLogService.findAttachmentLog(inboundMessageId, conversationId);
    if (currentAttachmentLog == null) {
        throw new AttachmentLogException("Given COPC message is missing an attachment log");
    }
    // if a message has arrived early, it will not have a parent ID so we can cancel early.
    if (currentAttachmentLog.getParentMid() == null) {
        return;
    }
    var conversationAttachmentLogs = patientAttachmentLogService.findAttachmentLogs(conversationId);
    var attachmentLogFragments = conversationAttachmentLogs.stream().sorted(Comparator.comparingInt(PatientAttachmentLog::getOrderNum)).filter(log -> !(log.getParentMid() == null) && log.getParentMid().equals(currentAttachmentLog.getParentMid())).toList();
    var parentLogMessageId = attachmentLogFragments.size() == 1 ? currentAttachmentLog.getMid() : currentAttachmentLog.getParentMid();
    attachmentLogFragments = conversationAttachmentLogs.stream().sorted(Comparator.comparingInt(PatientAttachmentLog::getOrderNum)).filter(log -> !(log.getParentMid() == null) && log.getParentMid().equals(parentLogMessageId)).toList();
    var allFragmentsHaveUploaded = attachmentLogFragments.stream().allMatch(PatientAttachmentLog::getUploaded);
    if (allFragmentsHaveUploaded) {
        String payload = attachmentHandlerService.buildSingleFileStringFromPatientAttachmentLogs(attachmentLogFragments, conversationId);
        var parentLogFile = conversationAttachmentLogs.stream().filter(log -> log.getMid().equals(parentLogMessageId)).findAny().orElse(null);
        var mergedLargeAttachment = createNewLargeAttachmentInList(parentLogFile, payload);
        attachmentHandlerService.storeAttachments(mergedLargeAttachment, conversationId);
        var updatedLog = PatientAttachmentLog.builder().mid(parentLogFile.getMid()).uploaded(true).build();
        patientAttachmentLogService.updateAttachmentLog(updatedLog, conversationId);
        attachmentLogFragments.forEach((PatientAttachmentLog log) -> {
            attachmentHandlerService.removeAttachment(log.getFilename(), conversationId);
            patientAttachmentLogService.deleteAttachmentLog(log.getMid(), conversationId);
        });
    }
}
Also used : Arrays(java.util.Arrays) AttachmentNotFoundException(uk.nhs.adaptors.pss.translator.exception.AttachmentNotFoundException) RequiredArgsConstructor(lombok.RequiredArgsConstructor) Autowired(org.springframework.beans.factory.annotation.Autowired) NackAckPreparationService(uk.nhs.adaptors.pss.translator.service.NackAckPreparationService) XmlUnmarshallUtil.unmarshallString(uk.nhs.adaptors.pss.translator.util.XmlUnmarshallUtil.unmarshallString) PatientAttachmentLog(uk.nhs.adaptors.connector.model.PatientAttachmentLog) COPCIN000001UK01Message(org.hl7.v3.COPCIN000001UK01Message) ArrayList(java.util.ArrayList) BundleMappingException(uk.nhs.adaptors.pss.translator.exception.BundleMappingException) Document(org.w3c.dom.Document) ParseException(java.text.ParseException) PatientMigrationRequest(uk.nhs.adaptors.connector.model.PatientMigrationRequest) InboundMessageMergingService(uk.nhs.adaptors.pss.translator.service.InboundMessageMergingService) PatientAttachmentLogService(uk.nhs.adaptors.connector.service.PatientAttachmentLogService) EbxmlReference(uk.nhs.adaptors.pss.translator.model.EbxmlReference) AttachmentHandlerService(uk.nhs.adaptors.pss.translator.service.AttachmentHandlerService) XPathService(uk.nhs.adaptors.pss.translator.service.XPathService) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) AttachmentLogException(uk.nhs.adaptors.pss.translator.exception.AttachmentLogException) InboundMessage(uk.nhs.adaptors.pss.translator.mhs.model.InboundMessage) JAXBException(javax.xml.bind.JAXBException) List(java.util.List) Component(org.springframework.stereotype.Component) Slf4j(lombok.extern.slf4j.Slf4j) SAXException(org.xml.sax.SAXException) InlineAttachmentProcessingException(uk.nhs.adaptors.pss.translator.exception.InlineAttachmentProcessingException) EHR_EXTRACT_CANNOT_BE_PROCESSED(uk.nhs.adaptors.pss.translator.model.NACKReason.EHR_EXTRACT_CANNOT_BE_PROCESSED) ValidationException(javax.xml.bind.ValidationException) PatientMigrationRequestDao(uk.nhs.adaptors.connector.dao.PatientMigrationRequestDao) Comparator(java.util.Comparator) XmlParseUtilService(uk.nhs.adaptors.pss.translator.util.XmlParseUtilService) PatientAttachmentLog(uk.nhs.adaptors.connector.model.PatientAttachmentLog) XmlUnmarshallUtil.unmarshallString(uk.nhs.adaptors.pss.translator.util.XmlUnmarshallUtil.unmarshallString) Document(org.w3c.dom.Document) AttachmentLogException(uk.nhs.adaptors.pss.translator.exception.AttachmentLogException)

Example 2 with AttachmentLogException

use of uk.nhs.adaptors.pss.translator.exception.AttachmentLogException in project nia-patient-switching-standard-adaptor by NHSDigital.

the class MhsQueueMessageHandler method handleMessage.

public boolean handleMessage(Message message) {
    try {
        InboundMessage inboundMessage = readMessage(message);
        Document ebXmlDocument = xPathService.parseDocumentFromXml(inboundMessage.getEbXML());
        String conversationId = xPathService.getNodeValue(ebXmlDocument, CONVERSATION_ID_PATH);
        applyConversationId(conversationId);
        String interactionId = xPathService.getNodeValue(ebXmlDocument, INTERACTION_ID_PATH);
        if (ACKNOWLEDGEMENT_INTERACTION_ID.equals(interactionId)) {
            acknowledgmentMessageHandler.handleMessage(inboundMessage, conversationId);
        } else if (EHR_EXTRACT_INTERACTION_ID.equals(interactionId)) {
            ehrExtractMessageHandler.handleMessage(inboundMessage, conversationId);
        } else if (CONTINUE_ATTACHMENT_INTERACTION_ID.equals(interactionId)) {
            continueMessageHandler.handleMessage(inboundMessage, conversationId);
        } else {
            LOGGER.info("Handling message with [{}] interaction id not implemented", interactionId);
        }
        return true;
    } catch (JMSException | JAXBException | SAXException e) {
        LOGGER.error("Unable to read the content of the inbound MHS message", e);
        return false;
    } catch (JsonProcessingException | DataFormatException e) {
        LOGGER.error("Unable to parse messages", e);
        return false;
    } catch (InlineAttachmentProcessingException | AttachmentLogException e) {
        LOGGER.error("Unable to process inline attachments", e);
        return false;
    } catch (AttachmentNotFoundException e) {
        LOGGER.error("Unable to find attachment reference inbound message", e);
        return false;
    } catch (BundleMappingException e) {
        LOGGER.error("Unable to map EHR Extract to FHIR bundle", e);
        return false;
    } catch (ParseException e) {
        LOGGER.error("Unable to parse Ebxml References", e);
        return false;
    }
// catch (SkeletonEhrProcessingException e) {
// LOGGER.error("Unable to process EhrExtract", e);
// return false;
// }
}
Also used : AttachmentNotFoundException(uk.nhs.adaptors.pss.translator.exception.AttachmentNotFoundException) JAXBException(javax.xml.bind.JAXBException) InboundMessage(uk.nhs.adaptors.pss.translator.mhs.model.InboundMessage) JMSException(javax.jms.JMSException) Document(org.w3c.dom.Document) SAXException(org.xml.sax.SAXException) AttachmentLogException(uk.nhs.adaptors.pss.translator.exception.AttachmentLogException) DataFormatException(ca.uhn.fhir.parser.DataFormatException) BundleMappingException(uk.nhs.adaptors.pss.translator.exception.BundleMappingException) ParseException(java.text.ParseException) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) InlineAttachmentProcessingException(uk.nhs.adaptors.pss.translator.exception.InlineAttachmentProcessingException)

Aggregations

JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)2 ParseException (java.text.ParseException)2 JAXBException (javax.xml.bind.JAXBException)2 Document (org.w3c.dom.Document)2 SAXException (org.xml.sax.SAXException)2 AttachmentLogException (uk.nhs.adaptors.pss.translator.exception.AttachmentLogException)2 AttachmentNotFoundException (uk.nhs.adaptors.pss.translator.exception.AttachmentNotFoundException)2 BundleMappingException (uk.nhs.adaptors.pss.translator.exception.BundleMappingException)2 InlineAttachmentProcessingException (uk.nhs.adaptors.pss.translator.exception.InlineAttachmentProcessingException)2 InboundMessage (uk.nhs.adaptors.pss.translator.mhs.model.InboundMessage)2 DataFormatException (ca.uhn.fhir.parser.DataFormatException)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Comparator (java.util.Comparator)1 List (java.util.List)1 JMSException (javax.jms.JMSException)1 ValidationException (javax.xml.bind.ValidationException)1 RequiredArgsConstructor (lombok.RequiredArgsConstructor)1 Slf4j (lombok.extern.slf4j.Slf4j)1 COPCIN000001UK01Message (org.hl7.v3.COPCIN000001UK01Message)1