Mercurial > hg > orthanc
diff OrthancServer/Sources/ServerContext.cpp @ 5287:c04230962098 am-experimental
wip: 'dicomWeb' json format + 'include' get arguments
author | Alain Mazy <am@osimis.io> |
---|---|
date | Fri, 28 Apr 2023 10:42:27 +0200 |
parents | a7d95f951f8a |
children | c9ea57d73603 |
line wrap: on
line diff
--- a/OrthancServer/Sources/ServerContext.cpp Mon Apr 24 18:13:48 2023 +0200 +++ b/OrthancServer/Sources/ServerContext.cpp Fri Apr 28 10:42:27 2023 +0200 @@ -1987,7 +1987,8 @@ static void SerializeExpandedResource(Json::Value& target, const ExpandedResource& resource, DicomToJsonFormat format, - const std::set<DicomTag>& requestedTags) + const std::set<DicomTag>& requestedTags, + ExpandResourceFlags expandFlags) { target = Json::objectValue; @@ -2015,42 +2016,45 @@ throw OrthancException(ErrorCode_InternalError); } - switch (resource.GetLevel()) + if (expandFlags & ExpandResourceFlags_IncludeChildren) { - case ResourceType_Patient: - case ResourceType_Study: - case ResourceType_Series: + switch (resource.GetLevel()) { - Json::Value c = Json::arrayValue; + case ResourceType_Patient: + case ResourceType_Study: + case ResourceType_Series: + { + Json::Value c = Json::arrayValue; + + for (std::list<std::string>::const_iterator + it = resource.childrenIds_.begin(); it != resource.childrenIds_.end(); ++it) + { + c.append(*it); + } - for (std::list<std::string>::const_iterator - it = resource.childrenIds_.begin(); it != resource.childrenIds_.end(); ++it) - { - c.append(*it); + if (resource.GetLevel() == ResourceType_Patient) + { + target["Studies"] = c; + } + else if (resource.GetLevel() == ResourceType_Study) + { + target["Series"] = c; + } + else + { + target["Instances"] = c; + } + break; } - if (resource.GetLevel() == ResourceType_Patient) - { - target["Studies"] = c; - } - else if (resource.GetLevel() == ResourceType_Study) - { - target["Series"] = c; - } - else - { - target["Instances"] = c; - } - break; + case ResourceType_Instance: + break; + + default: + throw OrthancException(ErrorCode_InternalError); } - - case ResourceType_Instance: - break; - - default: - throw OrthancException(ErrorCode_InternalError); } - + switch (resource.GetLevel()) { case ResourceType_Patient: @@ -2113,26 +2117,29 @@ } // serialize tags + if (expandFlags & ExpandResourceFlags_IncludeMainDicomTags) + { + static const char* const MAIN_DICOM_TAGS = "MainDicomTags"; + static const char* const PATIENT_MAIN_DICOM_TAGS = "PatientMainDicomTags"; - static const char* const MAIN_DICOM_TAGS = "MainDicomTags"; - static const char* const PATIENT_MAIN_DICOM_TAGS = "PatientMainDicomTags"; - - DicomMap mainDicomTags; - resource.GetMainDicomTags().ExtractResourceInformation(mainDicomTags, resource.GetLevel()); + DicomMap mainDicomTags; + resource.GetMainDicomTags().ExtractResourceInformation(mainDicomTags, resource.GetLevel()); - target[MAIN_DICOM_TAGS] = Json::objectValue; - FromDcmtkBridge::ToJson(target[MAIN_DICOM_TAGS], mainDicomTags, format); - - if (resource.GetLevel() == ResourceType_Study) - { - DicomMap patientMainDicomTags; - resource.GetMainDicomTags().ExtractPatientInformation(patientMainDicomTags); + target[MAIN_DICOM_TAGS] = Json::objectValue; + FromDcmtkBridge::ToJson(target[MAIN_DICOM_TAGS], mainDicomTags, format); + + if (resource.GetLevel() == ResourceType_Study) + { + DicomMap patientMainDicomTags; + resource.GetMainDicomTags().ExtractPatientInformation(patientMainDicomTags); - target[PATIENT_MAIN_DICOM_TAGS] = Json::objectValue; - FromDcmtkBridge::ToJson(target[PATIENT_MAIN_DICOM_TAGS], patientMainDicomTags, format); + target[PATIENT_MAIN_DICOM_TAGS] = Json::objectValue; + FromDcmtkBridge::ToJson(target[PATIENT_MAIN_DICOM_TAGS], patientMainDicomTags, format); + } } - if (requestedTags.size() > 0) + if ((expandFlags & ExpandResourceFlags_IncludeRequestedTags) + && requestedTags.size() > 0) { static const char* const REQUESTED_TAGS = "RequestedTags"; @@ -2144,6 +2151,7 @@ } + if (expandFlags & ExpandResourceFlags_IncludeLabels) { Json::Value labels = Json::arrayValue; @@ -2378,13 +2386,14 @@ ResourceType level, DicomToJsonFormat format, const std::set<DicomTag>& requestedTags, + ExpandResourceFlags expandFlags, bool allowStorageAccess) { std::string unusedInstanceId; Json::Value* unusedDicomAsJson = NULL; DicomMap unusedMainDicomTags; - return ExpandResource(target, publicId, unusedMainDicomTags, unusedInstanceId, unusedDicomAsJson, level, format, requestedTags, allowStorageAccess); + return ExpandResource(target, publicId, unusedMainDicomTags, unusedInstanceId, unusedDicomAsJson, level, format, requestedTags, expandFlags, allowStorageAccess); } bool ServerContext::ExpandResource(Json::Value& target, @@ -2395,13 +2404,14 @@ ResourceType level, DicomToJsonFormat format, const std::set<DicomTag>& requestedTags, + ExpandResourceFlags expandFlags, bool allowStorageAccess) { ExpandedResource resource; - if (ExpandResource(resource, publicId, mainDicomTags, instanceId, dicomAsJson, level, requestedTags, ExpandResourceFlags_Default, allowStorageAccess)) + if (ExpandResource(resource, publicId, mainDicomTags, instanceId, dicomAsJson, level, requestedTags, expandFlags, allowStorageAccess)) { - SerializeExpandedResource(target, resource, format, requestedTags); + SerializeExpandedResource(target, resource, format, requestedTags, expandFlags); return true; }