package org.mirthblog.dicom;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.json.Json;
import javax.json.stream.JsonGenerator;
import org.dcm4che3.io.DicomInputStream;
import org.dcm4che3.io.DicomInputStream.IncludeBulkData;
import org.dcm4che3.json.JSONWriter;
import org.dcm4che3.tool.dcm2jpg.Dcm2Jpg;
/**
* Mirth DICOM processing to JSON
*
*/
public class MDICOM {
public static void main(String[] args) throws IOException {
System.out.println("Starting Test DICOM Processing...");
//Place a DICOM file in /tmp/ for testing
//set the dicomFileName string to the name of the file.
String dicomFilePath = "/tmp/";
String dicomFilePathSrc = "/tmp/";
String dicomFilePathDst = "/var/tmp/";
String dicomFileName = "image.dcm";
System.out.println("Processing File: " + dicomFilePath + dicomFileName);
System.out.println("Saving DICOM Image Attachment to: /var/tmp/" + dicomFileName + ".jpg");
String attachRetVal = dicomAttachProcess(dicomFileName, dicomFilePathSrc, dicomFilePathDst);
System.out.println("Processing Complete with: " + attachRetVal);
String jsonDicomDoc = dicomFileProcess(dicomFileName, dicomFilePath);
System.out.println(jsonDicomDoc);
}
public static String dicomAttachProcess(String filename, String directoryNameSrc, String directoryNameDst) {
String returnVal = directoryNameDst + filename + ".jpg";
String[] arguments = {
directoryNameSrc + filename,
directoryNameDst + filename + ".jpg"
};
Dcm2Jpg.main(arguments);
return returnVal;
}
/**
* Entry point for the Mirth Connect destination/channel
* @param fileName string with the name of the file to be opened
* @param directoryName string with the full path to the file defined above
* @return
*/
public static String dicomFileProcess(String fileName, String directoryName) {
String fullPath = directoryName + fileName;
System.out.println(fullPath);
String jsonDicomDoc = "EMPTY";
try {
File dicomFile = new File(fullPath);
jsonDicomDoc = dicomJsonContent(dicomFile);
dicomFile.delete();
} catch (Exception e) {
System.out.println("error opening file: " + fullPath + " error message: " + e.getMessage());
}
return jsonDicomDoc;
}
public static String dicomJsonContent(File dicomFile) {
String dicomJsonString = "";
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
DicomInputStream dis = new DicomInputStream(dicomFile)) {
IncludeBulkData includeBulkData = IncludeBulkData.URI;
dis.setIncludeBulkData(includeBulkData);
JsonGenerator jsonGen = Json.createGenerator(baos);
JSONWriter jsonWriter = new JSONWriter(jsonGen);
dis.setDicomInputHandler(jsonWriter);
dis.readDataset(-1, -1);
jsonGen.flush();
dicomJsonString = new String(baos.toByteArray(), "UTF-8");
} catch (Exception e) {
System.out.println("error processing dicom: " + e.getMessage());
}
return dicomJsonString;
}
}