comparison OrthancServer/ServerIndex.cpp @ 178:5739b4d10a4b

hashing
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 09 Nov 2012 11:13:29 +0100
parents 7e8b68dd6ace
children 78e28d0098d9
comparison
equal deleted inserted replaced
177:81b6f3013738 178:5739b4d10a4b
40 40
41 #include "EmbeddedResources.h" 41 #include "EmbeddedResources.h"
42 #include "../Core/Toolbox.h" 42 #include "../Core/Toolbox.h"
43 #include "../Core/Uuid.h" 43 #include "../Core/Uuid.h"
44 #include "../Core/DicomFormat/DicomArray.h" 44 #include "../Core/DicomFormat/DicomArray.h"
45 #include "../Core/DicomFormat/DicomInstanceHasher.h"
45 #include "../Core/SQLite/Transaction.h" 46 #include "../Core/SQLite/Transaction.h"
46 #include "FromDcmtkBridge.h" 47 #include "FromDcmtkBridge.h"
47 48
48 #include <boost/lexical_cast.hpp> 49 #include <boost/lexical_cast.hpp>
49 #include <stdio.h> 50 #include <stdio.h>
528 const std::string& jsonUuid, 529 const std::string& jsonUuid,
529 const std::string& distantAet) 530 const std::string& distantAet)
530 { 531 {
531 boost::mutex::scoped_lock scoped_lock(mutex_); 532 boost::mutex::scoped_lock scoped_lock(mutex_);
532 533
533 std::string dicomPatientId = dicomSummary.GetValue(DICOM_TAG_PATIENT_ID).AsString(); 534 DicomInstanceHasher hasher(dicomSummary);
534 std::string dicomInstance = dicomSummary.GetValue(DICOM_TAG_SOP_INSTANCE_UID).AsString();
535 std::string dicomSeries = dicomSummary.GetValue(DICOM_TAG_SERIES_INSTANCE_UID).AsString();
536 std::string dicomStudy = dicomSummary.GetValue(DICOM_TAG_STUDY_INSTANCE_UID).AsString();
537 535
538 try 536 try
539 { 537 {
540 SQLite::Transaction t(db_); 538 SQLite::Transaction t(db_);
541 t.Begin(); 539 t.Begin();
542 540
543 if (HasInstance(instanceUuid, dicomInstance)) 541 if (HasInstance(instanceUuid, hasher.GetInstanceUid()))
544 { 542 {
545 return StoreStatus_AlreadyStored; 543 return StoreStatus_AlreadyStored;
546 // TODO: Check consistency? 544 // TODO: Check consistency?
547 } 545 }
548 546
549 std::string patientUuid; 547 std::string patientUuid;
550 if (HasPatient(patientUuid, dicomPatientId)) 548 if (HasPatient(patientUuid, hasher.GetPatientId()))
551 { 549 {
552 // TODO: Check consistency? 550 // TODO: Check consistency?
553 } 551 }
554 else 552 else
555 { 553 {
556 patientUuid = CreatePatient(dicomPatientId, dicomSummary); 554 patientUuid = CreatePatient(hasher.GetPatientId(), dicomSummary);
557 } 555 }
558 556
559 std::string studyUuid; 557 std::string studyUuid;
560 if (HasStudy(studyUuid, dicomStudy)) 558 if (HasStudy(studyUuid, hasher.GetStudyUid()))
561 { 559 {
562 // TODO: Check consistency? 560 // TODO: Check consistency?
563 } 561 }
564 else 562 else
565 { 563 {
566 studyUuid = CreateStudy(patientUuid, dicomStudy, dicomSummary); 564 studyUuid = CreateStudy(patientUuid, hasher.GetStudyUid(), dicomSummary);
567 } 565 }
568 566
569 std::string seriesUuid; 567 std::string seriesUuid;
570 if (HasSeries(seriesUuid, dicomSeries)) 568 if (HasSeries(seriesUuid, hasher.GetSeriesUid()))
571 { 569 {
572 // TODO: Check consistency? 570 // TODO: Check consistency?
573 } 571 }
574 else 572 else
575 { 573 {
576 seriesUuid = CreateSeries(studyUuid, dicomSeries, dicomSummary); 574 seriesUuid = CreateSeries(studyUuid, hasher.GetSeriesUid(), dicomSummary);
577 } 575 }
578 576
579 instanceUuid = CreateInstance(seriesUuid, dicomInstance, dicomSummary, fileUuid, 577 instanceUuid = CreateInstance(seriesUuid, hasher.GetInstanceUid(), dicomSummary, fileUuid,
580 uncompressedFileSize, jsonUuid, distantAet); 578 uncompressedFileSize, jsonUuid, distantAet);
581 579
582 t.Commit(); 580 t.Commit();
583 return StoreStatus_Success; 581 return StoreStatus_Success;
584 //t.Rollback(); 582 //t.Rollback();