comparison Framework/Plugins/DatabaseBackendAdapterV4.cpp @ 384:e236be67e5f9 db-protobuf

fix
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 03 Apr 2023 10:46:01 +0200
parents bed7615c2484
children 3d6886f3e5b3
comparison
equal deleted inserted replaced
383:bed7615c2484 384:e236be67e5f9
646 typedef std::map<int32_t, std::string> Values; 646 typedef std::map<int32_t, std::string> Values;
647 647
648 Values values; 648 Values values;
649 backend.GetAllMetadata(values, manager, request.get_all_metadata().id()); 649 backend.GetAllMetadata(values, manager, request.get_all_metadata().id());
650 650
651 response.mutable_get_all_metadata()->mutable_metadata()->Reserve(values.size());
651 for (Values::const_iterator it = values.begin(); it != values.end(); ++it) 652 for (Values::const_iterator it = values.begin(); it != values.end(); ++it)
652 { 653 {
653 Orthanc::DatabasePluginMessages::GetAllMetadata_Response_Metadata* metadata = 654 Orthanc::DatabasePluginMessages::GetAllMetadata_Response_Metadata* metadata =
654 response.mutable_get_all_metadata()->add_metadata(); 655 response.mutable_get_all_metadata()->add_metadata();
655 metadata->set_type(it->first); 656 metadata->set_type(it->first);
662 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS: 663 case Orthanc::DatabasePluginMessages::OPERATION_GET_ALL_PUBLIC_IDS:
663 { 664 {
664 std::list<std::string> values; 665 std::list<std::string> values;
665 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids().resource_type())); 666 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids().resource_type()));
666 667
668 response.mutable_get_all_public_ids()->mutable_ids()->Reserve(values.size());
667 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) 669 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it)
668 { 670 {
669 response.mutable_get_all_public_ids()->add_ids(*it); 671 response.mutable_get_all_public_ids()->add_ids(*it);
670 } 672 }
671 673
677 std::list<std::string> values; 679 std::list<std::string> values;
678 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids_with_limits().resource_type()), 680 backend.GetAllPublicIds(values, manager, Convert(request.get_all_public_ids_with_limits().resource_type()),
679 request.get_all_public_ids_with_limits().since(), 681 request.get_all_public_ids_with_limits().since(),
680 request.get_all_public_ids_with_limits().limit()); 682 request.get_all_public_ids_with_limits().limit());
681 683
684 response.mutable_get_all_public_ids_with_limits()->mutable_ids()->Reserve(values.size());
682 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) 685 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it)
683 { 686 {
684 response.mutable_get_all_public_ids_with_limits()->add_ids(*it); 687 response.mutable_get_all_public_ids_with_limits()->add_ids(*it);
685 } 688 }
686 689
701 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_INTERNAL_ID: 704 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_INTERNAL_ID:
702 { 705 {
703 std::list<int64_t> values; 706 std::list<int64_t> values;
704 backend.GetChildrenInternalId(values, manager, request.get_children_internal_id().id()); 707 backend.GetChildrenInternalId(values, manager, request.get_children_internal_id().id());
705 708
709 response.mutable_get_children_internal_id()->mutable_ids()->Reserve(values.size());
706 for (std::list<int64_t>::const_iterator it = values.begin(); it != values.end(); ++it) 710 for (std::list<int64_t>::const_iterator it = values.begin(); it != values.end(); ++it)
707 { 711 {
708 response.mutable_get_children_internal_id()->add_ids(*it); 712 response.mutable_get_children_internal_id()->add_ids(*it);
709 } 713 }
710 714
714 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_PUBLIC_ID: 718 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_PUBLIC_ID:
715 { 719 {
716 std::list<std::string> values; 720 std::list<std::string> values;
717 backend.GetChildrenPublicId(values, manager, request.get_children_public_id().id()); 721 backend.GetChildrenPublicId(values, manager, request.get_children_public_id().id());
718 722
723 response.mutable_get_children_public_id()->mutable_ids()->Reserve(values.size());
719 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) 724 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it)
720 { 725 {
721 response.mutable_get_children_public_id()->add_ids(*it); 726 response.mutable_get_children_public_id()->add_ids(*it);
722 } 727 }
723 728
776 break; 781 break;
777 } 782 }
778 783
779 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCE_TYPE: 784 case Orthanc::DatabasePluginMessages::OPERATION_GET_RESOURCE_TYPE:
780 { 785 {
781 OrthancPluginResourceType type = backend.GetResourceType(manager, request.get_public_id().id()); 786 OrthancPluginResourceType type = backend.GetResourceType(manager, request.get_resource_type().id());
782 response.mutable_get_resource_type()->set_type(Convert(type)); 787 response.mutable_get_resource_type()->set_type(Convert(type));
783 break; 788 break;
784 } 789 }
785 790
786 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_COMPRESSED_SIZE: 791 case Orthanc::DatabasePluginMessages::OPERATION_GET_TOTAL_COMPRESSED_SIZE:
805 case Orthanc::DatabasePluginMessages::OPERATION_LIST_AVAILABLE_ATTACHMENTS: 810 case Orthanc::DatabasePluginMessages::OPERATION_LIST_AVAILABLE_ATTACHMENTS:
806 { 811 {
807 std::list<int32_t> values; 812 std::list<int32_t> values;
808 backend.ListAvailableAttachments(values, manager, request.list_available_attachments().id()); 813 backend.ListAvailableAttachments(values, manager, request.list_available_attachments().id());
809 814
815 response.mutable_list_available_attachments()->mutable_attachments()->Reserve(values.size());
810 for (std::list<int32_t>::const_iterator it = values.begin(); it != values.end(); ++it) 816 for (std::list<int32_t>::const_iterator it = values.begin(); it != values.end(); ++it)
811 { 817 {
812 response.mutable_list_available_attachments()->add_attachments(*it); 818 response.mutable_list_available_attachments()->add_attachments(*it);
813 } 819 }
814 820
1050 OrthancPluginResourcesContentTags tag; 1056 OrthancPluginResourcesContentTags tag;
1051 tag.resource = request.set_resources_content().tags(i).resource_id(); 1057 tag.resource = request.set_resources_content().tags(i).resource_id();
1052 tag.group = request.set_resources_content().tags(i).group(); 1058 tag.group = request.set_resources_content().tags(i).group();
1053 tag.element = request.set_resources_content().tags(i).element(); 1059 tag.element = request.set_resources_content().tags(i).element();
1054 tag.value = request.set_resources_content().tags(i).value().c_str(); 1060 tag.value = request.set_resources_content().tags(i).value().c_str();
1055 1061
1056 if (request.set_resources_content().tags(i).is_identifier()) 1062 if (request.set_resources_content().tags(i).is_identifier())
1057 { 1063 {
1058 identifierTags.push_back(tag); 1064 identifierTags.push_back(tag);
1059 } 1065 }
1060 else 1066 else
1061 { 1067 {
1062 mainDicomTags.push_back(tag); 1068 mainDicomTags.push_back(tag);
1063 } 1069 }
1064 } 1070 }
1065 1071
1066 std::vector<OrthancPluginResourcesContentMetadata> metadata(request.set_resources_content().metadata().size()); 1072 std::vector<OrthancPluginResourcesContentMetadata> metadata;
1073 metadata.reserve(request.set_resources_content().metadata().size());
1074
1067 for (int i = 0; i < request.set_resources_content().metadata().size(); i++) 1075 for (int i = 0; i < request.set_resources_content().metadata().size(); i++)
1068 { 1076 {
1069 OrthancPluginResourcesContentMetadata item; 1077 OrthancPluginResourcesContentMetadata item;
1070 item.resource = request.set_resources_content().metadata(i).resource_id(); 1078 item.resource = request.set_resources_content().metadata(i).resource_id();
1071 item.metadata = request.set_resources_content().metadata(i).metadata(); 1079 item.metadata = request.set_resources_content().metadata(i).metadata();
1083 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_METADATA: 1091 case Orthanc::DatabasePluginMessages::OPERATION_GET_CHILDREN_METADATA:
1084 { 1092 {
1085 std::list<std::string> values; 1093 std::list<std::string> values;
1086 backend.GetChildrenMetadata(values, manager, request.get_children_metadata().id(), request.get_children_metadata().metadata()); 1094 backend.GetChildrenMetadata(values, manager, request.get_children_metadata().id(), request.get_children_metadata().metadata());
1087 1095
1096 response.mutable_get_children_metadata()->mutable_values()->Reserve(values.size());
1088 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it) 1097 for (std::list<std::string>::const_iterator it = values.begin(); it != values.end(); ++it)
1089 { 1098 {
1090 response.mutable_get_children_metadata()->add_values(*it); 1099 response.mutable_get_children_metadata()->add_values(*it);
1091 } 1100 }
1092 1101
1109 { 1118 {
1110 response.mutable_lookup_resource_and_parent()->set_found(true); 1119 response.mutable_lookup_resource_and_parent()->set_found(true);
1111 response.mutable_lookup_resource_and_parent()->set_id(id); 1120 response.mutable_lookup_resource_and_parent()->set_id(id);
1112 response.mutable_lookup_resource_and_parent()->set_type(Convert(type)); 1121 response.mutable_lookup_resource_and_parent()->set_type(Convert(type));
1113 1122
1114 if (parent.empty()) 1123 switch (type)
1115 { 1124 {
1116 response.mutable_lookup_resource_and_parent()->set_has_parent(true); 1125 case OrthancPluginResourceType_Study:
1117 } 1126 case OrthancPluginResourceType_Series:
1118 else 1127 case OrthancPluginResourceType_Instance:
1119 { 1128 if (parent.empty())
1120 response.mutable_lookup_resource_and_parent()->set_has_parent(false); 1129 {
1121 response.mutable_lookup_resource_and_parent()->set_parent_public_id(parent); 1130 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
1131 }
1132 else
1133 {
1134 response.mutable_lookup_resource_and_parent()->set_parent_public_id(parent);
1135 }
1136 break;
1137
1138 case OrthancPluginResourceType_Patient:
1139 if (!parent.empty())
1140 {
1141 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
1142 }
1143 break;
1144
1145 default:
1146 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
1122 } 1147 }
1123 } 1148 }
1124 else 1149 else
1125 { 1150 {
1126 response.mutable_lookup_resource_and_parent()->set_found(false); 1151 response.mutable_lookup_resource_and_parent()->set_found(false);