00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef DCMQRDBI_H
00030 #define DCMQRDBI_H
00031
00032 #include "dcmtk/config/osconfig.h"
00033 #include "dcmtk/dcmqrdb/dcmqrdba.h"
00034
00035 #include "dcmtk/dcmnet/dicom.h"
00036 #include "dcmtk/dcmnet/dimse.h"
00037 #include "dcmtk/ofstd/offname.h"
00038
00039 struct StudyDescRecord;
00040 struct DB_Private_Handle;
00041 struct DB_SmallDcmElmt;
00042 struct IdxRecord;
00043 struct DB_ElementList;
00044 class DcmQueryRetrieveConfig;
00045
00046 #define DBINDEXFILE "index.dat"
00047
00048 #ifndef _WIN32
00049
00050
00051
00052 #define LOCK_IMAGE_FILES
00053 #endif
00054
00057 enum DB_LEVEL
00058 {
00060 PATIENT_LEVEL,
00062 STUDY_LEVEL,
00064 SERIE_LEVEL,
00066 IMAGE_LEVEL
00067 };
00068
00076 enum DVIFhierarchyStatus
00077 {
00079 DVIF_objectIsNotNew,
00081 DVIF_objectIsNew,
00083 DVIF_objectContainsNewSubobjects
00084 };
00085
00087 #define DB_UpperMaxStudies 500
00088
00090 #define DB_UpperMaxBytesPerStudy 0x40000000L
00091
00092
00097 class DcmQueryRetrieveIndexDatabaseHandle: public DcmQueryRetrieveDatabaseHandle
00098 {
00099 public:
00100
00110 DcmQueryRetrieveIndexDatabaseHandle(
00111 const char *storageArea,
00112 long maxStudiesPerStorageArea,
00113 long maxBytesPerStudy,
00114 OFCondition& result);
00115
00120 ~DcmQueryRetrieveIndexDatabaseHandle();
00121
00127 void setIdentifierChecking(OFBool checkFind, OFBool checkMove);
00128
00138 OFCondition makeNewStoreFileName(
00139 const char *SOPClassUID,
00140 const char *SOPInstanceUID,
00141 char *newImageFileName);
00142
00154 OFCondition storeRequest(
00155 const char *SOPClassUID,
00156 const char *SOPInstanceUID,
00157 const char *imageFileName,
00158 DcmQueryRetrieveDatabaseStatus *status,
00159 OFBool isNew = OFTrue );
00160
00174 OFCondition startFindRequest(
00175 const char *SOPClassUID,
00176 DcmDataset *findRequestIdentifiers,
00177 DcmQueryRetrieveDatabaseStatus *status);
00178
00190 OFCondition nextFindResponse(
00191 DcmDataset **findResponseIdentifiers,
00192 DcmQueryRetrieveDatabaseStatus *status);
00193
00200 OFCondition cancelFindRequest(DcmQueryRetrieveDatabaseStatus *status);
00201
00215 OFCondition startMoveRequest(
00216 const char *SOPClassUID,
00217 DcmDataset *moveRequestIdentifiers,
00218 DcmQueryRetrieveDatabaseStatus *status);
00219
00239 OFCondition nextMoveResponse(
00240 char *SOPClassUID,
00241 char *SOPInstanceUID,
00242 char *imageFileName,
00243 unsigned short *numberOfRemainingSubOperations,
00244 DcmQueryRetrieveDatabaseStatus *status);
00245
00252 OFCondition cancelMoveRequest(DcmQueryRetrieveDatabaseStatus *status);
00253
00257 OFCondition pruneInvalidRecords();
00258
00259
00260
00264 void enableQuotaSystem(OFBool enable);
00265
00269 static void printIndexFile (char *storeArea);
00270
00276 OFCondition deleteImageFile(char* imgFile);
00277
00282 OFCondition DB_lock(OFBool exclusive);
00283
00286 OFCondition DB_unlock();
00287
00293 OFCondition DB_IdxGetNext(int *idx, IdxRecord *idxRec);
00294
00299 OFCondition DB_IdxInitLoop(int *idx);
00300
00306 OFCondition DB_IdxRead(int idx, IdxRecord *idxRec);
00307
00312 OFCondition DB_GetStudyDesc(StudyDescRecord *pStudyDesc);
00313
00318 OFCondition DB_StudyDescChange(StudyDescRecord *pStudyDesc);
00319
00324 OFCondition DB_IdxRemove(int idx);
00325
00330 OFCondition instanceReviewed(int idx);
00331
00333 const char *getStorageArea() const;
00334
00336 const char *getIndexFilename() const;
00337
00338
00339 private:
00340
00341 OFCondition removeDuplicateImage(
00342 const char *SOPInstanceUID, const char *StudyInstanceUID,
00343 StudyDescRecord *pStudyDesc, const char *newImageFileName);
00344 int deleteOldestStudy(StudyDescRecord *pStudyDesc);
00345 OFCondition deleteOldestImages(StudyDescRecord *pStudyDesc, int StudyNum, char *StudyUID, long RequiredSize);
00346 int matchDate (DB_SmallDcmElmt *mod, DB_SmallDcmElmt *elt);
00347 int matchTime (DB_SmallDcmElmt *mod, DB_SmallDcmElmt *elt);
00348 int matchUID (DB_SmallDcmElmt *mod, DB_SmallDcmElmt *elt);
00349 int matchStrings (DB_SmallDcmElmt *mod, DB_SmallDcmElmt *elt);
00350 int matchOther (DB_SmallDcmElmt *mod, DB_SmallDcmElmt *elt);
00351 int dbmatch (DB_SmallDcmElmt *mod, DB_SmallDcmElmt *elt);
00352 void makeResponseList(DB_Private_Handle *phandle, IdxRecord *idxRec);
00353 int matchStudyUIDInStudyDesc (StudyDescRecord *pStudyDesc, char *StudyUID, int maxStudiesAllowed);
00354 OFCondition checkupinStudyDesc(StudyDescRecord *pStudyDesc, char *StudyUID, long imageSize);
00355
00356 OFCondition hierarchicalCompare (
00357 DB_Private_Handle *phandle,
00358 IdxRecord *idxRec,
00359 DB_LEVEL level,
00360 DB_LEVEL infLevel,
00361 int *match);
00362
00363 OFCondition testFindRequestList (
00364 DB_ElementList *findRequestList,
00365 DB_LEVEL queryLevel,
00366 DB_LEVEL infLevel,
00367 DB_LEVEL lowestLevel);
00368
00369 OFCondition testMoveRequestList (
00370 DB_ElementList *findRequestList,
00371 DB_LEVEL queryLevel,
00372 DB_LEVEL infLevel,
00373 DB_LEVEL lowestLevel);
00374
00376 DB_Private_Handle *handle_;
00377
00379 OFBool quotaSystemEnabled;
00380
00382 OFBool doCheckFindIdentifier;
00383
00385 OFBool doCheckMoveIdentifier;
00386
00388 OFFilenameCreator fnamecreator;
00389
00390 };
00391
00392
00396 class DcmQueryRetrieveIndexDatabaseHandleFactory: public DcmQueryRetrieveDatabaseHandleFactory
00397 {
00398 public:
00399
00403 DcmQueryRetrieveIndexDatabaseHandleFactory(const DcmQueryRetrieveConfig *config);
00404
00406 virtual ~DcmQueryRetrieveIndexDatabaseHandleFactory();
00407
00416 virtual DcmQueryRetrieveDatabaseHandle *createDBHandle(
00417 const char *callingAETitle,
00418 const char *calledAETitle,
00419 OFCondition& result) const;
00420
00421 private:
00422
00424 const DcmQueryRetrieveConfig *config_;
00425 };
00426
00427 #endif
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463