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);
}
}
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;
}
Aggregations