ImagingTools Core SDK
TDelegatedSupplierCompBase.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// ACF includes
6#include <imod/IModel.h>
7#include <imod/CModelUpdateBridge.h>
8#include <iinsp/TSupplierCompWrap.h>
9
10
11namespace imtbase
12{
13
14
18template <class ProviderInterface, class ObjectInterface>
20 public ilog::CLoggerComponentBase,
21 virtual public ProviderInterface,
22 virtual public iinsp::ISupplier
23{
24public:
25 typedef ilog::CLoggerComponentBase BaseClass;
26 typedef ProviderInterface ProviderInterfaceType;
27 typedef ObjectInterface ObjectInterfaceType;
28
29 I_BEGIN_BASE_COMPONENT(TDelegatedSupplierCompBase);
30 I_REGISTER_INTERFACE(iinsp::ISupplier);
31 I_REGISTER_INTERFACE(ProviderInterfaceType);
32 I_TASSIGN(m_objectCompPtr, "Object", "Object used if no slave supplier is provided", false, "Object");
33 I_ASSIGN_TO(m_objectModelCompPtr, m_objectCompPtr, false);
34 I_TASSIGN(m_objectProviderCompPtr, "SlaveSupplier", "Slave supplier where all calls will be delegated", false, "SlaveSupplier");
35 I_ASSIGN_TO(m_objectSupplierCompPtr, m_objectProviderCompPtr, false);
36 I_ASSIGN_TO(m_objectProviderModelCompPtr, m_objectProviderCompPtr, false);
37 I_END_COMPONENT;
38
40
41 // reimplemented (iinsp::ISupplier)
42 virtual WorkStatus GetWorkStatus() const override;
43 virtual imod::IModel* GetWorkStatusModel() const override;
44 virtual void InvalidateSupplier() override;
45 virtual void EnsureWorkInitialized() override;
46 virtual void EnsureWorkFinished() override;
47 virtual void ClearWorkResults() override;
48 virtual const ilog::IMessageContainer* GetWorkMessages(MessageContainerType containerType) const override;
49 virtual iprm::IParamsSet* GetModelParametersSet() const override;
50
51protected:
52 // reimplemented (icomp::CComponentBase)
53 virtual void OnComponentCreated() override;
54 virtual void OnComponentDestroyed() override;
55
56protected:
57 I_TREF(ObjectInterfaceType, m_objectCompPtr);
58 I_REF(imod::IModel, m_objectModelCompPtr);
59
60 I_TREF(ProviderInterface, m_objectProviderCompPtr);
61 I_REF(iinsp::ISupplier, m_objectSupplierCompPtr);
62 I_REF(imod::IModel, m_objectProviderModelCompPtr);
63
64 imod::CModelUpdateBridge m_updateBridge;
65};
66
67
68template <class ProviderInterface, class ObjectInterface>
70 :m_updateBridge(this, imod::CModelUpdateBridge::UF_SOURCE)
71{
72}
73
74
75// reimplemented (iinsp::ISupplier)
76
77template <class ProviderInterface, class ObjectInterface>
78iinsp::ISupplier::WorkStatus TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::GetWorkStatus() const
79{
80 if (m_objectSupplierCompPtr.IsValid()){
81 return m_objectSupplierCompPtr->GetWorkStatus();
82 }
83
84 if (m_objectCompPtr.IsValid()){
85 return WS_OK;
86 }
87
88 return WS_FAILED;
89}
90
91
92template <class ProviderInterface, class ObjectInterface>
93imod::IModel* TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::GetWorkStatusModel() const
94{
95 if (m_objectSupplierCompPtr.IsValid()){
96 return m_objectSupplierCompPtr->GetWorkStatusModel();
97 }
98
99 return nullptr;
100}
101
102
103template <class ProviderInterface, class ObjectInterface>
104void TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::InvalidateSupplier()
105{
106 if (m_objectSupplierCompPtr.IsValid()){
107 m_objectSupplierCompPtr->InvalidateSupplier();
108 }
109}
110
111
112template <class ProviderInterface, class ObjectInterface>
113void TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::EnsureWorkInitialized()
114{
115 if (m_objectSupplierCompPtr.IsValid()){
116 m_objectSupplierCompPtr->EnsureWorkInitialized();
117 }
118}
119
120
121template <class ProviderInterface, class ObjectInterface>
122void TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::EnsureWorkFinished()
123{
124 if (m_objectSupplierCompPtr.IsValid()){
125 m_objectSupplierCompPtr->EnsureWorkFinished();
126 }
127}
128
129
130template <class ProviderInterface, class ObjectInterface>
131void TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::ClearWorkResults()
132{
133 if (m_objectSupplierCompPtr.IsValid()){
134 m_objectSupplierCompPtr->ClearWorkResults();
135 }
136}
137
138
139template <class ProviderInterface, class ObjectInterface>
140const ilog::IMessageContainer* TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::GetWorkMessages(MessageContainerType containerType) const
141{
142 if (m_objectSupplierCompPtr.IsValid()){
143 return m_objectSupplierCompPtr->GetWorkMessages(containerType);
144 }
145
146 return nullptr;
147}
148
149
150template <class ProviderInterface, class ObjectInterface>
151iprm::IParamsSet* TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::GetModelParametersSet() const
152{
153 if (m_objectSupplierCompPtr.IsValid()){
154 return m_objectSupplierCompPtr->GetModelParametersSet();
155 }
156
157 return nullptr;
158}
159
160
161// protected methods
162
163// reimplemented (icomp::CComponentBase)
164
165template <class ProviderInterface, class ObjectInterface>
166void TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::OnComponentCreated()
167{
168 BaseClass::OnComponentCreated();
169
170 if (m_objectProviderModelCompPtr.IsValid()){
171 m_objectProviderModelCompPtr->AttachObserver(&m_updateBridge);
172 }
173 else{
174 if (m_objectModelCompPtr.IsValid()){
175 m_objectModelCompPtr->AttachObserver(&m_updateBridge);
176 }
177 }
178}
179
180
181template <class ProviderInterface, class ObjectInterface>
182void TDelegatedSupplierCompBase<ProviderInterface, ObjectInterface>::OnComponentDestroyed()
183{
184 m_updateBridge.EnsureModelsDetached();
185
186 BaseClass::OnComponentDestroyed();
187}
188
189
190} // namespace imtbase
191
192