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 }