comparison OrthancServer/OrthancRestApi/OrthancRestResources.cpp @ 1758:318c2e83c2bd db-changes

fix
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 28 Oct 2015 12:53:45 +0100
parents 4941494b5dd8
children e268412adcf1
comparison
equal deleted inserted replaced
1757:98abb8d7f905 1758:318c2e83c2bd
942 request.type() == Json::objectValue && 942 request.type() == Json::objectValue &&
943 request.isMember("Level") && 943 request.isMember("Level") &&
944 request.isMember("Query") && 944 request.isMember("Query") &&
945 request["Level"].type() == Json::stringValue && 945 request["Level"].type() == Json::stringValue &&
946 request["Query"].type() == Json::objectValue && 946 request["Query"].type() == Json::objectValue &&
947 (!request.isMember("CaseSensitive") || request["CaseSensitive"].type() == Json::booleanValue)) 947 (!request.isMember("CaseSensitive") || request["CaseSensitive"].type() == Json::booleanValue) &&
948 (!request.isMember("Limit") || request["Limit"].type() == Json::intValue))
948 { 949 {
949 bool expand = false; 950 bool expand = false;
950 if (request.isMember("Expand")) 951 if (request.isMember("Expand"))
951 { 952 {
952 expand = request["Expand"].asBool(); 953 expand = request["Expand"].asBool();
956 if (request.isMember("CaseSensitive")) 957 if (request.isMember("CaseSensitive"))
957 { 958 {
958 caseSensitive = request["CaseSensitive"].asBool(); 959 caseSensitive = request["CaseSensitive"].asBool();
959 } 960 }
960 961
962 size_t limit = 0;
963 if (request.isMember("Limit"))
964 {
965 limit = request["CaseSensitive"].asInt();
966 if (limit < 0)
967 {
968 throw OrthancException(ErrorCode_ParameterOutOfRange);
969 }
970 }
971
961 std::string level = request["Level"].asString(); 972 std::string level = request["Level"].asString();
962 973
963 DicomFindQuery query; 974 LookupResource query(StringToResourceType(level.c_str()));
964 query.SetLevel(StringToResourceType(level.c_str()));
965 975
966 Json::Value::Members members = request["Query"].getMemberNames(); 976 Json::Value::Members members = request["Query"].getMemberNames();
967 for (size_t i = 0; i < members.size(); i++) 977 for (size_t i = 0; i < members.size(); i++)
968 { 978 {
969 if (request["Query"][members[i]].type() != Json::stringValue) 979 if (request["Query"][members[i]].type() != Json::stringValue)
970 { 980 {
971 throw OrthancException(ErrorCode_BadRequest); 981 throw OrthancException(ErrorCode_BadRequest);
972 } 982 }
973 983
974 query.SetConstraint(FromDcmtkBridge::ParseTag(members[i]), 984 query.AddDicomConstraint(FromDcmtkBridge::ParseTag(members[i]),
975 request["Query"][members[i]].asString(), 985 request["Query"][members[i]].asString(),
976 caseSensitive); 986 caseSensitive);
977 } 987 }
978 988
979 std::list<std::string> resources; 989 std::list<std::string> resources;
980 ResourceFinder finder(context); 990 context.Apply(resources, query, limit);
981 finder.Apply(resources, query);
982 AnswerListOfResources(call.GetOutput(), context.GetIndex(), resources, query.GetLevel(), expand); 991 AnswerListOfResources(call.GetOutput(), context.GetIndex(), resources, query.GetLevel(), expand);
983 } 992 }
984 else 993 else
985 { 994 {
986 throw OrthancException(ErrorCode_BadRequest); 995 throw OrthancException(ErrorCode_BadRequest);