Mercurial > hg > orthanc
comparison OrthancServer/ServerIndex.cpp @ 2209:e3fd5bc429a2
URI to reconstruct the main DICOM tags, the JSON summary and the metadata
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 09 Dec 2016 17:20:21 +0100 |
parents | 90ea60bee5ff |
children | 4f39ab2cb453 |
comparison
equal
deleted
inserted
replaced
2208:90ea60bee5ff | 2209:e3fd5bc429a2 |
---|---|
38 #endif | 38 #endif |
39 | 39 |
40 #include "ServerIndexChange.h" | 40 #include "ServerIndexChange.h" |
41 #include "EmbeddedResources.h" | 41 #include "EmbeddedResources.h" |
42 #include "OrthancInitialization.h" | 42 #include "OrthancInitialization.h" |
43 #include "ParsedDicomFile.h" | |
43 #include "ServerToolbox.h" | 44 #include "ServerToolbox.h" |
44 #include "../Core/Toolbox.h" | 45 #include "../Core/Toolbox.h" |
45 #include "../Core/Logging.h" | 46 #include "../Core/Logging.h" |
46 #include "../Core/DicomFormat/DicomArray.h" | 47 #include "../Core/DicomFormat/DicomArray.h" |
47 | 48 |
2234 } | 2235 } |
2235 | 2236 |
2236 target = db_.GetPublicId(id); | 2237 target = db_.GetPublicId(id); |
2237 return true; | 2238 return true; |
2238 } | 2239 } |
2240 | |
2241 | |
2242 void ServerIndex::ReconstructInstance(ParsedDicomFile& dicom) | |
2243 { | |
2244 DicomMap summary; | |
2245 dicom.ExtractDicomSummary(summary); | |
2246 | |
2247 DicomInstanceHasher hasher(summary); | |
2248 | |
2249 boost::mutex::scoped_lock lock(mutex_); | |
2250 | |
2251 try | |
2252 { | |
2253 Transaction t(*this); | |
2254 | |
2255 int64_t patient = -1, study = -1, series = -1, instance = -1; | |
2256 | |
2257 ResourceType dummy; | |
2258 if (!db_.LookupResource(patient, dummy, hasher.HashPatient()) || | |
2259 !db_.LookupResource(study, dummy, hasher.HashStudy()) || | |
2260 !db_.LookupResource(series, dummy, hasher.HashSeries()) || | |
2261 !db_.LookupResource(instance, dummy, hasher.HashInstance()) || | |
2262 patient == -1 || | |
2263 study == -1 || | |
2264 series == -1 || | |
2265 instance == -1) | |
2266 { | |
2267 throw OrthancException(ErrorCode_InternalError); | |
2268 } | |
2269 | |
2270 db_.ClearMainDicomTags(patient); | |
2271 db_.ClearMainDicomTags(study); | |
2272 db_.ClearMainDicomTags(series); | |
2273 db_.ClearMainDicomTags(instance); | |
2274 | |
2275 ServerToolbox::StoreMainDicomTags(db_, patient, ResourceType_Patient, summary); | |
2276 ServerToolbox::StoreMainDicomTags(db_, study, ResourceType_Study, summary); | |
2277 ServerToolbox::StoreMainDicomTags(db_, series, ResourceType_Series, summary); | |
2278 ServerToolbox::StoreMainDicomTags(db_, instance, ResourceType_Instance, summary); | |
2279 | |
2280 { | |
2281 std::string s; | |
2282 if (dicom.LookupTransferSyntax(s)) | |
2283 { | |
2284 db_.SetMetadata(instance, MetadataType_Instance_TransferSyntax, s); | |
2285 } | |
2286 } | |
2287 | |
2288 const DicomValue* value; | |
2289 if ((value = summary.TestAndGetValue(DICOM_TAG_SOP_CLASS_UID)) != NULL && | |
2290 !value->IsNull() && | |
2291 !value->IsBinary()) | |
2292 { | |
2293 db_.SetMetadata(instance, MetadataType_Instance_SopClassUid, value->GetContent()); | |
2294 } | |
2295 | |
2296 t.Commit(0); // No change in the DB size | |
2297 } | |
2298 catch (OrthancException& e) | |
2299 { | |
2300 LOG(ERROR) << "EXCEPTION [" << e.What() << "]"; | |
2301 } | |
2302 } | |
2239 } | 2303 } |