CTK  0.1.0
The Common Toolkit is a community effort to provide support code for medical image analysis, surgical navigation, and related projects.
ctkDICOMDatabase.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Library: CTK
4 
5  Copyright (c) 2010
6 
7  Licensed under the Apache License, Version 2.0 (the "License");
8  you may not use this file except in compliance with the License.
9  You may obtain a copy of the License at
10 
11  http://www.apache.org/licenses/LICENSE-2.0.txt
12 
13  Unless required by applicable law or agreed to in writing, software
14  distributed under the License is distributed on an "AS IS" BASIS,
15  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  See the License for the specific language governing permissions and
17  limitations under the License.
18 
19 =========================================================================*/
20 
21 #ifndef __ctkDICOMDatabase_h
22 #define __ctkDICOMDatabase_h
23 
24 // Qt includes
25 #include <QObject>
26 #include <QStringList>
27 #include <QSqlDatabase>
28 
29 #include "ctkDICOMItem.h"
30 #include "ctkDICOMCoreExport.h"
31 
32 class QDateTime;
33 class ctkDICOMDatabasePrivate;
34 class DcmDataset;
36 
52 class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject
53 {
54 
55  Q_OBJECT
56  Q_PROPERTY(bool isOpen READ isOpen)
57  Q_PROPERTY(bool isInMemory READ isInMemory)
58  Q_PROPERTY(QString lastError READ lastError)
59  Q_PROPERTY(QString databaseFilename READ databaseFilename)
60  Q_PROPERTY(QString databaseDirectory READ databaseDirectory)
61  Q_PROPERTY(QStringList tagsToPrecache READ tagsToPrecache WRITE setTagsToPrecache)
62 
63 public:
64  explicit ctkDICOMDatabase(QObject *parent = 0);
65  explicit ctkDICOMDatabase(QString databaseFile);
66  virtual ~ctkDICOMDatabase();
67 
68  const QSqlDatabase& database() const;
69  const QString lastError() const;
70  const QString databaseFilename() const;
71 
76  const QString databaseDirectory() const;
77 
81  bool isOpen() const;
82 
88  bool isInMemory() const;
89 
96 
111  Q_INVOKABLE virtual void openDatabase(const QString databaseFile,
112  const QString& connectionName = "");
113 
116  Q_INVOKABLE void closeDatabase();
119  Q_INVOKABLE bool initializeDatabase(const char* schemaFile = ":/dicom/dicom-schema.sql");
120 
122  Q_INVOKABLE bool updateSchema(const char* schemaFile = ":/dicom/dicom-schema.sql");
123 
126  Q_INVOKABLE bool updateSchemaIfNeeded(const char* schemaFile = ":/dicom/dicom-schema.sql");
127 
129  Q_INVOKABLE QString schemaVersion();
130 
133  Q_INVOKABLE QString schemaVersionLoaded();
134 
137  Q_INVOKABLE QStringList patients ();
138  Q_INVOKABLE QStringList studiesForPatient (const QString patientUID);
139  Q_INVOKABLE QStringList seriesForStudy (const QString studyUID);
140  Q_INVOKABLE QStringList instancesForSeries(const QString seriesUID);
141  Q_INVOKABLE QString studyForSeries(QString seriesUID);
142  Q_INVOKABLE QString patientForStudy(QString studyUID);
143  Q_INVOKABLE QStringList filesForSeries (const QString seriesUID);
144  Q_INVOKABLE QHash<QString,QString> descriptionsForFile(QString fileName);
145  Q_INVOKABLE QString descriptionForSeries(const QString seriesUID);
146  Q_INVOKABLE QString descriptionForStudy(const QString studyUID);
147  Q_INVOKABLE QString nameForPatient(const QString patientUID);
148  Q_INVOKABLE QString fileForInstance (const QString sopInstanceUID);
149  Q_INVOKABLE QString seriesForFile (QString fileName);
150  Q_INVOKABLE QString instanceForFile (const QString fileName);
151  Q_INVOKABLE QDateTime insertDateTimeForInstance (const QString fileName);
152 
153  Q_INVOKABLE QStringList allFiles ();
160  Q_INVOKABLE void loadInstanceHeader (const QString sopInstanceUID);
161  Q_INVOKABLE void loadFileHeader (const QString fileName);
162  Q_INVOKABLE QStringList headerKeys ();
163  Q_INVOKABLE QString headerValue (const QString key);
164 
175  void setTagsToPrecache(const QStringList tags);
176  const QStringList tagsToPrecache();
177 
193  Q_INVOKABLE void insert( const ctkDICOMItem& ctkDataset,
194  bool storeFile, bool generateThumbnail);
195  void insert ( DcmItem *item,
196  bool storeFile = true, bool generateThumbnail = true);
197  Q_INVOKABLE void insert ( const QString& filePath,
198  bool storeFile = true, bool generateThumbnail = true,
199  bool createHierarchy = true,
200  const QString& destinationDirectoryName = QString() );
201 
212  Q_INVOKABLE void prepareInsert();
213 
215  Q_INVOKABLE bool fileExistsAndUpToDate(const QString& filePath);
216 
219  Q_INVOKABLE bool removeSeries(const QString& seriesInstanceUID);
220  Q_INVOKABLE bool removeStudy(const QString& studyInstanceUID);
221  Q_INVOKABLE bool removePatient(const QString& patientID);
222  Q_INVOKABLE bool cleanup();
223 
233  Q_INVOKABLE QString instanceValue (const QString sopInstanceUID, const QString tag);
234  Q_INVOKABLE QString instanceValue (const QString sopInstanceUID, const unsigned short group, const unsigned short element);
235  Q_INVOKABLE QString fileValue (const QString fileName, const QString tag);
236  Q_INVOKABLE QString fileValue (const QString fileName, const unsigned short group, const unsigned short element);
237  Q_INVOKABLE bool tagToGroupElement (const QString tag, unsigned short& group, unsigned short& element);
238  Q_INVOKABLE QString groupElementToTag (const unsigned short& group, const unsigned short& element);
239 
251  Q_INVOKABLE bool tagCacheExists ();
253  Q_INVOKABLE bool initializeTagCache ();
255  Q_INVOKABLE QString cachedTag (const QString sopInstanceUID, const QString tag);
257  Q_INVOKABLE bool cacheTag (const QString sopInstanceUID, const QString tag, const QString value);
259  Q_INVOKABLE bool cacheTags (const QStringList sopInstanceUIDs, const QStringList tags, const QStringList values);
260 
261 
262 Q_SIGNALS:
269  void patientAdded(int, QString, QString, QString);
272  void studyAdded(QString);
275  void seriesAdded(QString);
279  void instanceAdded(QString);
286  void schemaUpdateProgress(QString);
289 
290 protected:
291  QScopedPointer<ctkDICOMDatabasePrivate> d_ptr;
292 
293 
294 
295 private:
296  Q_DECLARE_PRIVATE(ctkDICOMDatabase);
297  Q_DISABLE_COPY(ctkDICOMDatabase);
298 };
299 
300 #endif
301 
ctkDICOMAbstractThumbnailGenerator
Abstract thumbnail generator class.
Definition: ctkDICOMAbstractThumbnailGenerator.h:38
ctkDICOMDatabase::insertDateTimeForInstance
Q_INVOKABLE QDateTime insertDateTimeForInstance(const QString fileName)
ctkDICOMDatabase::schemaUpdateStarted
void schemaUpdateStarted(int)
Indicates that the schema is about to be updated and how many files will be processed.
ctkDICOMDatabase::headerKeys
Q_INVOKABLE QStringList headerKeys()
ctkDICOMDatabase::tagsToPrecache
const QStringList tagsToPrecache()
ctkDICOMDatabase::cacheTags
Q_INVOKABLE bool cacheTags(const QStringList sopInstanceUIDs, const QStringList tags, const QStringList values)
Insert lists of tags into the cache as a batch query operation.
ctkDICOMDatabase::schemaUpdateProgress
void schemaUpdateProgress(int)
Indicates progress in updating schema (int is file number, string is file name)
ctkDICOMDatabase::databaseDirectory
const QString databaseDirectory() const
ctkDICOMDatabase::insert
Q_INVOKABLE void insert(const ctkDICOMItem &ctkDataset, bool storeFile, bool generateThumbnail)
ctkDICOMDatabase::closeDatabase
Q_INVOKABLE void closeDatabase()
close the database. It must not be used afterwards.
ctkDICOMDatabase::tagCacheExists
Q_INVOKABLE bool tagCacheExists()
store values of previously requested instance elements These are meant to be internal methods used by...
ctkDICOMDatabase::lastError
const QString lastError() const
ctkDICOMDatabase
Definition: ctkDICOMDatabase.h:53
ctkDICOMDatabase::setThumbnailGenerator
Q_INVOKABLE void setThumbnailGenerator(ctkDICOMAbstractThumbnailGenerator *generator)
set thumbnail generator object
ctkDICOMDatabase::schemaUpdated
void schemaUpdated()
Indicates schema update finished.
ctkDICOMDatabase::descriptionsForFile
Q_INVOKABLE QHash< QString, QString > descriptionsForFile(QString fileName)
ctkDICOMDatabase::insert
void insert(DcmItem *item, bool storeFile=true, bool generateThumbnail=true)
ctkDICOMDatabase::prepareInsert
Q_INVOKABLE void prepareInsert()
ctkDICOMDatabase::cleanup
Q_INVOKABLE bool cleanup()
ctkDICOMDatabase::fileValue
Q_INVOKABLE QString fileValue(const QString fileName, const unsigned short group, const unsigned short element)
ctkDICOMDatabase::fileValue
Q_INVOKABLE QString fileValue(const QString fileName, const QString tag)
ctkDICOMDatabase::ctkDICOMDatabase
ctkDICOMDatabase(QObject *parent=0)
ctkDICOMDatabase::removeSeries
Q_INVOKABLE bool removeSeries(const QString &seriesInstanceUID)
ctkDICOMDatabase::descriptionForSeries
Q_INVOKABLE QString descriptionForSeries(const QString seriesUID)
ctkDICOMDatabase::allFiles
Q_INVOKABLE QStringList allFiles()
ctkDICOMDatabase::openDatabase
virtual Q_INVOKABLE void openDatabase(const QString databaseFile, const QString &connectionName="")
ctkDICOMDatabase::ctkDICOMDatabase
ctkDICOMDatabase(QString databaseFile)
ctkDICOMDatabase::initializeTagCache
Q_INVOKABLE bool initializeTagCache()
Create a tagCache in the current database. Delete the existing one if it exists.
ctkDICOMDatabase::descriptionForStudy
Q_INVOKABLE QString descriptionForStudy(const QString studyUID)
ctkDICOMItem.h
ctkDICOMDatabase::headerValue
Q_INVOKABLE QString headerValue(const QString key)
ctkDICOMDatabase::loadFileHeader
Q_INVOKABLE void loadFileHeader(const QString fileName)
ctkDICOMDatabase::cacheTag
Q_INVOKABLE bool cacheTag(const QString sopInstanceUID, const QString tag, const QString value)
Insert an instance tag's value into to the cache.
ctkDICOMDatabase::removePatient
Q_INVOKABLE bool removePatient(const QString &patientID)
ctkDICOMDatabase::updateSchemaIfNeeded
Q_INVOKABLE bool updateSchemaIfNeeded(const char *schemaFile=":/dicom/dicom-schema.sql")
ctkDICOMDatabase::patientForStudy
Q_INVOKABLE QString patientForStudy(QString studyUID)
ctkDICOMDatabase::cachedTag
Q_INVOKABLE QString cachedTag(const QString sopInstanceUID, const QString tag)
Return the value of a cached tag.
ctkDICOMDatabase::insert
Q_INVOKABLE void insert(const QString &filePath, bool storeFile=true, bool generateThumbnail=true, bool createHierarchy=true, const QString &destinationDirectoryName=QString())
ctkDICOMDatabase::isOpen
bool isOpen() const
ctkDICOMDatabase::filesForSeries
Q_INVOKABLE QStringList filesForSeries(const QString seriesUID)
ctkDICOMDatabase::~ctkDICOMDatabase
virtual ~ctkDICOMDatabase()
ctkDICOMItem
Definition: ctkDICOMItem.h:67
ctkDICOMDatabase::database
const QSqlDatabase & database() const
QHash
Definition: ctkCmdLineModuleFrontend.h:29
ctkDICOMDatabase::setTagsToPrecache
void setTagsToPrecache(const QStringList tags)
application-defined tags of interest This list of tags is added to the internal tag cache during impo...
ctkDICOMDatabase::seriesAdded
void seriesAdded(QString)
ctkDICOMDatabase::updateSchema
Q_INVOKABLE bool updateSchema(const char *schemaFile=":/dicom/dicom-schema.sql")
updates the database schema and reinserts all existing files
ctkDICOMDatabase::loadInstanceHeader
Q_INVOKABLE void loadInstanceHeader(const QString sopInstanceUID)
load the header from a file and allow access to elements
ctkDICOMDatabase::schemaVersion
Q_INVOKABLE QString schemaVersion()
returns the schema version needed by the current version of this code
ctkDICOMDatabase::nameForPatient
Q_INVOKABLE QString nameForPatient(const QString patientUID)
ctkDICOMDatabase::databaseFilename
const QString databaseFilename() const
ctkDICOMDatabase::studyForSeries
Q_INVOKABLE QString studyForSeries(QString seriesUID)
ctkDICOMDatabase::seriesForStudy
Q_INVOKABLE QStringList seriesForStudy(const QString studyUID)
ctkDICOMDatabase::instanceValue
Q_INVOKABLE QString instanceValue(const QString sopInstanceUID, const QString tag)
access element values for given instance
ctkDICOMDatabase::databaseChanged
void databaseChanged()
Indicates that an in-memory database has been updated.
ctkDICOMDatabase::groupElementToTag
Q_INVOKABLE QString groupElementToTag(const unsigned short &group, const unsigned short &element)
ctkDICOMDatabase::studiesForPatient
Q_INVOKABLE QStringList studiesForPatient(const QString patientUID)
ctkDICOMDatabase::seriesForFile
Q_INVOKABLE QString seriesForFile(QString fileName)
ctkDICOMDatabase::d_ptr
QScopedPointer< ctkDICOMDatabasePrivate > d_ptr
Definition: ctkDICOMDatabase.h:291
ctkDICOMDatabase::thumbnailGenerator
Q_INVOKABLE ctkDICOMAbstractThumbnailGenerator * thumbnailGenerator()
get thumbnail genrator object
ctkDICOMDatabase::patientAdded
void patientAdded(int, QString, QString, QString)
ctkDICOMDatabase::instanceAdded
void instanceAdded(QString)
ctkDICOMDatabase::removeStudy
Q_INVOKABLE bool removeStudy(const QString &studyInstanceUID)
ctkDICOMDatabase::instanceForFile
Q_INVOKABLE QString instanceForFile(const QString fileName)
ctkDICOMDatabase::tagToGroupElement
Q_INVOKABLE bool tagToGroupElement(const QString tag, unsigned short &group, unsigned short &element)
ctkDICOMDatabase::fileForInstance
Q_INVOKABLE QString fileForInstance(const QString sopInstanceUID)
ctkDICOMDatabase::isInMemory
bool isInMemory() const
ctkDICOMDatabase::instancesForSeries
Q_INVOKABLE QStringList instancesForSeries(const QString seriesUID)
ctkDICOMDatabase::schemaVersionLoaded
Q_INVOKABLE QString schemaVersionLoaded()
ctkDICOMDatabase::studyAdded
void studyAdded(QString)
ctkDICOMDatabase::patients
Q_INVOKABLE QStringList patients()
database accessors
ctkDICOMDatabase::fileExistsAndUpToDate
Q_INVOKABLE bool fileExistsAndUpToDate(const QString &filePath)
Check if file is already in database and up-to-date.
ctkDICOMDatabase::schemaUpdateProgress
void schemaUpdateProgress(QString)
ctkDICOMDatabase::instanceValue
Q_INVOKABLE QString instanceValue(const QString sopInstanceUID, const unsigned short group, const unsigned short element)
ctkDICOMDatabase::initializeDatabase
Q_INVOKABLE bool initializeDatabase(const char *schemaFile=":/dicom/dicom-schema.sql")
delete all data and (re-)initialize the database.