着信関連付け要求の「実行中」に、特定の DICOM オブジェクト タグを読み取ろうとしています (そして、サード パーティのローカル データベースに保存しようとしています)。
関連付け要求を受け入れ、dicom ファイルをローカルに保存するために、修正版の dcmrcv() ツールを使用しました。より具体的には、次のような onCStoreRQ メソッドをオーバーライドしました。
@Override
protected void onCStoreRQ(Association association, int pcid, DicomObject dcmReqObj,
PDVInputStream dataStream, String transferSyntaxUID,
DicomObject dcmRspObj)
throws DicomServiceException, IOException {
final String classUID = dcmReqObj.getString(Tag.AffectedSOPClassUID);
final String instanceUID = dcmReqObj.getString(Tag.AffectedSOPInstanceUID);
config = new GlobalConfig();
final File associationDir = config.getAssocDirFile();
final String prefixedFileName = instanceUID;
final String dicomFileBaseName = prefixedFileName + DICOM_FILE_EXTENSION;
File dicomFile = new File(associationDir, dicomFileBaseName);
assert !dicomFile.exists();
final BasicDicomObject fileMetaDcmObj = new BasicDicomObject();
fileMetaDcmObj.initFileMetaInformation(classUID, instanceUID, transferSyntaxUID);
final DicomOutputStream outStream = new DicomOutputStream(new BufferedOutputStream(new FileOutputStream(dicomFile), 600000));
//i would like somewhere here to extract some TAGS from incoming dicom object. By trying to do it using dataStream my dicom files
//are getting corrupted!
//System.out.println("StudyInstanceUID: " + dataStream.readDataset().getString(Tag.StudyInstanceUID));
try {
outStream.writeFileMetaInformation(fileMetaDcmObj);
dataStream.copyTo(outStream);
} finally {
outStream.close();
}
dicomFile.renameTo(new File(associationDir, dicomFileBaseName));
System.out.println("DICOM file name: " + dicomFile.getName());
}
@Override
public void associationAccepted(final AssociationAcceptEvent associationAcceptEvent) {
....
@Override
public void associationClosed(final AssociationCloseEvent associationCloseEvent) {
...
}
このコードの間のどこかで、dataStream を読み取り、特定のタグを解析してローカル データベースに保存するメソッドをインターセプトしたいと考えています。
ただし、dataStream を操作しようとするコード (開始時に読み取るだけ) を配置しようとすると、dicom ファイルが破損します。
PDVInputStream は java.io.InputStream を実装しています ....
入れようとしても:
System.out.println("StudyInstanceUID: " + dataStream.readDataset().getString(Tag.StudyInstanceUID));
datastream を outStream にコピーする前に ... dicom ファイルが破損しています (1KB のサイズ) ...
CStoreRQ アソシエーション リクエストでデータストリームを使用して情報を抽出するにはどうすればよいですか?
私の質問が明確であることを願っています...