Forráskód Böngészése

Accessors to run queries about dicom hierarchy

Rather than accessing the database directly, it is better
for code to use these methods to isolate against
future changes in the database schema.
Steve Pieper 14 éve
szülő
commit
9196c1bd4b

+ 48 - 0
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -223,6 +223,54 @@ void ctkDICOMDatabase::closeDatabase()
 }
 
 //------------------------------------------------------------------------------
+QStringList ctkDICOMDatabase::studiesForPatient(QString patientUID)
+{
+  Q_D(ctkDICOMDatabase);
+  QSqlQuery query(d->Database);
+  query.prepare ( "SELECT StudyInstanceUID FROM Studies WHERE PatientsUID = ?" );
+  query.bindValue ( 0, patientUID );
+  query.exec();
+  QStringList result;
+  while (query.next()) 
+    {
+    result << query.value(0).toString();
+    }
+  return( result );
+}
+
+//------------------------------------------------------------------------------
+QStringList ctkDICOMDatabase::seriesForStudy(QString studyUID)
+{
+  Q_D(ctkDICOMDatabase);
+  QSqlQuery query(d->Database);
+  query.prepare ( "SELECT SeriesInstanceUID FROM Series WHERE StudyInstanceUID=?");
+  query.bindValue ( 0, studyUID );
+  query.exec();
+  QStringList result;
+  while (query.next()) 
+    {
+    result << query.value(0).toString();
+    }
+  return( result );
+}
+
+//------------------------------------------------------------------------------
+QStringList ctkDICOMDatabase::filesForSeries(QString seriesUID)
+{
+  Q_D(ctkDICOMDatabase);
+  QSqlQuery query(d->Database);
+  query.prepare ( "SELECT Filename FROM Images WHERE SeriesInstanceUID=?");
+  query.bindValue ( 0, seriesUID );
+  query.exec();
+  QStringList result;
+  while (query.next()) 
+    {
+    result << query.value(0).toString();
+    }
+  return( result );
+}
+
+//------------------------------------------------------------------------------
 /*
 void ctkDICOMDatabase::insert ( DcmDataset *dataset ) {
   this->insert ( dataset, QString() );

+ 11 - 3
Libs/DICOM/Core/ctkDICOMDatabase.h

@@ -23,6 +23,7 @@
 
 // Qt includes 
 #include <QObject>
+#include <QStringList>
 #include <QSqlDatabase>
 
 #include "ctkDICOMCoreExport.h"
@@ -51,14 +52,21 @@ public:
   ///
   /// @param databaseFile TODO
   /// @param connectionName TODO
-  virtual void openDatabase(const QString databaseFile, const QString& connectionName = "DICOM-DB" );
+  Q_INVOKABLE virtual void openDatabase(const QString databaseFile, const QString& connectionName = "DICOM-DB" );
 
   ///
   /// close the database. It must not be used afterwards.
-  void closeDatabase();
+  Q_INVOKABLE void closeDatabase();
   ///
   /// delete all data and reinitialize the database.
-  bool initializeDatabase(const char* schemaFile = ":/dicom/dicom-schema.sql");
+  Q_INVOKABLE bool initializeDatabase(const char* schemaFile = ":/dicom/dicom-schema.sql");
+
+  ///
+  /// \brief database accessors
+  Q_INVOKABLE QStringList studiesForPatient (QString patientUID);
+  Q_INVOKABLE QStringList seriesForStudy (QString studyUID);
+  Q_INVOKABLE QStringList filesForSeries (QString seriesUID);
+
 
   /**
    * Will create an entry in the appropriate tables for this dataset.