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