Explorar o código

Merge branch 'retrieve-to-database'

Conflicts:
	Libs/DICOM/Core/ctkDICOMDatabase.cpp
	Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp
Steve Pieper %!s(int64=14) %!d(string=hai) anos
pai
achega
0f290b5510

+ 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

+ 2 - 2
Applications/ctkDICOMViewer/ctkDICOMViewerMain.cpp

@@ -55,11 +55,11 @@ int main(int argc, char** argv)
 
   // set up the database 
   if (argc > 1)
-    {
+  {
     QString directory(argv[1]);
     settings.setValue("DatabaseDirectory", directory);
     settings.sync();
-    }
+  }
 
   if ( settings.value("DatabaseDirectory", "") == "" )
   {

+ 2 - 2
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -95,11 +95,11 @@ ctkDICOMDatabasePrivate::~ctkDICOMDatabasePrivate()
 }
 
 //------------------------------------------------------------------------------
-void ctkDICOMDatabase::openDatabase(const QString databaseFile)
+void ctkDICOMDatabase::openDatabase(const QString databaseFile, const QString& connectionName )
 {
   Q_D(ctkDICOMDatabase);
   d->DatabaseFileName = databaseFile;
-  d->Database = QSqlDatabase::addDatabase("QSQLITE","DICOM-DB");
+  d->Database = QSqlDatabase::addDatabase("QSQLITE",connectionName);
   d->Database.setDatabaseName(databaseFile);
   if ( ! (d->Database.open()) )
     {

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

@@ -47,7 +47,7 @@ public:
   /// open the SQLite database in @param file. If the file does not
   /// exist, a new database is created and initialized with the
   /// default schema
-  virtual void openDatabase(const QString file);
+  virtual void openDatabase(const QString databaseFile, const QString& connectionName = "DICOM-DB" );
 
   ///
   /// close the database. It must not be used afterwards.

+ 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 - 1
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

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

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

@@ -114,7 +114,7 @@ void ctkDICOMQueryRetrieveWidget::processQuery()
   d->RetrieveButton->setEnabled(false);
   
   // create a database in memory to hold query results
-  try { d->QueryResultDatabase.openDatabase( ":memory:" ); }
+  try { d->QueryResultDatabase.openDatabase( ":memory:", "QUERY-DB" ); }
   catch (std::exception e)
   {
     logger.error ( "Database error: " + d->QueryResultDatabase.lastError() );
@@ -201,7 +201,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() );