Mercurial > hg > orthanc-transfers
annotate Framework/StatefulOrthancJob.h @ 77:1e396fb509ca default
updated copyright, as Orthanc Team now replaces Osimis
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 30 May 2024 22:44:10 +0200 |
parents | 44a0430d7899 |
children |
rev | line source |
---|---|
0 | 1 /** |
2 * Transfers accelerator plugin for Orthanc | |
77
1e396fb509ca
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
33
diff
changeset
|
3 * Copyright (C) 2018-2023 Osimis S.A., Belgium |
1e396fb509ca
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
33
diff
changeset
|
4 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium |
1e396fb509ca
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
33
diff
changeset
|
5 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
0 | 6 * |
7 * This program is free software: you can redistribute it and/or | |
8 * modify it under the terms of the GNU Affero General Public License | |
9 * as published by the Free Software Foundation, either version 3 of | |
10 * the License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Affero General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Affero General Public License | |
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 **/ | |
20 | |
21 | |
22 #pragma once | |
23 | |
22 | 24 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" |
0 | 25 |
25
dfc43678aecb
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
26 #include <Compatibility.h> // For std::unique_ptr |
dfc43678aecb
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
27 |
0 | 28 #include <memory> |
29 | |
30 | |
31 namespace OrthancPlugins | |
32 { | |
33 class StatefulOrthancJob : public OrthancJob | |
34 { | |
35 protected: | |
36 class IState; | |
37 | |
38 | |
39 class JobInfo : public boost::noncopyable | |
40 { | |
41 private: | |
42 StatefulOrthancJob& job_; | |
43 bool updated_; | |
44 Json::Value content_; | |
45 | |
46 public: | |
12 | 47 explicit JobInfo(StatefulOrthancJob& job); |
0 | 48 |
49 void SetProgress(float progress) | |
50 { | |
51 job_.UpdateProgress(progress); | |
52 } | |
53 | |
54 void SetContent(const std::string& key, | |
55 const Json::Value& value); | |
56 | |
57 void Update(); | |
58 }; | |
59 | |
60 | |
61 | |
62 class StateUpdate : public boost::noncopyable | |
63 { | |
64 private: | |
65 OrthancPluginJobStepStatus status_; | |
25
dfc43678aecb
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
66 std::unique_ptr<IState> state_; |
0 | 67 |
12 | 68 explicit StateUpdate(OrthancPluginJobStepStatus status) : |
0 | 69 status_(status) |
70 { | |
71 } | |
72 | |
12 | 73 explicit StateUpdate(IState* state); |
0 | 74 |
75 public: | |
76 static StateUpdate* Next(IState* state) // Takes ownsership | |
77 { | |
78 return new StateUpdate(state); | |
79 } | |
80 | |
81 static StateUpdate* Continue() | |
82 { | |
83 return new StateUpdate(OrthancPluginJobStepStatus_Continue); | |
84 } | |
85 | |
86 static StateUpdate* Success() | |
87 { | |
88 return new StateUpdate(OrthancPluginJobStepStatus_Success); | |
89 } | |
90 | |
91 static StateUpdate* Failure() | |
92 { | |
93 return new StateUpdate(OrthancPluginJobStepStatus_Failure); | |
94 } | |
95 | |
96 OrthancPluginJobStepStatus GetStatus() const | |
97 { | |
98 return status_; | |
99 } | |
100 | |
101 bool IsOtherState() const | |
102 { | |
103 return state_.get() != NULL; | |
104 } | |
105 | |
106 IState* ReleaseOtherState(); | |
107 }; | |
108 | |
109 | |
110 class IState : public boost::noncopyable | |
111 { | |
112 public: | |
113 virtual ~IState() | |
114 { | |
115 } | |
116 | |
117 virtual StateUpdate* Step() = 0; | |
118 | |
119 virtual void Stop(OrthancPluginJobStopReason reason) = 0; | |
120 }; | |
121 | |
122 | |
123 virtual StateUpdate* CreateInitialState(JobInfo& info) = 0; | |
124 | |
125 | |
126 private: | |
25
dfc43678aecb
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
127 std::unique_ptr<IState> state_; |
0 | 128 JobInfo info_; |
129 | |
130 | |
131 public: | |
132 StatefulOrthancJob(const std::string& jobType); | |
133 | |
134 virtual OrthancPluginJobStepStatus Step(); | |
135 | |
136 virtual void Stop(OrthancPluginJobStopReason reason); | |
137 | |
138 virtual void Reset(); | |
139 }; | |
140 } |