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 
106  Q_INVOKABLE virtual void openDatabase(const QString databaseFile,
107  const QString& connectionName = "DICOM-DB");
108 
111  Q_INVOKABLE void closeDatabase();
114  Q_INVOKABLE bool initializeDatabase(const char* schemaFile = ":/dicom/dicom-schema.sql");
115 
117  Q_INVOKABLE bool updateSchema(const char* schemaFile = ":/dicom/dicom-schema.sql");
118 
121  Q_INVOKABLE bool updateSchemaIfNeeded(const char* schemaFile = ":/dicom/dicom-schema.sql");
122 
124  Q_INVOKABLE QString schemaVersion();
125 
128  Q_INVOKABLE QString schemaVersionLoaded();
129 
132  Q_INVOKABLE QStringList patients ();
133  Q_INVOKABLE QStringList studiesForPatient (const QString patientUID);
134  Q_INVOKABLE QStringList seriesForStudy (const QString studyUID);
135  Q_INVOKABLE QString studyForSeries(QString seriesUID);
136  Q_INVOKABLE QString patientForStudy(QString studyUID);
137  Q_INVOKABLE QStringList filesForSeries (const QString seriesUID);
138  Q_INVOKABLE QHash<QString,QString> descriptionsForFile(QString fileName);
139  Q_INVOKABLE QString descriptionForSeries(const QString seriesUID);
140  Q_INVOKABLE QString descriptionForStudy(const QString studyUID);
141  Q_INVOKABLE QString nameForPatient(const QString patientUID);
142  Q_INVOKABLE QString fileForInstance (const QString sopInstanceUID);
143  Q_INVOKABLE QString seriesForFile (QString fileName);
144  Q_INVOKABLE QString instanceForFile (const QString fileName);
145  Q_INVOKABLE QDateTime insertDateTimeForInstance (const QString fileName);
146 
147  Q_INVOKABLE QStringList allFiles ();
154  Q_INVOKABLE void loadInstanceHeader (const QString sopInstanceUID);
155  Q_INVOKABLE void loadFileHeader (const QString fileName);
156  Q_INVOKABLE QStringList headerKeys ();
157  Q_INVOKABLE QString headerValue (const QString key);
158 
169  void setTagsToPrecache(const QStringList tags);
170  const QStringList tagsToPrecache();
171 
187  Q_INVOKABLE void insert( const ctkDICOMItem& ctkDataset,
188  bool storeFile, bool generateThumbnail);
189  void insert ( DcmItem *item,
190  bool storeFile = true, bool generateThumbnail = true);
191  Q_INVOKABLE void insert ( const QString& filePath,
192  bool storeFile = true, bool generateThumbnail = true,
193  bool createHierarchy = true,
194  const QString& destinationDirectoryName = QString() );
195 
197  bool fileExistsAndUpToDate(const QString& filePath);
198 
201  Q_INVOKABLE bool removeSeries(const QString& seriesInstanceUID);
202  Q_INVOKABLE bool removeStudy(const QString& studyInstanceUID);
203  Q_INVOKABLE bool removePatient(const QString& patientID);
204  bool cleanup();
205 
215  Q_INVOKABLE QString instanceValue (const QString sopInstanceUID, const QString tag);
216  Q_INVOKABLE QString instanceValue (const QString sopInstanceUID, const unsigned short group, const unsigned short element);
217  Q_INVOKABLE QString fileValue (const QString fileName, const QString tag);
218  Q_INVOKABLE QString fileValue (const QString fileName, const unsigned short group, const unsigned short element);
219  Q_INVOKABLE bool tagToGroupElement (const QString tag, unsigned short& group, unsigned short& element);
220  Q_INVOKABLE QString groupElementToTag (const unsigned short& group, const unsigned short& element);
221 
233  Q_INVOKABLE bool tagCacheExists ();
235  Q_INVOKABLE bool initializeTagCache ();
237  Q_INVOKABLE QString cachedTag (const QString sopInstanceUID, const QString tag);
239  Q_INVOKABLE bool cacheTag (const QString sopInstanceUID, const QString tag, const QString value);
241  Q_INVOKABLE bool cacheTags (const QStringList sopInstanceUIDs, const QStringList tags, const QStringList values);
242 
243 
244 Q_SIGNALS:
251  void patientAdded(int, QString, QString, QString);
254  void studyAdded(QString);
257  void seriesAdded(QString);
261  void instanceAdded(QString);
263  void databaseChanged();
265  void schemaUpdateStarted(int);
267  void schemaUpdateProgress(int);
268  void schemaUpdateProgress(QString);
270  void schemaUpdated();
271 
272 protected:
273  QScopedPointer<ctkDICOMDatabasePrivate> d_ptr;
274 
275 
276 
277 private:
278  Q_DECLARE_PRIVATE(ctkDICOMDatabase);
279  Q_DISABLE_COPY(ctkDICOMDatabase);
280 };
281 
282 #endif
283