annotate Sources/Plugin.cpp @ 4:c34ecc350b32

upgraded the node docker image
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 15 Jun 2023 22:21:46 +0200
parents fdb8c6c420d0
children 8c1fe0ca24f5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * SPDX-FileCopyrightText: 2023 Sebastien Jodogne, UCLouvain, Belgium
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * SPDX-License-Identifier: GPL-3.0-or-later
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 */
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 /**
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * OHIF plugin for Orthanc
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * Copyright (C) 2023 Sebastien Jodogne, UCLouvain, Belgium
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 *
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * This program is free software: you can redistribute it and/or
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * modify it under the terms of the GNU General Public License as
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * published by the Free Software Foundation, either version 3 of the
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * License, or (at your option) any later version.
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 *
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful, but
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * General Public License for more details.
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 *
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 **/
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h"
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
27 #include <DicomFormat/DicomMap.h>
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 #include <Logging.h>
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
29 #include <SerializationToolbox.h>
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 #include <SystemToolbox.h>
2
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
31 #include <Toolbox.h>
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
32 #include <Compression/GzipCompressor.h>
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 #include <EmbeddedResources.h>
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 #include <boost/thread/shared_mutex.hpp>
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
38
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
39 // Reference: https://v3-docs.ohif.org/configuration/dataSources/dicom-json
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
40
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
41 enum DataType
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
42 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
43 DataType_String,
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
44 DataType_Integer,
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
45 DataType_Float,
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
46 DataType_ListOfFloats,
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
47 DataType_ListOfStrings,
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
48 DataType_None
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
49 };
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
50
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
51 class TagInformation
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
52 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
53 private:
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
54 DataType type_;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
55 std::string name_;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
56
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
57 public:
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
58 TagInformation() :
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
59 type_(DataType_None)
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
60 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
61 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
62
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
63 TagInformation(DataType type,
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
64 const std::string& name) :
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
65 type_(type),
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
66 name_(name)
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
67 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
68 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
69
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
70 DataType GetType() const
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
71 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
72 return type_;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
73 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
74
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
75 const std::string& GetName() const
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
76 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
77 return name_;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
78 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
79
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
80 bool operator== (const TagInformation& other) const
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
81 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
82 return (type_ == other.type_ &&
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
83 name_ == other.name_);
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
84 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
85 };
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
86
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
87 typedef std::map<Orthanc::DicomTag, TagInformation> TagsDictionary;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
88
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
89 static TagsDictionary ohifStudyTags_, ohifSeriesTags_, ohifInstanceTags_, allTags_;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
90
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
91 static void InitializeOhifTags()
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
92 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
93 ohifStudyTags_[Orthanc::DICOM_TAG_STUDY_INSTANCE_UID] = TagInformation(DataType_String, "StudyInstanceUID");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
94 ohifStudyTags_[Orthanc::DICOM_TAG_STUDY_DATE] = TagInformation(DataType_String, "StudyDate");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
95 ohifStudyTags_[Orthanc::DICOM_TAG_STUDY_TIME] = TagInformation(DataType_String, "StudyTime");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
96 ohifStudyTags_[Orthanc::DICOM_TAG_PATIENT_NAME] = TagInformation(DataType_String, "PatientName");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
97 ohifStudyTags_[Orthanc::DICOM_TAG_PATIENT_ID] = TagInformation(DataType_String, "PatientID");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
98 ohifStudyTags_[Orthanc::DICOM_TAG_ACCESSION_NUMBER] = TagInformation(DataType_String, "AccessionNumber");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
99 ohifStudyTags_[Orthanc::DicomTag(0x0010, 0x1010)] = TagInformation(DataType_String, "PatientAge");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
100 ohifStudyTags_[Orthanc::DICOM_TAG_PATIENT_SEX] = TagInformation(DataType_String, "PatientSex");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
101
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
102 ohifSeriesTags_[Orthanc::DICOM_TAG_SERIES_INSTANCE_UID] = TagInformation(DataType_String, "SeriesInstanceUID");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
103 ohifSeriesTags_[Orthanc::DICOM_TAG_SERIES_NUMBER] = TagInformation(DataType_Integer, "SeriesNumber");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
104 ohifSeriesTags_[Orthanc::DICOM_TAG_MODALITY] = TagInformation(DataType_String, "Modality");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
105 ohifSeriesTags_[Orthanc::DICOM_TAG_SLICE_THICKNESS] = TagInformation(DataType_Float, "SliceThickness");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
106
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
107 ohifInstanceTags_[Orthanc::DICOM_TAG_COLUMNS] = TagInformation(DataType_Integer, "Columns");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
108 ohifInstanceTags_[Orthanc::DICOM_TAG_ROWS] = TagInformation(DataType_Integer, "Rows");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
109 ohifInstanceTags_[Orthanc::DICOM_TAG_INSTANCE_NUMBER] = TagInformation(DataType_Integer, "InstanceNumber");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
110 ohifInstanceTags_[Orthanc::DICOM_TAG_SOP_CLASS_UID] = TagInformation(DataType_String, "SOPClassUID");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
111 ohifInstanceTags_[Orthanc::DICOM_TAG_PHOTOMETRIC_INTERPRETATION] = TagInformation(DataType_String, "PhotometricInterpretation");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
112 ohifInstanceTags_[Orthanc::DICOM_TAG_BITS_ALLOCATED] = TagInformation(DataType_Integer, "BitsAllocated");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
113 ohifInstanceTags_[Orthanc::DICOM_TAG_BITS_STORED] = TagInformation(DataType_Integer, "BitsStored");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
114 ohifInstanceTags_[Orthanc::DICOM_TAG_PIXEL_REPRESENTATION] = TagInformation(DataType_Integer, "PixelRepresentation");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
115 ohifInstanceTags_[Orthanc::DICOM_TAG_SAMPLES_PER_PIXEL] = TagInformation(DataType_Integer, "SamplesPerPixel");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
116 ohifInstanceTags_[Orthanc::DICOM_TAG_PIXEL_SPACING] = TagInformation(DataType_ListOfFloats, "PixelSpacing");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
117 ohifInstanceTags_[Orthanc::DICOM_TAG_HIGH_BIT] = TagInformation(DataType_Integer, "HighBit");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
118 ohifInstanceTags_[Orthanc::DICOM_TAG_IMAGE_ORIENTATION_PATIENT] = TagInformation(DataType_ListOfFloats, "ImageOrientationPatient");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
119 ohifInstanceTags_[Orthanc::DICOM_TAG_IMAGE_POSITION_PATIENT] = TagInformation(DataType_ListOfFloats, "ImagePositionPatient");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
120 ohifInstanceTags_[Orthanc::DICOM_TAG_FRAME_OF_REFERENCE_UID] = TagInformation(DataType_String, "FrameOfReferenceUID");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
121 ohifInstanceTags_[Orthanc::DicomTag(0x0008, 0x0008)] = TagInformation(DataType_ListOfStrings, "ImageType");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
122 ohifInstanceTags_[Orthanc::DICOM_TAG_MODALITY] = TagInformation(DataType_String, "Modality");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
123 ohifInstanceTags_[Orthanc::DICOM_TAG_SOP_INSTANCE_UID] = TagInformation(DataType_String, "SOPInstanceUID");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
124 ohifInstanceTags_[Orthanc::DICOM_TAG_SERIES_INSTANCE_UID] = TagInformation(DataType_String, "SeriesInstanceUID");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
125 ohifInstanceTags_[Orthanc::DICOM_TAG_STUDY_INSTANCE_UID] = TagInformation(DataType_String, "StudyInstanceUID");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
126 ohifInstanceTags_[Orthanc::DICOM_TAG_WINDOW_CENTER] = TagInformation(DataType_Float, "WindowCenter");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
127 ohifInstanceTags_[Orthanc::DICOM_TAG_WINDOW_WIDTH] = TagInformation(DataType_Float, "WindowWidth");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
128 ohifInstanceTags_[Orthanc::DICOM_TAG_SERIES_DATE] = TagInformation(DataType_String, "SeriesDate");
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
129
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
130 for (TagsDictionary::const_iterator it = ohifStudyTags_.begin(); it != ohifStudyTags_.end(); ++it)
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
131 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
132 assert(allTags_.find(it->first) == allTags_.end() ||
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
133 allTags_[it->first] == it->second);
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
134 allTags_[it->first] = it->second;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
135 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
136
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
137 for (TagsDictionary::const_iterator it = ohifSeriesTags_.begin(); it != ohifSeriesTags_.end(); ++it)
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
138 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
139 assert(allTags_.find(it->first) == allTags_.end() ||
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
140 allTags_[it->first] == it->second);
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
141 allTags_[it->first] = it->second;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
142 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
143
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
144 for (TagsDictionary::const_iterator it = ohifInstanceTags_.begin(); it != ohifInstanceTags_.end(); ++it)
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
145 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
146 assert(allTags_.find(it->first) == allTags_.end() ||
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
147 allTags_[it->first] == it->second);
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
148 allTags_[it->first] = it->second;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
149 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
150 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
151
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
152
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153 // Forward declaration
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 void ReadStaticAsset(std::string& target,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 const std::string& path);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158 /**
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 * As the OHIF static assets are gzipped by the "EmbedStaticAssets.py"
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160 * script, we use a cache to maintain the uncompressed assets in order
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
161 * to avoid multiple gzip decodings.
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162 **/
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163 class ResourcesCache : public boost::noncopyable
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165 private:
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 typedef std::map<std::string, std::string*> Content;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 boost::shared_mutex mutex_;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169 Content content_;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 public:
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172 ~ResourcesCache()
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 for (Content::iterator it = content_.begin(); it != content_.end(); ++it)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 assert(it->second != NULL);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177 delete it->second;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 void Answer(OrthancPluginContext* context,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 OrthancPluginRestOutput* output,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183 const std::string& path)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 const std::string mime = Orthanc::EnumerationToString(Orthanc::SystemToolbox::AutodetectMimeType(path));
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188 // Check whether the cache already contains the resource
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189 boost::shared_lock<boost::shared_mutex> lock(mutex_);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
191 Content::const_iterator found = content_.find(path);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
192
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193 if (found != content_.end())
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
194 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
195 assert(found->second != NULL);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
196 OrthancPluginAnswerBuffer(context, output, found->second->c_str(), found->second->size(), mime.c_str());
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
197 return;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
198 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
200
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
201 // This resource has not been cached yet
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
203 std::unique_ptr<std::string> item(new std::string);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
204 ReadStaticAsset(*item, path);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 OrthancPluginAnswerBuffer(context, output, item->c_str(), item->size(), mime.c_str());
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
206
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
207 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
208 // Store the resource into the cache
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209 boost::unique_lock<boost::shared_mutex> lock(mutex_);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
210
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
211 if (content_.find(path) == content_.end())
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
212 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
213 content_[path] = item.release();
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
214 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217 };
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
220 static void GetOhifDicomTags(Json::Value& target,
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
221 const std::string& instanceId)
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
222 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
223 Json::Value source;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
224 if (!OrthancPlugins::RestApiGet(source, "/instances/" + instanceId + "/tags?short", false))
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
225 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
226 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource);
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
227 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
228
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
229 if (source.type() != Json::objectValue)
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
230 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
231 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
232 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
233
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
234 for (TagsDictionary::const_iterator it = allTags_.begin(); it != allTags_.end(); ++it)
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
235 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
236 const std::string tag = it->first.Format();
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
237
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
238 if (source.isMember(tag))
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
239 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
240 const Json::Value& value = source[tag];
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
241
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
242 /**
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
243 * The cases below derive from "Toolbox::SimplifyDicomAsJson()"
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
244 * with "DicomToJsonFormat_Short", which is invoked by the REST
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
245 * API call to "/instances/.../tags?short".
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
246 **/
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
247
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
248 switch (value.type())
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
249 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
250 case Json::nullValue:
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
251 break;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
252
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
253 case Json::arrayValue:
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
254 // This should never happen, as this would correspond to a sequence
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
255 break;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
256
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
257 case Json::stringValue:
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
258 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
259 switch (it->second.GetType())
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
260 {
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
261 case DataType_String:
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
262 target[tag] = value;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
263 break;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
264
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
265 case DataType_Integer:
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
266 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
267 int32_t v;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
268 if (Orthanc::SerializationToolbox::ParseInteger32(v, value.asString()))
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
269 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
270 target[tag] = v;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
271 }
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
272 break;
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
273 }
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
274
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
275 case DataType_Float:
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
276 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
277 float v;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
278 if (Orthanc::SerializationToolbox::ParseFloat(v, value.asString()))
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
279 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
280 target[tag] = v;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
281 }
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
282 break;
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
283 }
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
284
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
285 case DataType_ListOfStrings:
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
286 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
287 std::vector<std::string> tokens;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
288 Orthanc::Toolbox::TokenizeString(tokens, value.asString(), '\\');
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
289 target[tag] = Json::arrayValue;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
290 for (size_t i = 0; i < tokens.size(); i++)
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
291 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
292 target[tag].append(tokens[i]);
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
293 }
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
294 break;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
295 }
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
296
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
297 case DataType_ListOfFloats:
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
298 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
299 std::vector<std::string> tokens;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
300 Orthanc::Toolbox::TokenizeString(tokens, value.asString(), '\\');
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
301 target[tag] = Json::arrayValue;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
302 for (size_t i = 0; i < tokens.size(); i++)
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
303 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
304 float v;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
305 if (Orthanc::SerializationToolbox::ParseFloat(v, tokens[i]))
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
306 {
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
307 target[tag].append(v);
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
308 }
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
309 }
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
310 break;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
311 }
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
312
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
313 default:
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
314 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
315 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
316 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
317
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
318 default:
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
319 // This should never happen
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
320 break;
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
321 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
322 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
323 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
324 }
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
325
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
326
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
327 static ResourcesCache cache_;
2
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
328 static std::string routerBasename_;
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
329
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330 void ServeFile(OrthancPluginRestOutput* output,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
331 const char* url,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
332 const OrthancPluginHttpRequest* request)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
333 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
334 OrthancPluginContext* context = OrthancPlugins::GetGlobalContext();
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
335
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
336 // The next 3 HTTP headers are required to enable SharedArrayBuffer
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
337 // (https://web.dev/coop-coep/)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
338 OrthancPluginSetHttpHeader(context, output, "Cross-Origin-Embedder-Policy", "require-corp");
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
339 OrthancPluginSetHttpHeader(context, output, "Cross-Origin-Opener-Policy", "same-origin");
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
340 OrthancPluginSetHttpHeader(context, output, "Cross-Origin-Resource-Policy", "same-origin");
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
341
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
342 std::string uri = request->groups[0];
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
343
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
344 if (uri == "app-config.js")
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
345 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
346 std::string system, user;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
347 Orthanc::EmbeddedResources::GetFileResource(system, Orthanc::EmbeddedResources::APP_CONFIG_SYSTEM);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
348 Orthanc::EmbeddedResources::GetFileResource(user, Orthanc::EmbeddedResources::APP_CONFIG_USER);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
349
2
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
350 std::map<std::string, std::string> dictionary;
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
351 dictionary["ROUTER_BASENAME"] = routerBasename_;
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
352
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
353 system = Orthanc::Toolbox::SubstituteVariables(system, dictionary);
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
354
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
355 std::string s = (user + "\n" + system);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
356 OrthancPluginAnswerBuffer(context, output, s.c_str(), s.size(), "application/json");
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
357 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
358 else if (uri == "viewer")
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
359 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
360 cache_.Answer(context, output, "index.html");
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
361 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
362 else
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
363 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
364 cache_.Answer(context, output, uri);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
365 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
366 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
367
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
368
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
369 OrthancPluginErrorCode OnChangeCallback(OrthancPluginChangeType changeType,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
370 OrthancPluginResourceType resourceType,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
371 const char* resourceId)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
372 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
373 try
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
374 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
375 if (changeType == OrthancPluginChangeType_OrthancStarted)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
376 {
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
377 /*{
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
378 Json::Value v;
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
379 GetOhifDicomTags(v, "54bfd747-407e46b1-ef106fdd-dc19e482-ff8dbe02");
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
380 std::cout << v.toStyledString();
4
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
381 std::string s;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
382 Orthanc::Toolbox::WriteFastJson(s, v);
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
383 std::cout << s.size() << std::endl;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
384
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
385 Orthanc::GzipCompressor c;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
386 std::string ss;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
387 Orthanc::IBufferCompressor::Compress(ss, c, s);
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
388 std::cout << ss.size() << std::endl;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
389
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
390 std::string sss;
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
391 Orthanc::Toolbox::EncodeBase64(sss, ss);
c34ecc350b32 upgraded the node docker image
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3
diff changeset
392 std::cout << sss.size() << std::endl;
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
393 }*/
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
394
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
395 Json::Value info;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
396 if (!OrthancPlugins::RestApiGet(info, "/plugins/dicom-web", false))
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
397 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
398 throw Orthanc::OrthancException(
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
399 Orthanc::ErrorCode_InternalError,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
400 "The OHIF plugin requires the DICOMweb plugin to be installed");
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
401 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
402
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
403 if (info.type() != Json::objectValue ||
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
404 !info.isMember("ID") ||
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
405 !info.isMember("Version") ||
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
406 info["ID"].type() != Json::stringValue ||
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
407 info["Version"].type() != Json::stringValue ||
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
408 info["ID"].asString() != "dicom-web")
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
409 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
411 "The DICOMweb plugin is not properly installed");
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
412 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
413 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
414 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
415 catch (Orthanc::OrthancException& e)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
416 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
417 LOG(ERROR) << "Exception: " << e.What();
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
418 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
419 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
420
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
421 return OrthancPluginErrorCode_Success;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
422 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
423
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
424
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
425 extern "C"
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
426 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
427 ORTHANC_PLUGINS_API int32_t OrthancPluginInitialize(OrthancPluginContext* context)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
428 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
429 OrthancPlugins::SetGlobalContext(context);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
430
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
431 /* Check the version of the Orthanc core */
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
432 if (OrthancPluginCheckVersion(context) == 0)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
433 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
434 char info[1024];
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
435 sprintf(info, "Your version of Orthanc (%s) must be above %d.%d.%d to run this plugin",
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
436 context->orthancVersion,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
437 ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
438 ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER,
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
439 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
440 OrthancPluginLogError(context, info);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
441 return -1;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
442 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
443
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
444 #if ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(1, 7, 2)
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
445 Orthanc::Logging::InitializePluginContext(context);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
446 #else
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
447 Orthanc::Logging::Initialize(context);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
448 #endif
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
449
3
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
450 InitializeOhifTags();
fdb8c6c420d0 skeleton for optimization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2
diff changeset
451
2
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
452 OrthancPlugins::OrthancConfiguration configuration;
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
453
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
454 {
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
455 OrthancPlugins::OrthancConfiguration globalConfiguration;
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
456 globalConfiguration.GetSection(configuration, "OHIF");
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
457 }
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
458
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
459 routerBasename_ = configuration.GetStringValue("RouterBasename", "/ohif");
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
460
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
461 OrthancPluginSetDescription(context, "OHIF plugin for Orthanc.");
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
462
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
463 OrthancPlugins::RegisterRestCallback<ServeFile>("/ohif/(.*)", true);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
464
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
465 OrthancPluginRegisterOnChangeCallback(context, OnChangeCallback);
2
cbc4be362700 added configuration option "RouterBasename"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
466
0
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
467 // Extend the default Orthanc Explorer with custom JavaScript for OHIF
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
468 std::string explorer;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
469 Orthanc::EmbeddedResources::GetFileResource(explorer, Orthanc::EmbeddedResources::ORTHANC_EXPLORER);
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
470 OrthancPluginExtendOrthancExplorer(context, explorer.c_str());
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
471
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
472 return 0;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
473 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
474
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
475
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
476 ORTHANC_PLUGINS_API void OrthancPluginFinalize()
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
477 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
478 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
479
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
480
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
481 ORTHANC_PLUGINS_API const char* OrthancPluginGetName()
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
482 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
483 return "ohif";
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
484 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
485
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
486
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
487 ORTHANC_PLUGINS_API const char* OrthancPluginGetVersion()
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
488 {
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
489 return ORTHANC_OHIF_VERSION;
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
490 }
39585ba26f20 initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
491 }