comparison OrthancServer/OrthancRestApi.cpp @ 231:8098448bd827

export log
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 30 Nov 2012 12:18:44 +0100
parents ae2367145b49
children 5368bbe813cf
comparison
equal deleted inserted replaced
230:ae2367145b49 231:8098448bd827
240 240
241 static void DicomStore(RestApi::PostCall& call) 241 static void DicomStore(RestApi::PostCall& call)
242 { 242 {
243 RETRIEVE_CONTEXT(call); 243 RETRIEVE_CONTEXT(call);
244 244
245 std::string remote = call.GetUriComponent("id", "");
245 DicomUserConnection connection; 246 DicomUserConnection connection;
246 ConnectToModality(connection, call.GetUriComponent("id", "")); 247 ConnectToModality(connection, remote);
248
249 const std::string& resourceId = call.GetPostBody();
247 250
248 Json::Value found; 251 Json::Value found;
249 if (context.GetIndex().LookupResource(found, call.GetPostBody(), ResourceType_Series)) 252 if (context.GetIndex().LookupResource(found, resourceId, ResourceType_Series))
250 { 253 {
251 // The UUID corresponds to a series 254 // The UUID corresponds to a series
255 context.GetIndex().LogExportedResource(resourceId, remote);
256
252 for (Json::Value::ArrayIndex i = 0; i < found["Instances"].size(); i++) 257 for (Json::Value::ArrayIndex i = 0; i < found["Instances"].size(); i++)
253 { 258 {
254 std::string instanceId = found["Instances"][i].asString(); 259 std::string instanceId = found["Instances"][i].asString();
255 std::string dicom; 260 std::string dicom;
256 context.ReadFile(dicom, instanceId, AttachedFileType_Dicom); 261 context.ReadFile(dicom, instanceId, AttachedFileType_Dicom);
257 connection.Store(dicom); 262 connection.Store(dicom);
258 } 263 }
259 264
260 call.GetOutput().AnswerBuffer("{}", "application/json"); 265 call.GetOutput().AnswerBuffer("{}", "application/json");
261 } 266 }
262 else if (context.GetIndex().LookupResource(found, call.GetPostBody(), ResourceType_Instance)) 267 else if (context.GetIndex().LookupResource(found, resourceId, ResourceType_Instance))
263 { 268 {
264 // The UUID corresponds to an instance 269 // The UUID corresponds to an instance
265 std::string instanceId = call.GetPostBody(); 270 context.GetIndex().LogExportedResource(resourceId, remote);
271
266 std::string dicom; 272 std::string dicom;
267 context.ReadFile(dicom, instanceId, AttachedFileType_Dicom); 273 context.ReadFile(dicom, resourceId, AttachedFileType_Dicom);
268 connection.Store(dicom); 274 connection.Store(dicom);
269 275
270 call.GetOutput().AnswerBuffer("{}", "application/json"); 276 call.GetOutput().AnswerBuffer("{}", "application/json");
271 } 277 }
272 else 278 else
273 { 279 {
274 // The POST body is not a known resource, assume that it 280 // The POST body is not a known resource, assume that it
275 // contains a raw DICOM instance 281 // contains a raw DICOM instance
276 connection.Store(call.GetPostBody()); 282 connection.Store(resourceId);
277 call.GetOutput().AnswerBuffer("{}", "application/json"); 283 call.GetOutput().AnswerBuffer("{}", "application/json");
278 } 284 }
279 } 285 }
280 286
281 287
340 } 346 }
341 347
342 348
343 // Changes API -------------------------------------------------------------- 349 // Changes API --------------------------------------------------------------
344 350
351 static void GetSinceAndLimit(int64_t& since,
352 unsigned int& limit,
353 const RestApi::GetCall& call)
354 {
355 static const unsigned int MAX_RESULTS = 100;
356
357 try
358 {
359 since = boost::lexical_cast<int64_t>(call.GetArgument("since", "0"));
360 limit = boost::lexical_cast<unsigned int>(call.GetArgument("limit", "0"));
361 }
362 catch (boost::bad_lexical_cast)
363 {
364 return;
365 }
366
367 if (limit == 0 || limit > MAX_RESULTS)
368 {
369 limit = MAX_RESULTS;
370 }
371 }
372
345 static void GetChanges(RestApi::GetCall& call) 373 static void GetChanges(RestApi::GetCall& call)
346 { 374 {
347 RETRIEVE_CONTEXT(call); 375 RETRIEVE_CONTEXT(call);
348 376
349 static const unsigned int MAX_RESULTS = 100;
350 ServerIndex& index = context.GetIndex();
351
352 //std::string filter = GetArgument(getArguments, "filter", ""); 377 //std::string filter = GetArgument(getArguments, "filter", "");
353 int64_t since; 378 int64_t since;
354 unsigned int limit; 379 unsigned int limit;
355 try 380 GetSinceAndLimit(since, limit, call);
356 { 381
357 since = boost::lexical_cast<int64_t>(call.GetArgument("since", "0")); 382 Json::Value result;
358 limit = boost::lexical_cast<unsigned int>(call.GetArgument("limit", "0")); 383 if (context.GetIndex().GetChanges(result, since, limit))
359 }
360 catch (boost::bad_lexical_cast)
361 {
362 return;
363 }
364
365 if (limit == 0 || limit > MAX_RESULTS)
366 {
367 limit = MAX_RESULTS;
368 }
369
370 Json::Value result;
371 if (index.GetChanges(result, since, limit))
372 { 384 {
373 call.GetOutput().AnswerJson(result); 385 call.GetOutput().AnswerJson(result);
374 } 386 }
375 } 387 }
376 388
389
390 static void GetExports(RestApi::GetCall& call)
391 {
392 RETRIEVE_CONTEXT(call);
393
394 int64_t since;
395 unsigned int limit;
396 GetSinceAndLimit(since, limit, call);
397
398 Json::Value result;
399 if (context.GetIndex().GetExportedResources(result, since, limit))
400 {
401 call.GetOutput().AnswerJson(result);
402 }
403 }
377 404
378 405
379 // Get information about a single instance ---------------------------------- 406 // Get information about a single instance ----------------------------------
380 407
381 static void GetInstanceFile(RestApi::GetCall& call) 408 static void GetInstanceFile(RestApi::GetCall& call)
590 GetListOfDicomModalities(modalities_); 617 GetListOfDicomModalities(modalities_);
591 618
592 Register("/", ServeRoot); 619 Register("/", ServeRoot);
593 Register("/system", GetSystemInformation); 620 Register("/system", GetSystemInformation);
594 Register("/changes", GetChanges); 621 Register("/changes", GetChanges);
622 Register("/exported", GetExports);
595 623
596 Register("/instances", UploadDicomFile); 624 Register("/instances", UploadDicomFile);
597 Register("/instances", ListResources<ResourceType_Instance>); 625 Register("/instances", ListResources<ResourceType_Instance>);
598 Register("/patients", ListResources<ResourceType_Patient>); 626 Register("/patients", ListResources<ResourceType_Patient>);
599 Register("/series", ListResources<ResourceType_Series>); 627 Register("/series", ListResources<ResourceType_Series>);