Browse Source

ENH: add accessor for insert timestamp as QDateTime

And update test for it.
Steve Pieper 12 years ago
parent
commit
f6a462dd92

+ 19 - 1
Libs/DICOM/Core/Testing/Cpp/ctkDICOMDatabaseTest4.cpp

@@ -94,10 +94,28 @@ int ctkDICOMDatabaseTest4( int argc, char * argv [] )
     return EXIT_FAILURE;
     }
 
+  // check the insert timestamp
+  QDateTime beforeInsert = QDateTime::currentDateTime();
+  std::cerr << "Current dateTime " << beforeInsert.toString().toStdString() << std::endl;
+
   database.insert(dicomFilePath, false, false);
 
+  QDateTime insertTimeStamp = database.insertDateTimeForInstance(instanceUID);
+  std::cerr << "Instance inserted " << insertTimeStamp.toString().toStdString() << std::endl;
+
+  QString filePath = database.fileForInstance(instanceUID);
+  std::cerr << "Instance file " << filePath.toStdString() << std::endl;
+
+  int elapsed = beforeInsert.secsTo(insertTimeStamp);
+  if (elapsed > 1)
+    {
+    std::cerr << "ctkDICOMDatabase: Took more than a second to insert the file." << std::endl;
+    return EXIT_FAILURE;
+    }
+
+  // check for series description in tag cache
   QString knownSeriesDescription("3D Cor T1 FAST IR-prepped GRE");
-  
+
   QString cachedTag = database.cachedTag(instanceUID, tag);
 
   if (cachedTag != knownSeriesDescription)

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

@@ -608,6 +608,23 @@ QString ctkDICOMDatabase::instanceForFile(QString fileName)
   return( result );
 }
 
+//------------------------------------------------------------------------------
+QDateTime ctkDICOMDatabase::insertDateTimeForInstance(QString sopInstanceUID)
+{
+  Q_D(ctkDICOMDatabase);
+  QSqlQuery query(d->Database);
+  query.prepare ( "SELECT InsertTimestamp FROM Images WHERE SOPInstanceUID=?");
+  query.bindValue ( 0, sopInstanceUID );
+  query.exec();
+  QDateTime result;
+  if (query.next())
+    {
+    result = QDateTime::fromString(query.value(0).toString(), Qt::ISODate);
+    }
+  return( result );
+}
+
+
 //
 // instance header methods
 //

+ 7 - 5
Libs/DICOM/Core/ctkDICOMDatabase.h

@@ -29,6 +29,7 @@
 #include "ctkDICOMDataset.h"
 #include "ctkDICOMCoreExport.h"
 
+class QDateTime;
 class ctkDICOMDatabasePrivate;
 class DcmDataset;
 class ctkDICOMAbstractThumbnailGenerator;
@@ -134,6 +135,7 @@ public:
   Q_INVOKABLE QStringList filesForSeries (const QString seriesUID);
   Q_INVOKABLE QString fileForInstance (const QString sopInstanceUID);
   Q_INVOKABLE QString instanceForFile (const QString fileName);
+  Q_INVOKABLE QDateTime insertDateTimeForInstance (const QString fileName);
 
   Q_INVOKABLE QStringList allFiles ();
   ///
@@ -175,13 +177,13 @@ public:
   ///                  does only make sense if a full object is received.
   /// @param @generateThumbnail If true, a thumbnail is generated.
   ///
-  Q_INVOKABLE void insert( const ctkDICOMDataset& ctkDataset, 
+  Q_INVOKABLE void insert( const ctkDICOMDataset& ctkDataset,
                               bool storeFile, bool generateThumbnail);
-  void insert ( DcmDataset *dataset, 
+  void insert ( DcmDataset *dataset,
                               bool storeFile = true, bool generateThumbnail = true);
-  Q_INVOKABLE void insert ( const QString& filePath, 
-                            bool storeFile = true, bool generateThumbnail = true, 
-                            bool createHierarchy = true, 
+  Q_INVOKABLE void insert ( const QString& filePath,
+                            bool storeFile = true, bool generateThumbnail = true,
+                            bool createHierarchy = true,
                             const QString& destinationDirectoryName = QString() );
 
   /// Check if file is already in database and up-to-date