ImagingTools Core SDK
CTaskCollectionCompBase.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
9// ACF includes
10#include <istd/TOptInterfacePtr.h>
11#include <iser/IObject.h>
12#include <imod/TModelWrap.h>
13#include <imod/CModelUpdateBridge.h>
14#include <ilog/TLoggerCompWrap.h>
15#include <iprm/COptionsManager.h>
16
17// ImtCore includes
18#include <imtbase/TModelUpdateBinder.h>
19
20// Acula includes
21#include <imthype/ITaskCollection.h>
22
23
24namespace imthype
25{
26
27
33 public ilog::CLoggerComponentBase,
34 virtual public ITaskCollection,
35 virtual public iser::ISerializable
36{
37public:
38 typedef icomp::CComponentBase BaseClass;
39
40 I_BEGIN_BASE_COMPONENT(CTaskCollectionCompBase);
41 I_REGISTER_INTERFACE(ITaskCollection);
42 I_REGISTER_INTERFACE(iser::ISerializable);
43 I_REGISTER_INTERFACE(IObjectCollection);
44 I_REGISTER_INTERFACE(IObjectCollectionInfo);
45 I_REGISTER_INTERFACE(ICollectionInfo);
46 I_ASSIGN_MULTI_0(m_fixedTasksCompPtr, "FixedTasks", "List of static defined tasks", false);
47 I_ASSIGN_MULTI_0(m_fixedTaskIdsAttrPtr, "FixedTaskIds", "List of IDs for corresponding fixed task", false);
48 I_ASSIGN_MULTI_0(m_fixedTaskTypeIdsAttrPtr, "FixedTaskTypeIds", "List of type IDs for corresponding fixed task", false);
49 I_ASSIGN_MULTI_0(m_fixedTaskTypeNamesAttrPtr, "FixedTaskTypeNames", "List of names for corresponding fixed task", false);
50 I_ASSIGN_MULTI_0(m_fixedTaskUserIdsAttrPtr, "FixedTaskUserIds", "List of user ids for corresponding fixed task", false);
51 I_ASSIGN(m_taskInputsCompPtr, "TaskInputs", "Container of task inputs related to the task collection", false, "TaskInputs");
52 I_ASSIGN_TO(m_taskInputsModelCompPtr, m_taskInputsCompPtr, false);
53 I_ASSIGN(m_allowAddTasksAttrPtr, "AllowAdd", "If enabled the new tasks can be added to the manager", true, true);
54 I_END_COMPONENT;
55
57
58 virtual QString GetTaskTypeName(const QByteArray& taskTypeId) const = 0;
59
60 // reimplemented (ITaskCollection)
61 virtual QByteArray GetUserTaskId(const QByteArray& taskUuid) const override;
62 virtual bool SetUserTaskId(const QByteArray& taskUuid, const QByteArray& userTaskId) override;
63 virtual QByteArray GetTaskInputId(const QByteArray& taskUuid) const override;
64 virtual bool SetTaskInputId(const QByteArray& taskUuid, const QByteArray& inputId) override;
65 virtual const iinsp::ISupplier* GetTask(const QByteArray& taskId) const override;
66 virtual const ITaskResultCollection* GetTaskResults(const QByteArray& taskId) const override;
67 virtual const imtbase::IObjectCollection* GetTaskInputs() const override;
68
69 // reimplemented (IObjectCollection)
70 virtual const imtbase::IRevisionController* GetRevisionController() const override;
71 virtual const imtbase::ICollectionDataController* GetDataController() const override;
72 virtual int GetOperationFlags(const QByteArray& objectId = QByteArray()) const override;
73 virtual idoc::MetaInfoPtr GetDataMetaInfo(const Id& objectId) const override;
74 virtual Id InsertNewObject(
75 const QByteArray& typeId,
76 const QString& name,
77 const QString& description,
78 const istd::IChangeable* defaultValuePtr = nullptr,
79 const Id& proposedElementId = Id(),
80 const idoc::IDocumentMetaInfo* dataMetaInfoPtr = nullptr,
81 const idoc::IDocumentMetaInfo* elementMetaInfoPtr = nullptr,
82 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
83 virtual bool RemoveElements(
84 const Ids& objectIds,
85 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
86 virtual bool RemoveElementSet(
87 const iprm::IParamsSet* selectionParamsPtr = nullptr,
88 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
89 virtual bool RestoreObjects(
90 const Ids& objectIds,
91 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
92 virtual bool RestoreObjectSet(
93 const iprm::IParamsSet* selectionParamsPtr = nullptr,
94 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
95 virtual const istd::IChangeable* GetObjectPtr(const QByteArray& objectId) const override;
96 virtual bool GetObjectData(
97 const QByteArray& objectId,
98 DataPtr& dataPtr,
99 const iprm::IParamsSet* dataConfigurationPtr = nullptr) const override;
100 virtual bool SetObjectData(
101 const QByteArray& objectId,
102 const istd::IChangeable& object,
103 CompatibilityMode mode = CM_WITHOUT_REFS,
104 const imtbase::IOperationContext* operationContextPtr = nullptr) override;
105 virtual imtbase::IObjectCollectionUniquePtr CreateSubCollection(
106 int offset = 0,
107 int count = -1,
108 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
109 virtual imtbase::IObjectCollectionIterator* CreateObjectCollectionIterator(
110 const QByteArray& objectId = QByteArray(),
111 int offset = 0,
112 int count = -1,
113 const iprm::IParamsSet* selectionParamsPtr = nullptr) const override;
114 virtual void ResetObjectIds() override;
115
116 // reimplemented (IObjectCollectionInfo)
117 virtual Id GetObjectTypeId(const QByteArray& objectId) const override;
118
119 // reimplemented (ICollectionInfo)
120 virtual int GetElementsCount(
121 const iprm::IParamsSet* selectionParamPtr = nullptr,
122 ilog::IMessageConsumer* logPtr = nullptr) const override;
123 virtual Ids GetElementIds(
124 int offset = 0,
125 int count = -1,
126 const iprm::IParamsSet* selectionParamsPtr = nullptr,
127 ilog::IMessageConsumer* logPtr = nullptr) const override;
128 virtual bool GetSubsetInfo(
129 imtbase::ICollectionInfo& subsetInfo,
130 int offset = 0,
131 int count = -1,
132 const iprm::IParamsSet* selectionParamsPtr = nullptr,
133 ilog::IMessageConsumer* logPtr = nullptr) const override;
134 virtual QVariant GetElementInfo(const QByteArray& elementId, int infoType, ilog::IMessageConsumer* logPtr = nullptr) const override;
135 virtual idoc::MetaInfoPtr GetElementMetaInfo(const Id& elementId, ilog::IMessageConsumer* logPtr = nullptr) const override;
136 virtual bool SetElementName(const Id& elementId, const QString& name, ilog::IMessageConsumer* logPtr = nullptr) override;
137 virtual bool SetElementDescription(const Id& elementId, const QString& description, ilog::IMessageConsumer* logPtr = nullptr) override;
138 virtual bool SetElementEnabled(const Id& elementId, bool isEnabled = true, ilog::IMessageConsumer* logPtr = nullptr) override;
139 // reimplemented (istd::IChangeable)
140 virtual int GetSupportedOperations() const override;
141 virtual bool CopyFrom(const IChangeable& object, CompatibilityMode mode = CM_WITHOUT_REFS) override;
142
143 // reimplemented (iser::ISerializable)
144 virtual bool Serialize(iser::IArchive& archive);
145
146protected:
147 virtual iinsp::ISupplierUniquePtr CreateTaskInstance(const QByteArray& taskTypeId) const = 0;
148 virtual void OnTaskCreated(iinsp::ISupplier& task);
149 virtual void OnTaskRemoved(const QByteArray& taskId);
150
158 virtual QString GenerateUniqueObjectName(const QString& newName, const QString& oldName) const;
159
160 // reimplemented (icomp::CComponentBase)
161 virtual void OnComponentCreated() override;
162 virtual void OnComponentDestroyed() override;
163
164protected:
165 typedef istd::TOptInterfacePtr<iinsp::ISupplier> OptionalTaskPtr;
166
167 struct Task
168 {
169 Task()
170 :isEnabled(true),
171 taskFlags(OF_ALL & ~OF_SUPPORT_PAGINATION)
172 {
173 uuid = QUuid::createUuid().toByteArray();
174 }
175
176 QByteArray uuid;
177 QByteArray typeId;
178 QString typeName;
179 OptionalTaskPtr taskPtr;
180 QString name;
181 bool isEnabled;
182 int taskFlags;
183 QString description;
184 QByteArray userDefinedTaskId;
185 QByteArray inputId;
186 };
187
188 typedef QVector<Task> TaskList;
189
190protected:
191 TaskList m_tasks;
192 typedef QMap<QByteArray, TaskList::Iterator> TaskIdMap;
193
194private:
195 void OnTaskInputsUpdated(const istd::IChangeable::ChangeSet& changeSet, const imtbase::IObjectCollection* objectCollectionPtr);
196
197protected:
198 I_MULTIREF(iinsp::ISupplier, m_fixedTasksCompPtr);
199 I_MULTIATTR(QByteArray, m_fixedTaskIdsAttrPtr);
200 I_MULTIATTR(QByteArray, m_fixedTaskTypeIdsAttrPtr);
201 I_MULTITEXTATTR(m_fixedTaskTypeNamesAttrPtr);
202 I_MULTITEXTATTR(m_fixedTaskUserIdsAttrPtr);
203 I_REF(imtbase::IObjectCollection, m_taskInputsCompPtr);
204 I_REF(imod::IModel, m_taskInputsModelCompPtr);
205 I_ATTR(bool, m_allowAddTasksAttrPtr);
206
207 mutable imod::CModelUpdateBridge m_updateBridge;
209};
210
211
212} // namespace imthype
213
214
virtual QString GenerateUniqueObjectName(const QString &newName, const QString &oldName) const