@SuppressWarnings("restriction") public static TCImageDocument create( TCObject tc, MimeType mimeType, String filename, InputStream in, String description) throws Exception { mimeType = checkMimeType(mimeType); ByteArrayOutputStream out = null; try { BufferedImage image = null; if (MimeType.ImageJPEG.equals(mimeType)) { try { com.sun.image.codec.jpeg.JPEGImageDecoder decoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGDecoder(in); image = decoder.decodeAsBufferedImage(); } catch (Exception e) { log.warn(null, e); } } if (image == null) { image = ImageIO.read(in); } TCReferencedInstance ref = createReferencedInstance( tc, UID.MultiFrameTrueColorSecondaryCaptureImageStorage, MODALITY); DicomObject metaData = TCDocumentObject.createDicomMetaData( mimeType, filename, description, ref, tc.getPatientId(), tc.getPatientIdIssuer(), tc.getPatientName(), MODALITY); metaData.putInt(Tag.NumberOfFrames, VR.IS, 1); return new TCImageDocument(mimeType, ref, metaData, image); } finally { if (in != null) { try { in.close(); } catch (Exception e) { } } if (out != null) { try { out.close(); } catch (Exception e) { } } } }
private static final TCReferencedStudy getDocumentStudy(TCObject tc) { String stuid = tc.getStudyInstanceUID(); for (TCReferencedStudy study : tc.getReferencedStudies()) { if (stuid.equals(study.getStudyUID())) { return study; } } return null; }
private static final TCReferencedInstance createReferencedInstance( TCObject tc, String cuid, String modality) { TCReferencedStudy study = getDocumentStudy(tc); if (study == null) { study = new TCReferencedStudy(tc.getStudyInstanceUID()); } TCReferencedSeries series = getDocumentSeries(study, modality); if (series == null) { study.addSeries( series = new TCReferencedSeries(UIDUtils.createUID(), study, SERIES_DESCRIPTION)); } Integer instanceNumber = -1; if (series != null) { try { String nr = series.getSeriesValue(Tag.NumberOfSeriesRelatedInstances); if (nr != null) { instanceNumber = Integer.parseInt(nr) + 1; } } catch (Exception e) { } if (instanceNumber < 0) { instanceNumber = series.getInstanceCount() + 1; } } if (instanceNumber < 0) { instanceNumber = 1; } return new TCReferencedInstance(series, UIDUtils.createUID(), cuid, instanceNumber); }
public static TCEncapsulatedDocument create( TCObject tc, MimeType mimeType, String filename, InputStream in, String description) throws Exception { if (mimeType == null || !DOC_TYPES.contains(mimeType.getDocumentType())) { throw new Exception("Mime-Type is not supported (" + mimeType + ")"); } TCReferencedInstance ref = createReferencedInstance(tc, UID.EncapsulatedPDFStorage, MODALITY); DicomObject metaData = TCDocumentObject.createDicomMetaData( mimeType, filename, description, ref, tc.getPatientId(), tc.getPatientIdIssuer(), tc.getPatientName(), MODALITY); metaData.putString(Tag.TransferSyntaxUID, VR.UI, UID.ExplicitVRLittleEndian); metaData.putString( Tag.DocumentTitle, VR.ST, description != null && !description.isEmpty() ? description : getFileName(filename)); metaData.putString(Tag.MIMETypeOfEncapsulatedDocument, VR.LO, mimeType.getMimeTypeString()); metaData.putString(Tag.BurnedInAnnotation, VR.CS, "NO"); // $NON-NLS-1$ metaData.putSequence(Tag.ConceptNameCodeSequence, 0); try { return new TCEncapsulatedDocument(mimeType, ref, metaData, IOUtils.toByteArray(in)); } finally { if (in != null) { in.close(); } } }