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(QString lastError READ lastError)
58  Q_PROPERTY(QString databaseFilename READ databaseFilename)
59  Q_PROPERTY(QStringList tagsToPrecache READ tagsToPrecache WRITE setTagsToPrecache)
60 
61 public:
62  explicit ctkDICOMDatabase(QObject *parent = 0);
63  explicit ctkDICOMDatabase(QString databaseFile);
64  virtual ~ctkDICOMDatabase();
65 
66  const QSqlDatabase& database() const;
67  const QString lastError() const;
68  const QString databaseFilename() const;
69 
74  const QString databaseDirectory() const;
75 
79  bool isOpen() const;
80 
86  bool isInMemory() const;
87 
90  void setThumbnailGenerator(ctkDICOMAbstractThumbnailGenerator* generator);
93  ctkDICOMAbstractThumbnailGenerator* thumbnailGenerator();
94 
109  Q_INVOKABLE virtual void openDatabase(const QString databaseFile,
110  const QString& connectionName = "");
111 
114  Q_INVOKABLE void closeDatabase();
117  Q_INVOKABLE bool initializeDatabase(const char* schemaFile = ":/dicom/dicom-schema.sql");
118 
120  Q_INVOKABLE bool updateSchema(const char* schemaFile = ":/dicom/dicom-schema.sql");
121 
124  Q_INVOKABLE bool updateSchemaIfNeeded(const char* schemaFile = ":/dicom/dicom-schema.sql");
125 
127  Q_INVOKABLE QString schemaVersion();
128 
131  Q_INVOKABLE QString schemaVersionLoaded();
132 
135  Q_INVOKABLE QStringList patients ();
136  Q_INVOKABLE QStringList studiesForPatient (const QString patientUID);
137  Q_INVOKABLE QStringList seriesForStudy (const QString studyUID);
138  Q_INVOKABLE QStringList instancesForSeries(const QString seriesUID);
139  Q_INVOKABLE QString studyForSeries(QString seriesUID);
140  Q_INVOKABLE QString patientForStudy(QString studyUID);
141  Q_INVOKABLE QStringList filesForSeries (const QString seriesUID);
142  Q_INVOKABLE QHash<QString,QString> descriptionsForFile(QString fileName);
143  Q_INVOKABLE QString descriptionForSeries(const QString seriesUID);
144  Q_INVOKABLE QString descriptionForStudy(const QString studyUID);
145  Q_INVOKABLE QString nameForPatient(const QString patientUID);
146  Q_INVOKABLE QString fileForInstance (const QString sopInstanceUID);
147  Q_INVOKABLE QString seriesForFile (QString fileName);
148  Q_INVOKABLE QString instanceForFile (const QString fileName);
149  Q_INVOKABLE QDateTime insertDateTimeForInstance (const QString fileName);
150 
151  Q_INVOKABLE QStringList allFiles ();
158  Q_INVOKABLE void loadInstanceHeader (const QString sopInstanceUID);
159  Q_INVOKABLE void loadFileHeader (const QString fileName);
160  Q_INVOKABLE QStringList headerKeys ();
161  Q_INVOKABLE QString headerValue (const QString key);
162 
173  void setTagsToPrecache(const QStringList tags);
174  const QStringList tagsToPrecache();
175 
191  Q_INVOKABLE void insert( const ctkDICOMItem& ctkDataset,
192  bool storeFile, bool generateThumbnail);
193  void insert ( DcmItem *item,
194  bool storeFile = true, bool generateThumbnail = true);
195  Q_INVOKABLE void insert ( const QString& filePath,
196  bool storeFile = true, bool generateThumbnail = true,
197  bool createHierarchy = true,
198  const QString& destinationDirectoryName = QString() );
199 
201  bool fileExistsAndUpToDate(const QString& filePath);
202 
205  Q_INVOKABLE bool removeSeries(const QString& seriesInstanceUID);
206  Q_INVOKABLE bool removeStudy(const QString& studyInstanceUID);
207  Q_INVOKABLE bool removePatient(const QString& patientID);
208  bool cleanup();
209 
219  Q_INVOKABLE QString instanceValue (const QString sopInstanceUID, const QString tag);
220  Q_INVOKABLE QString instanceValue (const QString sopInstanceUID, const unsigned short group, const unsigned short element);
221  Q_INVOKABLE QString fileValue (const QString fileName, const QString tag);
222  Q_INVOKABLE QString fileValue (const QString fileName, const unsigned short group, const unsigned short element);
223  Q_INVOKABLE bool tagToGroupElement (const QString tag, unsigned short& group, unsigned short& element);
224  Q_INVOKABLE QString groupElementToTag (const unsigned short& group, const unsigned short& element);
225 
237  Q_INVOKABLE bool tagCacheExists ();
239  Q_INVOKABLE bool initializeTagCache ();
241  Q_INVOKABLE QString cachedTag (const QString sopInstanceUID, const QString tag);
243  Q_INVOKABLE bool cacheTag (const QString sopInstanceUID, const QString tag, const QString value);
245  Q_INVOKABLE bool cacheTags (const QStringList sopInstanceUIDs, const QStringList tags, const QStringList values);
246 
247 
248 Q_SIGNALS:
255  void patientAdded(int, QString, QString, QString);
258  void studyAdded(QString);
261  void seriesAdded(QString);
265  void instanceAdded(QString);
267  void databaseChanged();
269  void schemaUpdateStarted(int);
271  void schemaUpdateProgress(int);
272  void schemaUpdateProgress(QString);
274  void schemaUpdated();
275 
276 protected:
277  QScopedPointer<ctkDICOMDatabasePrivate> d_ptr;
278 
279 
280 
281 private:
282  Q_DECLARE_PRIVATE(ctkDICOMDatabase);
283  Q_DISABLE_COPY(ctkDICOMDatabase);
284 };
285 
286 #endif
287