ImagingTools Core SDK
CObjectCollectionBase.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/QVector>
7#include <QtCore/QUuid>
8#include <QtCore/QReadWriteLock>
9
10// ACF includes
11#include <istd/TOptInterfacePtr.h>
12#include <imod/CModelUpdateBridge.h>
13#include <idoc/CStandardDocumentMetaInfo.h>
14#include <imod/CSingleModelObserverBase.h>
15
16// ImtCore includes
17#include <imtbase/CObjectCollectionMetaInfo.h>
18#include <imtbase/ICollectionDataController.h>
19#include <imtbase/IMetaInfoCreator.h>
20#include <imtbase/IObjectCollection.h>
21#include <imtbase/IObjectCollectionIterator.h>
22
23
24namespace imtbase
25{
26
27
33 virtual public IObjectCollection,
34 virtual protected ICollectionDataController,
35 virtual public iser::ISerializable
36{
37public:
39 virtual ~CObjectCollectionBase();
40
41 // reimplemented (ICollectionDataController)
42 virtual const ifile::IFilePersistence* GetPersistenceForObjectType(const QByteArray& typeId) const override;
43 virtual bool ExportFile(
44 const imtbase::IObjectCollection& collection,
45 const Id& objectId,
46 const QString& targetFilePath = QString()) const override;
47 virtual Id ImportFile(
49 const QByteArray& typeId,
50 const QString& sourceFilePath = QString(),
51 const QString& objectName = QString()) const override;
52
53 // reimplemented (IObjectCollection)
54 virtual const IRevisionController* GetRevisionController() const override;
55 virtual const ICollectionDataController* GetDataController() const override;
56 virtual int GetOperationFlags(const Id& objectId = Id()) const override;
57 virtual Id InsertNewObject(
58 const QByteArray& typeId,
59 const QString& name,
60 const QString& description,
61 const istd::IChangeable* defaultValuePtr = nullptr,
62 const Id& proposedElementId = Id(),
63 const idoc::IDocumentMetaInfo* dataMetaInfoPtr = nullptr,
64 const idoc::IDocumentMetaInfo* elementMetaInfoPtr = nullptr,
65 const IOperationContext* operationContextPtr = nullptr) override;
66 virtual bool RemoveElements(const Ids& elementIds, const IOperationContext* operationContextPtr = nullptr) override;
67 virtual bool RemoveElementSet(
68 const iprm::IParamsSet* selectionParamsPtr = nullptr,
69 const IOperationContext* operationContextPtr = nullptr) override;
70 virtual bool RestoreObjects(
71 const Ids& objectIds,
72 const IOperationContext* operationContextPtr = nullptr) override;
73 virtual bool RestoreObjectSet(
74 const iprm::IParamsSet* selectionParamsPtr = nullptr,
75 const IOperationContext* operationContextPtr = nullptr) override;
76 virtual const istd::IChangeable* GetObjectPtr(const Id& objectId) const override;
77 virtual bool GetObjectData(const Id& objectId, DataPtr& dataPtr, const iprm::IParamsSet* dataConfigurationPtr = nullptr) const override;
78 virtual bool SetObjectData(
79 const Id& objectId,
80 const istd::IChangeable& object,
81 CompatibilityMode mode = CM_WITHOUT_REFS,
82 const IOperationContext* operationContextPtr = nullptr) override;
83 virtual IObjectCollectionUniquePtr CreateSubCollection(int offset, int count, const iprm::IParamsSet *selectionParamsPtr) const override;
84 virtual imtbase::IObjectCollectionIterator* CreateObjectCollectionIterator(
85 const QByteArray& objectId = QByteArray(),
86 int offset = 0,
87 int count = -1,
88 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
89
90 // reimplemented (IObjectCollectionInfo)
91 virtual const iprm::IOptionsList* GetObjectTypesInfo() const override;
92 virtual QByteArray GetObjectTypeId(const Id& objectId) const override;
93 virtual idoc::MetaInfoPtr GetDataMetaInfo(const Id& objectId) const override;
94
95 // reimplemented (ICollectionInfo)
96 virtual int GetElementsCount(
97 const iprm::IParamsSet* selectionParamPtr = nullptr,
98 ilog::IMessageConsumer* logPtr = nullptr) const override;
99 virtual Ids GetElementIds(
100 int offset = 0,
101 int count = -1,
102 const iprm::IParamsSet* selectionParamsPtr = nullptr,
103 ilog::IMessageConsumer* logPtr = nullptr) const override;
104 virtual bool GetSubsetInfo(
105 ICollectionInfo& subsetInfo,
106 int offset = 0,
107 int count = -1,
108 const iprm::IParamsSet* selectionParamsPtr = nullptr,
109 ilog::IMessageConsumer* logPtr = nullptr) const override;
110 virtual QVariant GetElementInfo(const Id& elementId, int infoType, ilog::IMessageConsumer* logPtr = nullptr) const override;
111 virtual idoc::MetaInfoPtr GetElementMetaInfo(const Id& elementId, ilog::IMessageConsumer* logPtr = nullptr) const override;
112 virtual bool SetElementName(const Id& elementId, const QString& name, ilog::IMessageConsumer* logPtr = nullptr) override;
113 virtual bool SetElementDescription(const Id& elementId, const QString& description, ilog::IMessageConsumer* logPtr = nullptr) override;
114 virtual bool SetElementEnabled(const Id& elementId, bool isEnabled = true, ilog::IMessageConsumer* logPtr = nullptr) override;
115
116 // reimplemented (iser::ISerializable)
117 virtual bool Serialize(iser::IArchive & archive) override;
118
119 // reimplemented (istd::IChangeable)
120 virtual int GetSupportedOperations() const override;
121 virtual bool CopyFrom(const IChangeable& object, CompatibilityMode mode = CM_WITHOUT_REFS) override;
122 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS) override;
123
124protected:
125 struct CollectionIterator : public imod::CSingleModelObserverBase, virtual public imtbase::IObjectCollectionIterator
126 {
127 public:
128 CollectionIterator() = delete;
129 CollectionIterator(const CObjectCollectionBase& parent);
130 ~CollectionIterator();
131
132 void Reset();
133 bool IsValid() const;
134
135 // reimplemented (imod::CSingleModelObserverBase)
136 virtual void OnUpdate(const istd::IChangeable::ChangeSet& changeSet) override;
137
138 // reimplemented (imtbase::IObjectCollectionIterator)
139 virtual bool Next() const override;
140 virtual bool Previous() const override;
141 virtual QByteArray GetObjectId() const override;
142 virtual QByteArray GetObjectTypeId() const override;
143 virtual bool GetObjectData(IObjectCollection::DataPtr& dataPtr) const override;
144 virtual idoc::MetaInfoPtr GetDataMetaInfo() const override;
145 virtual int GetElementsCount() const override;
146 virtual idoc::MetaInfoPtr GetCollectionMetaInfo() const override;
147 virtual QVariant GetElementInfo(int infoType) const override;
148 virtual QVariant GetElementInfo(QByteArray infoId) const override;
149
150 private:
151 const IObjectCollection* GetCollectionPtr(int index) const;
152 QByteArray GetObjectId(int index) const;
153
154 private:
155 const CObjectCollectionBase& m_parent;
156 mutable int m_index;
157 };
158
159 struct ObjectInfo
160 {
161 ObjectInfo()
162 :isEnabled(true),
163 flags(OF_ALL),
164 copyMode(istd::IChangeable::CM_WITHOUT_REFS)
165 {
166 id = QUuid::createUuid().toByteArray();
167 }
168
169 ObjectInfo(const ObjectInfo& object)
170 {
171 this->dataPtr = object.dataPtr;
172 this->copyMode = object.copyMode;
173
174 this->id = object.id;
175 this->typeId = object.typeId;
176 this->name = object.name;
177 this->isEnabled = object.isEnabled;
178 this->flags = object.flags;
179 this->description = object.description;
180 this->collectionItemMetaInfo.CopyFrom(object.collectionItemMetaInfo);
181 this->contentsMetaInfoPtr = object.contentsMetaInfoPtr;
182 }
183
184 bool isEnabled;
185 istd::TOptInterfacePtr<IChangeable> dataPtr;
186 QString name;
187 QString description;
188 QByteArray id;
189 QByteArray typeId;
190 int flags;
191 istd::IChangeable::CompatibilityMode copyMode;
192 imtbase::CObjectCollectionMetaInfo collectionItemMetaInfo;
193
197 idoc::MetaInfoPtr contentsMetaInfoPtr;
198 };
199
200 typedef QVector<ObjectInfo> Objects;
201
202 Objects m_objects;
203
204protected:
205 // abstract methods
206
210 virtual istd::IChangeableUniquePtr CreateObjectInstance(const QByteArray& typeId) const = 0;
211
212protected:
218 virtual IObjectCollection* GetObjectStorage(const QByteArray& typeId, const istd::IChangeable* objectPtr) const;
219
224
225 virtual bool InsertObjectIntoCollection(ObjectInfo info);
226 virtual int GetItemDefaultFlags() const;
227 ObjectInfo* GetObjectInfo(const Id& id) const;
228 virtual void RemoveAllObjects();
229
230private:
231 istd::IChangeableUniquePtr CreateDataObject(const QByteArray& typeId) const;
232
233protected:
234 imod::CModelUpdateBridge m_modelUpdateBridge;
235 mutable QReadWriteLock m_lock;
236};
237
238
239} // namespace imtbase
240
virtual istd::IChangeableUniquePtr CreateObjectInstance(const QByteArray &typeId) const =0
virtual IObjectCollection * CreateSubCollectionInstance() const
virtual IObjectCollection * GetObjectStorage(const QByteArray &typeId, const istd::IChangeable *objectPtr) const