6#include <QtCore/QByteArray>
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>
18#include <imtbase/CObjectCollection.h>
28template <
class BaseInterface,
class ObjectImpl>
30 virtual public BaseInterface,
32 virtual public iser::ISerializable
36 const QByteArray& typeId,
37 const QString& typeName,
38 const QByteArray& collectionTagName);
41 void SetOperationFlags(
int flags,
const QByteArray& objectId = QByteArray());
46 virtual int GetOperationFlags(
const QByteArray& objectId = QByteArray())
const override;
47 virtual QByteArray InsertNewObject(
48 const QByteArray& typeId,
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,
56 virtual bool RemoveElements(
const Ids& elementIds,
const IOperationContext* operationContextPtr =
nullptr)
override;
57 virtual bool RemoveElementSet(
58 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
60 virtual bool RestoreObjects(
63 virtual bool RestoreObjectSet(
64 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
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;
71 const QByteArray& objectId = QByteArray(),
74 const iprm::IParamsSet* selectionParamsPtr =
nullptr)
const override;
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;
81 virtual int GetElementsCount(
const iprm::IParamsSet* selectionParamPtr =
nullptr, ilog::IMessageConsumer* logPtr =
nullptr)
const override;
82 virtual Ids GetElementIds(
85 const iprm::IParamsSet* selectionParamsPtr =
nullptr,
86 ilog::IMessageConsumer* logPtr =
nullptr)
const override;
87 virtual bool GetSubsetInfo(
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;
100 virtual bool Serialize(iser::IArchive& archive)
override;
103 virtual bool CopyFrom(
const IChangeable&
object, CompatibilityMode mode = CM_WITHOUT_REFS)
override;
104 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS)
override;
107 imod::TModelWrap<CObjectCollection> m_collection;
109 imod::CModelUpdateBridge m_updateBridge;
111 iprm::COptionsManager m_types;
113 QByteArray m_collectionTagName;
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)
128 m_collection.AttachObserver(&m_updateBridge);
130 typedef istd::TSingleFactory<istd::IChangeable, imod::TModelWrap<ObjectImpl>> FactoryImpl;
132 m_collection.RegisterFactory<FactoryImpl>(typeId);
134 m_types.InsertOption(typeName, typeId);
138template<
class BaseInterface,
class ObjectImpl>
139inline TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::~TAggergatedObjectCollectionWrap()
141 m_updateBridge.EnsureModelsDetached();
145template<
class BaseInterface,
class ObjectImpl>
146void TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetOperationFlags(
int flags,
const QByteArray& objectId)
148 m_collection.SetOperationFlags(flags, objectId);
154template<
class BaseInterface,
class ObjectImpl>
155inline const IRevisionController* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetRevisionController()
const
157 return m_collection.GetRevisionController();
161template<
class BaseInterface,
class ObjectImpl>
162inline const ICollectionDataController* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetDataController()
const
164 return m_collection.GetDataController();
168template<
class BaseInterface,
class ObjectImpl>
169inline int TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetOperationFlags(
const QByteArray& objectId)
const
171 return m_collection.GetOperationFlags(objectId);
175template<
class BaseInterface,
class ObjectImpl>
176inline QByteArray TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::InsertNewObject(
177 const QByteArray& typeId,
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)
186 return m_collection.InsertNewObject(
193 collectionItemMetaInfoPtr,
194 operationContextPtr);
198template<
class BaseInterface,
class ObjectImpl>
199inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::RemoveElements(
200 const Ids& elementIds,
201 const IOperationContext* operationContextPtr)
203 return m_collection.RemoveElements(elementIds, operationContextPtr);
207template<
class BaseInterface,
class ObjectImpl>
208inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::RemoveElementSet(
209 const iprm::IParamsSet* selectionParamsPtr,
210 const IOperationContext* operationContextPtr)
212 return m_collection.RemoveElementSet(selectionParamsPtr, operationContextPtr);
216template<
class BaseInterface,
class ObjectImpl>
217bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::RestoreObjects(
218 const Ids& objectIds,
219 const IOperationContext* operationContextPtr)
221 return m_collection.RestoreObjects(objectIds, operationContextPtr);
225template<
class BaseInterface,
class ObjectImpl>
226bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::RestoreObjectSet(
227 const iprm::IParamsSet* selectionParamsPtr,
228 const IOperationContext* operationContextPtr)
230 return m_collection.RestoreObjectSet(selectionParamsPtr, operationContextPtr);
234template<
class BaseInterface,
class ObjectImpl>
235inline const istd::IChangeable* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetObjectPtr(
const QByteArray& objectId)
const
237 return m_collection.GetObjectPtr(objectId);
241template<
class BaseInterface,
class ObjectImpl>
242inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetObjectData(
const QByteArray& objectId, DataPtr& dataPtr,
const iprm::IParamsSet* )
const
244 return m_collection.GetObjectData(objectId, dataPtr);
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)
255 return m_collection.SetObjectData(objectId,
object, mode, operationContextPtr);
259template<
class BaseInterface,
class ObjectImpl>
260inline IObjectCollectionUniquePtr TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::CreateSubCollection(
263 const iprm::IParamsSet* selectionParamsPtr)
const
265 return m_collection.CreateSubCollection(offset, count, selectionParamsPtr);
269template<
class BaseInterface,
class ObjectImpl>
270IObjectCollectionIterator* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::CreateObjectCollectionIterator(
271 const QByteArray& objectId,
274 const iprm::IParamsSet* selectionParamsPtr)
const
276 return m_collection.CreateObjectCollectionIterator(objectId, offset, count, selectionParamsPtr);
282template<
class BaseInterface,
class ObjectImpl>
283inline const iprm::IOptionsList* TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetObjectTypesInfo()
const
289template<
class BaseInterface,
class ObjectImpl>
290inline ICollectionInfo::Id TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetObjectTypeId(
const QByteArray& )
const
292 return m_types.GetOptionId(0);
295template<
class BaseInterface,
class ObjectImpl>
296inline idoc::MetaInfoPtr TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetDataMetaInfo(
const Id& objectId)
const
298 return m_collection.GetDataMetaInfo(objectId);
304template<
class BaseInterface,
class ObjectImpl>
305inline int TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetElementsCount(
const iprm::IParamsSet* selectionParamPtr, ilog::IMessageConsumer* logPtr)
const
307 return m_collection.GetElementsCount(selectionParamPtr, logPtr);
311template<
class BaseInterface,
class ObjectImpl>
312inline ICollectionInfo::Ids TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetElementIds(
315 const iprm::IParamsSet* selectionParamsPtr,
316 ilog::IMessageConsumer* logPtr)
const
318 return m_collection.GetElementIds(offset, count, selectionParamsPtr, logPtr);
322template<
class BaseInterface,
class ObjectImpl>
323inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetSubsetInfo(
324 ICollectionInfo& subsetInfo,
327 const iprm::IParamsSet* selectionParamsPtr,
328 ilog::IMessageConsumer* logPtr)
const
330 return m_collection.GetSubsetInfo(subsetInfo, offset, count, selectionParamsPtr, logPtr);
334template<
class BaseInterface,
class ObjectImpl>
335inline QVariant TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetElementInfo(
const QByteArray& elementId,
int infoType, ilog::IMessageConsumer* logPtr)
const
337 return m_collection.GetElementInfo(elementId, infoType, logPtr);
341template<
class BaseInterface,
class ObjectImpl>
342inline idoc::MetaInfoPtr TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::GetElementMetaInfo(
const Id& elementId, ilog::IMessageConsumer* logPtr)
const
344 return m_collection.GetElementMetaInfo(elementId, logPtr);
348template<
class BaseInterface,
class ObjectImpl>
349inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetElementName(
const QByteArray& objectId,
const QString& objectName, ilog::IMessageConsumer* logPtr)
351 return m_collection.SetElementName(objectId, objectName, logPtr);
355template<
class BaseInterface,
class ObjectImpl>
356inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetElementDescription(
const QByteArray& objectId,
const QString& objectDescription, ilog::IMessageConsumer* logPtr)
358 return m_collection.SetElementDescription(objectId, objectDescription, logPtr);
362template<
class BaseInterface,
class ObjectImpl>
363inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::SetElementEnabled(
const QByteArray& objectId,
bool isEnabled, ilog::IMessageConsumer* logPtr)
365 return m_collection.SetElementEnabled(objectId, isEnabled, logPtr);
371template<
class BaseInterface,
class ObjectImpl>
372inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::Serialize(iser::IArchive& archive)
374 istd::CChangeNotifier notifier(archive.IsStoring() ?
nullptr : this);
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);
387template<
class BaseInterface,
class ObjectImpl>
388inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::CopyFrom(
const IChangeable&
object, CompatibilityMode mode)
390 const TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>* sourcePtr =
dynamic_cast<const TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>*
>(&object);
391 if (sourcePtr !=
nullptr){
392 istd::CChangeNotifier changeNotifier(
this);
394 return m_collection.CopyFrom(sourcePtr->m_collection, mode);
401template<
class BaseInterface,
class ObjectImpl>
402inline bool TAggergatedObjectCollectionWrap<BaseInterface, ObjectImpl>::ResetData(CompatibilityMode )
404 istd::CChangeNotifier changeNotifier(
this);
406 return m_collection.ResetData();