ImagingTools Core SDK
TAggergatedObjectCollectionWrap.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// Qt includes
6#include <QtCore/QByteArray>
7
8// ACF includes
9#include <istd/TSingleFactory.h>
10#include <istd/CChangeNotifier.h>
11#include <imod/TModelWrap.h>
12#include <imod/CModelUpdateBridge.h>
13#include <iprm/COptionsManager.h>
14#include <iser/IArchive.h>
15#include <iser/CArchiveTag.h>
16
17// ImtCore includes
18#include <imtbase/CObjectCollection.h>
19
20
21namespace imtbase
22{
23
24
28template <class BaseInterface, class ObjectImpl>
30 virtual public BaseInterface,
31 virtual public IObjectCollection,
32 virtual public iser::ISerializable
33{
34public:
36 const QByteArray& typeId,
37 const QString& typeName,
38 const QByteArray& collectionTagName);
40
41 void SetOperationFlags(int flags, const QByteArray& objectId = QByteArray());
42
43 // reimplemented (IObjectCollection)
44 virtual const IRevisionController* GetRevisionController() const override;
45 virtual const ICollectionDataController* GetDataController() const override;
46 virtual int GetOperationFlags(const QByteArray& objectId = QByteArray()) const override;
47 virtual QByteArray InsertNewObject(
48 const QByteArray& typeId,
49 const QString& name,
50 const QString& description,
51 const istd::IChangeable* defaultValuePtr = nullptr,
52 const QByteArray& proposedObjectId = QByteArray(),
53 const idoc::IDocumentMetaInfo* dataMetaInfoPtr = nullptr,
54 const idoc::IDocumentMetaInfo* collectionItemMetaInfoPtr = nullptr,
55 const IOperationContext* operationContextPtr = nullptr) override;
56 virtual bool RemoveElements(const Ids& elementIds, const IOperationContext* operationContextPtr = nullptr) override;
57 virtual bool RemoveElementSet(
58 const iprm::IParamsSet* selectionParamsPtr = nullptr,
59 const IOperationContext* operationContextPtr = nullptr) override;
60 virtual bool RestoreObjects(
61 const Ids& objectIds,
62 const IOperationContext* operationContextPtr = nullptr) override;
63 virtual bool RestoreObjectSet(
64 const iprm::IParamsSet* selectionParamsPtr = nullptr,
65 const IOperationContext* operationContextPtr = nullptr) override;
66 virtual const istd::IChangeable* GetObjectPtr(const QByteArray& objectId) const override;
67 virtual bool GetObjectData( const QByteArray& objectId, DataPtr& dataPtr, const iprm::IParamsSet* dataConfigurationPtr = nullptr) const override;
68 virtual bool SetObjectData( const QByteArray& objectId, const istd::IChangeable& object, CompatibilityMode mode = CM_WITHOUT_REFS, const IOperationContext* operationContextPtr = nullptr) override;
69 virtual IObjectCollectionUniquePtr CreateSubCollection(int offset, int count, const iprm::IParamsSet *selectionParamsPtr) const override;
70 virtual IObjectCollectionIterator* CreateObjectCollectionIterator(
71 const QByteArray& objectId = QByteArray(),
72 int offset = 0,
73 int count = -1,
74 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
75 // reimplemented (IObjectCollectionInfo)
76 virtual const iprm::IOptionsList* GetObjectTypesInfo() const override;
77 virtual Id GetObjectTypeId(const QByteArray& objectId) const override;
78 virtual idoc::MetaInfoPtr GetDataMetaInfo(const Id& objectId) const override;
79
80 // reimplemented (ICollectionInfo)
81 virtual int GetElementsCount(const iprm::IParamsSet* selectionParamPtr = nullptr, ilog::IMessageConsumer* logPtr = nullptr) const override;
82 virtual Ids GetElementIds(
83 int offset = 0,
84 int count = -1,
85 const iprm::IParamsSet* selectionParamsPtr = nullptr,
86 ilog::IMessageConsumer* logPtr = nullptr) const override;
87 virtual bool GetSubsetInfo(
88 ICollectionInfo& subsetInfo,
89 int offset = 0,
90 int count = -1,
91 const iprm::IParamsSet* selectionParamsPtr = nullptr,
92 ilog::IMessageConsumer* logPtr = nullptr) const override;
93 virtual QVariant GetElementInfo(const QByteArray& elementId, int infoType, ilog::IMessageConsumer* logPtr = nullptr) const override;
94 virtual idoc::MetaInfoPtr GetElementMetaInfo(const Id& elementId, ilog::IMessageConsumer* logPtr = nullptr) const override;
95 virtual bool SetElementName(const QByteArray& objectId, const QString& objectName, ilog::IMessageConsumer* logPtr = nullptr) override;
96 virtual bool SetElementDescription(const QByteArray& objectId, const QString& objectDescription, ilog::IMessageConsumer* logPtr = nullptr) override;
97 virtual bool SetElementEnabled(const QByteArray& objectId, bool isEnabled = true, ilog::IMessageConsumer* logPtr = nullptr) override;
98
99 // reimplemented (iser::ISerializable)
100 virtual bool Serialize(iser::IArchive& archive) override;
101
102 // reimplemented (istd::IChangeable)
103 virtual bool CopyFrom(const IChangeable& object, CompatibilityMode mode = CM_WITHOUT_REFS) override;
104 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS) override;
105
106protected:
107 imod::TModelWrap<CObjectCollection> m_collection;
108
109 imod::CModelUpdateBridge m_updateBridge;
110
111 iprm::COptionsManager m_types;
112
113 QByteArray m_collectionTagName;
114
115};
116
117
118// public methods
119
120template<class BaseInterface, class ObjectImpl>
122 const QByteArray& typeId,
123 const QString& typeName,
124 const QByteArray& collectionTagName)
125 :m_updateBridge(this, imod::CModelUpdateBridge::UF_SOURCE),
126 m_collectionTagName(collectionTagName)
127{
128 m_collection.AttachObserver(&m_updateBridge);
129
130 typedef istd::TSingleFactory<istd::IChangeable, imod::TModelWrap<ObjectImpl>> FactoryImpl;
131
132 m_collection.RegisterFactory<FactoryImpl>(typeId);
133
134 m_types.InsertOption(typeName, typeId);
135}
136
137
138template<class BaseInterface, class ObjectImpl>
139inline TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::~TAggergatedObjectCollectionWrap()
140{
141 m_updateBridge.EnsureModelsDetached();
142}
143
144
145template<class BaseInterface, class ObjectImpl>
146void TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetOperationFlags(int flags, const QByteArray& objectId)
147{
148 m_collection.SetOperationFlags(flags, objectId);
149}
150
151
152// reimplemented (IObjectCollection)
153
154template<class BaseInterface, class ObjectImpl>
155inline const IRevisionController* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetRevisionController() const
156{
157 return m_collection.GetRevisionController();
158}
159
160
161template<class BaseInterface, class ObjectImpl>
162inline const ICollectionDataController* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetDataController() const
163{
164 return m_collection.GetDataController();
165}
166
167
168template<class BaseInterface, class ObjectImpl>
169inline int TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetOperationFlags(const QByteArray& objectId) const
170{
171 return m_collection.GetOperationFlags(objectId);
172}
173
174
175template<class BaseInterface, class ObjectImpl>
176inline QByteArray TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::InsertNewObject(
177 const QByteArray& typeId,
178 const QString& name,
179 const QString& description,
180 const istd::IChangeable* defaultValuePtr,
181 const QByteArray& proposedObjectId,
182 const idoc::IDocumentMetaInfo* dataMetaInfoPtr,
183 const idoc::IDocumentMetaInfo* collectionItemMetaInfoPtr,
184 const IOperationContext* operationContextPtr)
185{
186 return m_collection.InsertNewObject(
187 typeId,
188 name,
189 description,
190 defaultValuePtr,
191 proposedObjectId,
192 dataMetaInfoPtr,
193 collectionItemMetaInfoPtr,
194 operationContextPtr);
195}
196
197
198template<class BaseInterface, class ObjectImpl>
199inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::RemoveElements(
200 const Ids& elementIds,
201 const IOperationContext* operationContextPtr)
202{
203 return m_collection.RemoveElements(elementIds, operationContextPtr);
204}
205
206
207template<class BaseInterface, class ObjectImpl>
208inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::RemoveElementSet(
209 const iprm::IParamsSet* selectionParamsPtr,
210 const IOperationContext* operationContextPtr)
211{
212 return m_collection.RemoveElementSet(selectionParamsPtr, operationContextPtr);
213}
214
215
216template<class BaseInterface, class ObjectImpl>
217bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::RestoreObjects(
218 const Ids& objectIds,
219 const IOperationContext* operationContextPtr)
220{
221 return m_collection.RestoreObjects(objectIds, operationContextPtr);
222}
223
224
225template<class BaseInterface, class ObjectImpl>
226bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::RestoreObjectSet(
227 const iprm::IParamsSet* selectionParamsPtr,
228 const IOperationContext* operationContextPtr)
229{
230 return m_collection.RestoreObjectSet(selectionParamsPtr, operationContextPtr);
231}
232
233
234template<class BaseInterface, class ObjectImpl>
235inline const istd::IChangeable* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetObjectPtr(const QByteArray& objectId) const
236{
237 return m_collection.GetObjectPtr(objectId);
238}
239
240
241template<class BaseInterface, class ObjectImpl>
242inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetObjectData(const QByteArray& objectId, DataPtr& dataPtr, const iprm::IParamsSet* /*dataConfigurationPtr*/) const
243{
244 return m_collection.GetObjectData(objectId, dataPtr);
245}
246
247
248template<class BaseInterface, class ObjectImpl>
249inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetObjectData(
250 const QByteArray& objectId,
251 const istd::IChangeable& object,
252 CompatibilityMode mode,
253 const IOperationContext* operationContextPtr)
254{
255 return m_collection.SetObjectData(objectId, object, mode, operationContextPtr);
256}
257
258
259template<class BaseInterface, class ObjectImpl>
260inline IObjectCollectionUniquePtr TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::CreateSubCollection(
261 int offset,
262 int count,
263 const iprm::IParamsSet* selectionParamsPtr) const
264{
265 return m_collection.CreateSubCollection(offset, count, selectionParamsPtr);
266}
267
268
269template<class BaseInterface, class ObjectImpl>
270IObjectCollectionIterator* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::CreateObjectCollectionIterator(
271 const QByteArray& objectId,
272 int offset,
273 int count,
274 const iprm::IParamsSet* selectionParamsPtr) const
275{
276 return m_collection.CreateObjectCollectionIterator(objectId, offset, count, selectionParamsPtr);
277}
278
279
280// reimplemented (IObjectCollectionInfo)
281
282template<class BaseInterface, class ObjectImpl>
283inline const iprm::IOptionsList* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetObjectTypesInfo() const
284{
285 return &m_types;
286}
287
288
289template<class BaseInterface, class ObjectImpl>
290inline ICollectionInfo::Id TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetObjectTypeId(const QByteArray& /*objectId*/) const
291{
292 return m_types.GetOptionId(0);
293}
294
295template<class BaseInterface, class ObjectImpl>
296inline idoc::MetaInfoPtr TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetDataMetaInfo(const Id& objectId) const
297{
298 return m_collection.GetDataMetaInfo(objectId);
299}
300
301
302// reimplemented (ICollectionInfo)
303
304template<class BaseInterface, class ObjectImpl>
305inline int TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetElementsCount(const iprm::IParamsSet* selectionParamPtr, ilog::IMessageConsumer* logPtr) const
306{
307 return m_collection.GetElementsCount(selectionParamPtr, logPtr);
308}
309
310
311template<class BaseInterface, class ObjectImpl>
312inline ICollectionInfo::Ids TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetElementIds(
313 int offset,
314 int count,
315 const iprm::IParamsSet* selectionParamsPtr,
316 ilog::IMessageConsumer* logPtr) const
317{
318 return m_collection.GetElementIds(offset, count, selectionParamsPtr, logPtr);
319}
320
321
322template<class BaseInterface, class ObjectImpl>
323inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetSubsetInfo(
324 ICollectionInfo& subsetInfo,
325 int offset,
326 int count,
327 const iprm::IParamsSet* selectionParamsPtr,
328 ilog::IMessageConsumer* logPtr) const
329{
330 return m_collection.GetSubsetInfo(subsetInfo, offset, count, selectionParamsPtr, logPtr);
331}
332
333
334template<class BaseInterface, class ObjectImpl>
335inline QVariant TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetElementInfo(const QByteArray& elementId, int infoType, ilog::IMessageConsumer* logPtr) const
336{
337 return m_collection.GetElementInfo(elementId, infoType, logPtr);
338}
339
340
341template<class BaseInterface, class ObjectImpl>
342inline idoc::MetaInfoPtr TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetElementMetaInfo(const Id& elementId, ilog::IMessageConsumer* logPtr) const
343{
344 return m_collection.GetElementMetaInfo(elementId, logPtr);
345}
346
347
348template<class BaseInterface, class ObjectImpl>
349inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetElementName(const QByteArray& objectId, const QString& objectName, ilog::IMessageConsumer* logPtr)
350{
351 return m_collection.SetElementName(objectId, objectName, logPtr);
352}
353
354
355template<class BaseInterface, class ObjectImpl>
356inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetElementDescription(const QByteArray& objectId, const QString& objectDescription, ilog::IMessageConsumer* logPtr)
357{
358 return m_collection.SetElementDescription(objectId, objectDescription, logPtr);
359}
360
361
362template<class BaseInterface, class ObjectImpl>
363inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetElementEnabled(const QByteArray& objectId, bool isEnabled, ilog::IMessageConsumer* logPtr)
364{
365 return m_collection.SetElementEnabled(objectId, isEnabled, logPtr);
366}
367
368
369// reimplemented (iser::ISerializable)
370
371template<class BaseInterface, class ObjectImpl>
372inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::Serialize(iser::IArchive& archive)
373{
374 istd::CChangeNotifier notifier(archive.IsStoring() ? nullptr : this);
375
376 static iser::CArchiveTag collectionTag(m_collectionTagName, "", iser::CArchiveTag::TT_GROUP);
377 bool retVal = archive.BeginTag(collectionTag);
378 retVal = retVal && m_collection.Serialize(archive);
379 retVal = retVal && archive.EndTag(collectionTag);
380
381 return retVal;
382}
383
384
385// reimplemented (istd::IChangeable)
386
387template<class BaseInterface, class ObjectImpl>
388inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::CopyFrom(const IChangeable& object, CompatibilityMode mode)
389{
390 const TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>* sourcePtr = dynamic_cast<const TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>*>(&object);
391 if (sourcePtr != nullptr){
392 istd::CChangeNotifier changeNotifier(this);
393
394 return m_collection.CopyFrom(sourcePtr->m_collection, mode);
395 }
396
397 return false;
398}
399
400
401template<class BaseInterface, class ObjectImpl>
402inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::ResetData(CompatibilityMode /*mode*/)
403{
404 istd::CChangeNotifier changeNotifier(this);
405
406 return m_collection.ResetData();
407}
408
409
410} // namespace imtbase
411
412