Przeglądaj źródła

Add retrieved dicom files to the database as they arrive

RetrieveDatabase now refers to the place where incoming
files are indexed as they arrive over the network connection.

This is set by the application that uses either the
retrieve widget or the retrieve code directly.
Steve Pieper 14 lat temu
rodzic
commit
6465525452

+ 1 - 1
Applications/ctkDICOMRetrieve/ctkDICOMRetrieveMain.cpp

@@ -99,7 +99,7 @@ int main(int argc, char** argv)
 
   QSharedPointer<ctkDICOMDatabase> dicomDatabase =  QSharedPointer<ctkDICOMDatabase> (new ctkDICOMDatabase);
   dicomDatabase->openDatabase( OutputDirectory.absoluteFilePath(QString("ctkDICOM.sql")) );
-  retrieve.setDICOMDatabase( dicomDatabase );
+  retrieve.setRetrieveDatabase( dicomDatabase );
 
   logger.info ( "Starting to retrieve" );
   try

+ 13 - 4
Libs/DICOM/Core/ctkDICOMRetrieve.cpp

@@ -75,7 +75,7 @@ public:
   DcmSCU SCU;
   DcmDataset* parameters;
   QString MoveDestinationAETitle;
-  QSharedPointer<ctkDICOMDatabase> DICOMDatabase;
+  QSharedPointer<ctkDICOMDatabase> RetrieveDatabase;
 
   // do the retrieve, handling both series and study retrieves
   enum RetrieveType { RetrieveSeries, RetrieveStudy };
@@ -89,6 +89,7 @@ public:
 ctkDICOMRetrievePrivate::ctkDICOMRetrievePrivate()
 {
   parameters = new DcmDataset();
+  RetrieveDatabase = QSharedPointer<ctkDICOMDatabase> (0);
 }
 
 //------------------------------------------------------------------------------
@@ -100,6 +101,12 @@ ctkDICOMRetrievePrivate::~ctkDICOMRetrievePrivate()
 //------------------------------------------------------------------------------
 void ctkDICOMRetrievePrivate::retrieve ( QString UID, RetrieveType retriveType ) {
 
+  if ( !RetrieveDatabase )
+    {
+    logger.error ( "Must have RetrieveDatabase for retrieve transaction" );
+    return;
+    }
+
   // Register the JPEG libraries in case we need them
   //   (registration only happens once, so it's okay to call repeatedly)
   // register global JPEG decompression codecs
@@ -171,7 +178,7 @@ void ctkDICOMRetrievePrivate::retrieve ( QString UID, RetrieveType retriveType )
     logger.debug ( "Find succeded" );
 
     logger.debug ( "Making Output Directory" );
-    QDir directory = QDir( DICOMDatabase->databaseDirectory() );
+    QDir directory = QDir( RetrieveDatabase->databaseDirectory() );
 
     if ( responses->begin() == responses->end() )
       {
@@ -211,6 +218,8 @@ void ctkDICOMRetrievePrivate::retrieve ( QString UID, RetrieveType retriveType )
             {
             logger.error ( "Error saving file: " + fi.absoluteFilePath() + " Error is " + status.text() );
             }
+
+          RetrieveDatabase->insert( dataset, fi.absoluteFilePath() );
           
           delete fileformat;
           }
@@ -323,10 +332,10 @@ const QString& ctkDICOMRetrieve::moveDestinationAETitle()
 }
 
 //------------------------------------------------------------------------------
-void ctkDICOMRetrieve::setDICOMDatabase(QSharedPointer<ctkDICOMDatabase> dicomDatabase)
+void ctkDICOMRetrieve::setRetrieveDatabase(QSharedPointer<ctkDICOMDatabase> dicomDatabase)
 {
   Q_D(ctkDICOMRetrieve);
-  d->DICOMDatabase = dicomDatabase;
+  d->RetrieveDatabase = dicomDatabase;
 }
 
 //------------------------------------------------------------------------------

+ 1 - 1
Libs/DICOM/Core/ctkDICOMRetrieve.h

@@ -55,7 +55,7 @@ public:
   const QString& moveDestinationAETitle();
   
   /// method for database
-  void setDICOMDatabase(QSharedPointer<ctkDICOMDatabase> dicomDatabase);
+  void setRetrieveDatabase(QSharedPointer<ctkDICOMDatabase> dicomDatabase);
   // Could be a slot...
   void retrieveSeries ( QString seriesInstanceUID );
   void retrieveStudy ( QString studyInstanceUID );

+ 1 - 0
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

@@ -111,6 +111,7 @@ void ctkDICOMAppWidget::setDatabaseDirectory(const QString& directory)
 
   //pass DICOM database instance to Import widget
   d->ImportWidget->setDICOMDatabase(d->DICOMDatabase);
+  d->QueryRetrieveWidget->setRetrieveDatabase(d->DICOMDatabase);
 }
 
 void ctkDICOMAppWidget::onAddToDatabase()

+ 1 - 1
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

@@ -148,7 +148,7 @@ void ctkDICOMQueryRetrieveWidget::processRetrieve()
     logger.debug("need to retrieve " + studyUID + " from " + d->QueriesByStudyUID[studyUID]->host());
     ctkDICOMQuery *query = d->QueriesByStudyUID[studyUID];
     ctkDICOMRetrieve *retrieve = new ctkDICOMRetrieve;
-    retrieve->setDICOMDatabase( d->RetrieveDatabase );
+    retrieve->setRetrieveDatabase( d->RetrieveDatabase );
     d->RetrievalsByStudyUID[studyUID] = retrieve;
     retrieve->setCallingAETitle( query->callingAETitle() );
     retrieve->setCalledAETitle( query->calledAETitle() );