Search in sources :

Example 1 with HttpException

use of org.weasis.dicom.web.HttpException in project karnak by OsiriX-Foundation.

the class ForwardService method transferOther.

public void transferOther(ForwardDicomNode fwdNode, WebForwardDestination destination, Attributes copy, Params p) throws IOException {
    Attributes attributesToSend = new Attributes();
    Attributes attributesOriginal = new Attributes();
    try {
        List<AttributeEditor> editors = destination.getDicomEditors();
        DicomStowRS stow = destination.getStowrsSingleFile();
        var syntax = new AdaptTransferSyntax(p.getTsuid(), destination.getOutputTransferSyntax(p.getTsuid()));
        if (syntax.getRequested().equals(p.getTsuid()) && editors.isEmpty()) {
            attributesToSend = copy;
            attributesOriginal.addAll(copy);
            stow.uploadDicom(copy, syntax.getRequested());
        } else {
            AttributeEditorContext context = new AttributeEditorContext(p.getTsuid(), fwdNode, null);
            Attributes attributes = new Attributes(copy);
            attributesToSend = attributes;
            attributesOriginal.addAll(attributes);
            editors.forEach(e -> e.apply(attributes, context));
            if (context.getAbort() == Abort.FILE_EXCEPTION) {
                throw new AbortException(context.getAbort(), context.getAbortMessage());
            } else if (context.getAbort() == Abort.CONNECTION_EXCEPTION) {
                throw new AbortException(context.getAbort(), "DICOM associtation abort. " + context.getAbortMessage());
            }
            BytesWithImageDescriptor desc = ImageAdapter.imageTranscode(attributes, syntax, context);
            if (desc == null) {
                stow.uploadDicom(attributes, syntax.getOriginal());
            } else {
                Editable<PlanarImage> editable = transformImage(attributes, context);
                stow.uploadPayload(ImageAdapter.preparePlayload(attributes, syntax, desc, editable));
            }
            progressNotify(destination, p.getIuid(), p.getCuid(), false, 0);
            monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, true, null);
        }
    } catch (HttpException httpException) {
        if (httpException.getStatusCode() != 409) {
            progressNotify(destination, p.getIuid(), p.getCuid(), true, 0);
            monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, false, httpException.getMessage());
            throw new AbortException(Abort.FILE_EXCEPTION, "DICOMWeb forward", httpException);
        } else {
            progressNotify(destination, p.getIuid(), p.getCuid(), false, 0);
            monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, true, null);
            LOGGER.debug("File already present in destination");
        }
    } catch (AbortException e) {
        progressNotify(destination, p.getIuid(), p.getCuid(), true, 0);
        monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, false, e.getMessage());
        if (e.getAbort() == Abort.CONNECTION_EXCEPTION) {
            throw e;
        }
    } catch (IOException e) {
        progressNotify(destination, p.getIuid(), p.getCuid(), true, 0);
        monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, false, e.getMessage());
        throw e;
    } catch (Exception e) {
        progressNotify(destination, p.getIuid(), p.getCuid(), true, 0);
        monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, false, e.getMessage());
        LOGGER.error(ERROR_WHEN_FORWARDING, e);
    }
}
Also used : Attributes(org.dcm4che3.data.Attributes) IOException(java.io.IOException) HttpException(org.weasis.dicom.web.HttpException) AbortException(org.karnak.backend.exception.AbortException) IOException(java.io.IOException) AttributeEditorContext(org.weasis.dicom.param.AttributeEditorContext) AttributeEditor(org.weasis.dicom.param.AttributeEditor) HttpException(org.weasis.dicom.web.HttpException) AdaptTransferSyntax(org.dcm4che3.img.stream.ImageAdapter.AdaptTransferSyntax) BytesWithImageDescriptor(org.dcm4che3.img.stream.BytesWithImageDescriptor) DicomStowRS(org.weasis.dicom.web.DicomStowRS) PlanarImage(org.weasis.opencv.data.PlanarImage) AbortException(org.karnak.backend.exception.AbortException)

Example 2 with HttpException

use of org.weasis.dicom.web.HttpException in project karnak by OsiriX-Foundation.

the class ForwardService method transfer.

public List<File> transfer(ForwardDicomNode fwdNode, WebForwardDestination destination, Attributes copy, Params p) throws IOException {
    DicomInputStream in = null;
    List<File> files;
    Attributes attributesToSend = new Attributes();
    Attributes attributesOriginal = new Attributes();
    try {
        List<AttributeEditor> editors = destination.getDicomEditors();
        DicomStowRS stow = destination.getStowrsSingleFile();
        var syntax = new AdaptTransferSyntax(p.getTsuid(), destination.getOutputTransferSyntax(p.getTsuid()));
        if (syntax.getRequested().equals(p.getTsuid()) && copy == null && editors.isEmpty()) {
            Attributes fmi = Attributes.createFileMetaInformation(p.getIuid(), p.getCuid(), syntax.getRequested());
            try (InputStream stream = p.getData()) {
                attributesToSend = new DicomInputStream(p.getData()).readDataset();
                attributesOriginal.addAll(attributesToSend);
                stow.uploadDicom(stream, fmi);
            } catch (HttpException httpException) {
                if (httpException.getStatusCode() != 409) {
                    throw new AbortException(Abort.FILE_EXCEPTION, httpException.getMessage());
                } else {
                    LOGGER.debug("File already present in destination");
                }
            }
        } else {
            AttributeEditorContext context = new AttributeEditorContext(p.getTsuid(), fwdNode, null);
            in = new DicomInputStream(p.getData(), p.getTsuid());
            in.setIncludeBulkData(IncludeBulkData.URI);
            Attributes attributes = in.readDataset();
            attributesToSend = attributes;
            attributesOriginal.addAll(attributes);
            if (copy != null) {
                copy.addAll(attributes);
            }
            if (!editors.isEmpty()) {
                editors.forEach(e -> e.apply(attributes, context));
            }
            if (context.getAbort() == Abort.FILE_EXCEPTION) {
                if (p.getData() instanceof PDVInputStream) {
                    ((PDVInputStream) p.getData()).skipAll();
                }
                throw new AbortException(context.getAbort(), context.getAbortMessage());
            } else if (context.getAbort() == Abort.CONNECTION_EXCEPTION) {
                if (p.getAs() != null) {
                    p.getAs().abort();
                }
                throw new AbortException(context.getAbort(), "STOW-RS abort: " + context.getAbortMessage());
            }
            BytesWithImageDescriptor desc = ImageAdapter.imageTranscode(attributes, syntax, context);
            if (desc == null) {
                stow.uploadDicom(attributes, syntax.getOriginal());
            } else {
                Editable<PlanarImage> editable = transformImage(attributes, context);
                stow.uploadPayload(ImageAdapter.preparePlayload(attributes, syntax, desc, editable));
            }
        }
        progressNotify(destination, p.getIuid(), p.getCuid(), false, 0);
        monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, true, null);
    } catch (AbortException e) {
        progressNotify(destination, p.getIuid(), p.getCuid(), true, 0);
        monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, false, e.getMessage());
        if (e.getAbort() == Abort.CONNECTION_EXCEPTION) {
            throw e;
        }
    } catch (IOException e) {
        progressNotify(destination, p.getIuid(), p.getCuid(), true, 0);
        monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, false, e.getMessage());
        throw e;
    } catch (Exception e) {
        progressNotify(destination, p.getIuid(), p.getCuid(), true, 0);
        monitor(fwdNode.getId(), destination.getId(), attributesOriginal, attributesToSend, false, e.getMessage());
        LOGGER.error(ERROR_WHEN_FORWARDING, e);
    } finally {
        files = cleanOrGetBulkDataFiles(in, copy == null);
    }
    return files;
}
Also used : PDVInputStream(org.dcm4che3.net.PDVInputStream) DicomInputStream(org.dcm4che3.io.DicomInputStream) InputStream(java.io.InputStream) Attributes(org.dcm4che3.data.Attributes) IOException(java.io.IOException) DicomInputStream(org.dcm4che3.io.DicomInputStream) HttpException(org.weasis.dicom.web.HttpException) AbortException(org.karnak.backend.exception.AbortException) IOException(java.io.IOException) AttributeEditorContext(org.weasis.dicom.param.AttributeEditorContext) AttributeEditor(org.weasis.dicom.param.AttributeEditor) HttpException(org.weasis.dicom.web.HttpException) AdaptTransferSyntax(org.dcm4che3.img.stream.ImageAdapter.AdaptTransferSyntax) BytesWithImageDescriptor(org.dcm4che3.img.stream.BytesWithImageDescriptor) File(java.io.File) DicomStowRS(org.weasis.dicom.web.DicomStowRS) PlanarImage(org.weasis.opencv.data.PlanarImage) AbortException(org.karnak.backend.exception.AbortException) PDVInputStream(org.dcm4che3.net.PDVInputStream)

Aggregations

IOException (java.io.IOException)2 Attributes (org.dcm4che3.data.Attributes)2 BytesWithImageDescriptor (org.dcm4che3.img.stream.BytesWithImageDescriptor)2 AdaptTransferSyntax (org.dcm4che3.img.stream.ImageAdapter.AdaptTransferSyntax)2 AbortException (org.karnak.backend.exception.AbortException)2 AttributeEditor (org.weasis.dicom.param.AttributeEditor)2 AttributeEditorContext (org.weasis.dicom.param.AttributeEditorContext)2 DicomStowRS (org.weasis.dicom.web.DicomStowRS)2 HttpException (org.weasis.dicom.web.HttpException)2 PlanarImage (org.weasis.opencv.data.PlanarImage)2 File (java.io.File)1 InputStream (java.io.InputStream)1 DicomInputStream (org.dcm4che3.io.DicomInputStream)1 PDVInputStream (org.dcm4che3.net.PDVInputStream)1