comparison Core/DicomParsing/DicomModification.h @ 2382:7284093111b0

big reorganization to cleanly separate framework vs. server
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 29 Aug 2017 21:17:35 +0200
parents OrthancServer/DicomModification.h@f5fc61337bdf
children 878b59270859
comparison
equal deleted inserted replaced
2381:b8969010b534 2382:7284093111b0
1 /**
2 * Orthanc - A Lightweight, RESTful DICOM Store
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium
5 * Copyright (C) 2017 Osimis, Belgium
6 *
7 * This program is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation, either version 3 of the
10 * License, or (at your option) any later version.
11 *
12 * In addition, as a special exception, the copyright holders of this
13 * program give permission to link the code of its release with the
14 * OpenSSL project's "OpenSSL" library (or with modified versions of it
15 * that use the same license as the "OpenSSL" library), and distribute
16 * the linked executables. You must obey the GNU General Public License
17 * in all respects for all of the code used other than "OpenSSL". If you
18 * modify file(s) with this exception, you may extend this exception to
19 * your version of the file(s), but you are not obligated to do so. If
20 * you do not wish to do so, delete this exception statement from your
21 * version. If you delete this exception statement from all source files
22 * in the program, then also delete it here.
23 *
24 * This program is distributed in the hope that it will be useful, but
25 * WITHOUT ANY WARRANTY; without even the implied warranty of
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
27 * General Public License for more details.
28 *
29 * You should have received a copy of the GNU General Public License
30 * along with this program. If not, see <http://www.gnu.org/licenses/>.
31 **/
32
33
34 #pragma once
35
36 #include "ParsedDicomFile.h"
37
38 namespace Orthanc
39 {
40 class DicomModification : public boost::noncopyable
41 {
42 /**
43 * Process:
44 * (1) Remove private tags
45 * (2) Remove tags specified by the user
46 * (3) Replace tags
47 **/
48
49 private:
50 typedef std::set<DicomTag> SetOfTags;
51 typedef std::map<DicomTag, Json::Value*> Replacements;
52 typedef std::map< std::pair<ResourceType, std::string>, std::string> UidMap;
53
54 SetOfTags removals_;
55 SetOfTags clearings_;
56 Replacements replacements_;
57 bool removePrivateTags_;
58 ResourceType level_;
59 UidMap uidMap_;
60 SetOfTags privateTagsToKeep_;
61 bool allowManualIdentifiers_;
62 bool keepStudyInstanceUid_;
63 bool keepSeriesInstanceUid_;
64
65 void MapDicomIdentifier(ParsedDicomFile& dicom,
66 ResourceType level);
67
68 void MarkNotOrthancAnonymization();
69
70 void ClearReplacements();
71
72 bool CancelReplacement(const DicomTag& tag);
73
74 void ReplaceInternal(const DicomTag& tag,
75 const Json::Value& value);
76
77 void SetupAnonymization2008();
78
79 void SetupAnonymization2017c();
80
81 public:
82 DicomModification();
83
84 ~DicomModification();
85
86 void Keep(const DicomTag& tag);
87
88 void Remove(const DicomTag& tag);
89
90 // Replace the DICOM tag as a NULL/empty value (e.g. for anonymization)
91 void Clear(const DicomTag& tag);
92
93 bool IsRemoved(const DicomTag& tag) const;
94
95 bool IsCleared(const DicomTag& tag) const;
96
97 // "safeForAnonymization" tells Orthanc that this replacement does
98 // not break the anonymization process it implements (for internal use only)
99 void Replace(const DicomTag& tag,
100 const Json::Value& value, // Encoded using UTF-8
101 bool safeForAnonymization);
102
103 bool IsReplaced(const DicomTag& tag) const;
104
105 const Json::Value& GetReplacement(const DicomTag& tag) const;
106
107 std::string GetReplacementAsString(const DicomTag& tag) const;
108
109 void SetRemovePrivateTags(bool removed);
110
111 bool ArePrivateTagsRemoved() const
112 {
113 return removePrivateTags_;
114 }
115
116 void SetLevel(ResourceType level);
117
118 ResourceType GetLevel() const
119 {
120 return level_;
121 }
122
123 void SetupAnonymization(DicomVersion version);
124
125 void Apply(ParsedDicomFile& toModify);
126
127 void SetAllowManualIdentifiers(bool check)
128 {
129 allowManualIdentifiers_ = check;
130 }
131
132 bool AreAllowManualIdentifiers() const
133 {
134 return allowManualIdentifiers_;
135 }
136 };
137 }