Mercurial > hg > orthanc
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(); |