Mercurial > hg > orthanc-stone
annotate OrthancStone/Sources/Toolbox/OrthancDatasets/OrthancNativeDataset.cpp @ 2176:c5f94c10cd61
cppcheck
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 22 Oct 2024 21:59:25 +0200 |
parents | 2410a171ebfb |
children |
rev | line source |
---|---|
2174
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Stone of Orthanc |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * This program is free software: you can redistribute it and/or |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * modify it under the terms of the GNU Lesser General Public License |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * as published by the Free Software Foundation, either version 3 of |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * the License, or (at your option) any later version. |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, but |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * WITHOUT ANY WARRANTY; without even the implied warranty of |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * Lesser General Public License for more details. |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * You should have received a copy of the GNU Lesser General Public |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 * License along with this program. If not, see |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 * <http://www.gnu.org/licenses/>. |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 **/ |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
23 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 #include "OrthancNativeDataset.h" |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 #include <OrthancException.h> |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 static const char* const NAME = "Name"; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 static const char* const TYPE = "Type"; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 static const char* const VALUE = "Value"; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 namespace OrthancStone |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 const Json::Value* OrthancNativeDataset::LookupValue(std::string& type, |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 const Orthanc::DicomPath& path) const |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 if (path.IsPrefixUniversal(0)) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
41 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
43 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
44 const Orthanc::DicomValue* rootSequence = dicom_->TestAndGetValue(path.GetPrefixTag(0)); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 if (rootSequence == NULL || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 !rootSequence->IsSequence()) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 return NULL; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
50 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
51 Json::ArrayIndex index = path.GetPrefixIndex(0); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
52 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
53 if (rootSequence->GetSequenceContent().type() != Json::arrayValue) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
54 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
55 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
56 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
57 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
58 if (index >= rootSequence->GetSequenceContent().size()) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
59 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
60 return NULL; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
61 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
62 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
63 const Json::Value* current = &(rootSequence->GetSequenceContent() [index]); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
64 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
65 for (size_t i = 1; i < path.GetPrefixLength(); i++) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
66 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
67 if (path.IsPrefixUniversal(i)) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
68 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
69 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
70 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
71 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
72 index = path.GetPrefixIndex(i); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
73 std::string tag = path.GetPrefixTag(i).Format(); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
74 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
75 if (current->type() != Json::objectValue) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
76 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
77 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
78 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
79 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
80 if (!current->isMember(tag)) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
81 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
82 return NULL; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
83 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
84 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
85 if ((*current) [tag].type() != Json::objectValue || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
86 !(*current) [tag].isMember(NAME) || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
87 !(*current) [tag].isMember(TYPE) || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
88 !(*current) [tag].isMember(VALUE) || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
89 (*current) [tag][NAME].type() != Json::stringValue || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
90 (*current) [tag][TYPE].type() != Json::stringValue) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
91 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
92 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
93 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
94 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
95 if ((*current) [tag][TYPE].asString() != "Sequence" || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
96 (*current) [tag][VALUE].type() != Json::arrayValue || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
97 index >= (*current) [tag][VALUE].size()) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
98 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
99 return NULL; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
100 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
101 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
102 current = &(*current) [tag][VALUE][index]; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
103 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
104 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
105 std::string tag = path.GetFinalTag().Format(); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
106 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
107 if (current->type() != Json::objectValue) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
108 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
109 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
110 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
111 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
112 if (!current->isMember(tag)) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
113 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
114 return NULL; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
115 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
116 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
117 if ((*current) [tag].type() != Json::objectValue || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
118 !(*current) [tag].isMember(NAME) || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
119 !(*current) [tag].isMember(TYPE) || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
120 !(*current) [tag].isMember(VALUE) || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
121 (*current) [tag][NAME].type() != Json::stringValue || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
122 (*current) [tag][TYPE].type() != Json::stringValue) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
123 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
124 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
125 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
126 else |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
127 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
128 type = (*current) [tag][TYPE].asString(); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
129 return &((*current) [tag][VALUE]); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
130 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
131 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
132 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
133 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
134 OrthancNativeDataset::OrthancNativeDataset(const Json::Value& dicom) : |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
135 dicom_(new Orthanc::DicomMap) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
136 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
137 dicom_->FromDicomAsJson(dicom, false, true /* parse sequences */); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
138 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
139 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
140 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
141 bool OrthancNativeDataset::GetStringValue(std::string& result, |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
142 const Orthanc::DicomPath& path) const |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
143 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
144 if (path.GetPrefixLength() == 0) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
145 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
146 return dicom_->LookupStringValue(result, path.GetFinalTag(), false); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
147 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
148 else |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
149 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
150 std::string type; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
151 const Json::Value* value = LookupValue(type, path); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
152 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
153 if (value == NULL) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
154 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
155 return false; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
156 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
157 else if (type == "String" && |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
158 value->type() == Json::stringValue) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
159 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
160 result = value->asString(); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
161 return true; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
162 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
163 else |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
164 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
165 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
166 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
167 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
168 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
169 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
170 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
171 bool OrthancNativeDataset::GetSequenceSize(size_t& size, |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
172 const Orthanc::DicomPath& path) const |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
173 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
174 if (path.GetPrefixLength() == 0) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
175 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
176 const Orthanc::DicomValue* value = dicom_->TestAndGetValue(path.GetFinalTag()); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
177 if (value == NULL || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
178 !value->IsSequence()) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
179 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
180 return false; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
181 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
182 else if (value->GetSequenceContent().type() != Json::arrayValue) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
183 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
184 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
185 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
186 else |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
187 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
188 size = value->GetSequenceContent().size(); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
189 return true; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
190 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
191 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
192 else |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
193 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
194 std::string type; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
195 const Json::Value* value = LookupValue(type, path); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
196 |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
197 if (value == NULL || |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
198 type != "Sequence") |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
199 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
200 return false; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
201 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
202 else if (value->type() != Json::arrayValue) |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
203 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
204 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
205 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
206 else |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
207 { |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
208 size = value->size(); |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
209 return true; |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
210 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
211 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
212 } |
2410a171ebfb
refactoring using DicomWebDataset and OrthancNativeDataset
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
213 } |