ImagingTools Core SDK
CObjectCollectionControllerCompBase.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#include <memory>
5
6
7// ACF includes
8#include <iprm/CParamsSet.h>
9
10// ImtCore includes
11#include <imtbase/ISearchController.h>
12#include <imtbase/IObjectCollection.h>
13#include <imtbase/IObjectCollectionIterator.h>
14#include <imtbase/IOperationContext.h>
15#include <imtbase/IDocumentChangeGenerator.h>
16#include <imtbase/IOperationContextController.h>
17#include <imtbase/CComplexCollectionFilter.h>
18#include <imtservergql/CPermissibleGqlRequestHandlerComp.h>
19#include <imtgql/IGqlRequestExtractor.h>
20#include <imtbase/IComplexCollectionFilter.h>
21#include <imtbase/CMimeType.h>
22#include <imtcol/ICollectionHeadersProvider.h>
23#include <imtserverapp/CParamSetRepresentationController.h>
24#include <imtserverapp/CComplexCollectionFilterRepresentationController.h>
25#include <imtserverapp/CDocumentFilterRepresentationController.h>
26#include <imtserverapp/CDocumentIdFilterRepresentationController.h>
27#include <imtcol/CDocumentCollectionFilter.h>
28#include <imtcol/CDocumentIdFilter.h>
29#include <imtbase/CComplexCollectionFilter.h>
30#include <imtauth/IUserActionManager.h>
31#include <GeneratedFiles/imtbasesdl/SDL/1.0/CPP/ImtCollection.h>
32
33
34#undef GetObject
35
36
37namespace imtservergql
38{
39
40
41class CObjectCollectionControllerAttrCompBase:
42 virtual public imtgql::IGqlRequestExtractor,
43 virtual public imtbase::ISearchController,
44 public sdl::imtbase::ImtCollection::CGraphQlHandlerCompBase
45{
46public:
47 typedef sdl::imtbase::ImtCollection::CGraphQlHandlerCompBase BaseClass;
48
49 I_BEGIN_BASE_COMPONENT(CObjectCollectionControllerAttrCompBase)
50 I_REGISTER_INTERFACE(imtgql::IGqlRequestExtractor)
51 I_REGISTER_INTERFACE(imtbase::ISearchController)
52 I_ASSIGN(m_collectionIdAttrPtr, "CollectionId", "Collection-ID", true, "");
53 I_ASSIGN(m_collectionNameAttrPtr, "CollectionName", "Collection Name", true, "");
54 I_END_COMPONENT
55
56protected:
57 I_ATTR(QByteArray, m_collectionIdAttrPtr);
58 I_ATTR(QString, m_collectionNameAttrPtr);
59};
60
61
62class CObjectCollectionControllerCompBase: public CObjectCollectionControllerAttrCompBase
63{
64public:
65 typedef CObjectCollectionControllerAttrCompBase BaseClass;
66
67 I_BEGIN_COMPONENT(CObjectCollectionControllerCompBase);
68 I_ASSIGN_MULTI_0(m_replaceableFieldsAttrPtr, "ReplaceableFilterFields", "List of filter fields to be replaced", false);
69 I_ASSIGN_MULTI_0(m_replacementFieldsAttrPtr, "ReplacementFilterFields", "List of filter fields to replace with", false);
70 I_ASSIGN(m_objectCollectionCompPtr, "ObjectCollection", "Object collection", true, "ObjectCollection");
71 I_ASSIGN(m_userActionManagerCompPtr, "UserActionManager", "User action manager", false, "UserActionManager");
72 I_ASSIGN(m_headersProviderCompPtr, "HeadersProvider", "Collection headers provider", false, "HeadersProvider");
73 I_ASSIGN(m_operationContextControllerCompPtr, "OperationContextController", "Operation context controller", false, "OperationContextController");
74 I_ASSIGN_MULTI_0(m_objectTypeIdAttrPtr, "ObjectTypeIds", "Object type IDs", false);
75 I_ASSIGN_MULTI_0(m_objectIconPathsAttrPtr, "ObjectIconPaths", "List of item paths related to object type-IDs", false);
76 I_ASSIGN_MULTI_0(m_objectFactCompPtr, "CollectionObjectFactory", "Collection object factories", false);
77 I_ASSIGN_MULTI_0(m_mimeTypeAttrPtr, "MimeType", "Mime type for the import/export object", false);
78 I_ASSIGN_MULTI_0(m_importExportObjectFactCompPtr, "ImportExportObjectFactory", "Object factory for the import/export object", false);
79 I_ASSIGN_MULTI_0(m_filePersistenceCompPtr, "FilePersistence", "File persistence for the import/export object", false);
80 I_ASSIGN(m_versionInfoCompPtr, "VersionInfo", "Version info", false, "VersionInfo");
81 I_END_COMPONENT;
82
83 enum OperationType
84 {
85 OT_UNKNOWN,
86 OT_NEW,
87 OT_GET,
88 OT_UPDATE,
89 OT_LIST
90 };
91
92 virtual QMap<int, QByteArray> GetSupportedCommandIds() const;
93
94 // reimplemented (ISearchController)
95 virtual QByteArray GetControllerId() const override;
96 virtual QString GetControllerName() const override;
97 virtual const imtbase::ISearchResults* Search(const QString& text) const override;
98
99 // reimplemented (sdl::imtbase::ImtCollection::CGraphQlHandlerCompBase)
100 virtual sdl::imtbase::ImtCollection::CDuplicateElementsPayload OnDuplicateElements(
101 const sdl::imtbase::ImtCollection::CDuplicateElementsGqlRequest& duplicateElementsRequest,
102 const ::imtgql::CGqlRequest& gqlRequest,
103 QString& errorMessage) const override;
104 virtual sdl::imtbase::ImtCollection::CVisualStatus OnGetObjectVisualStatus(
105 const sdl::imtbase::ImtCollection::CGetObjectVisualStatusGqlRequest& getObjectVisualStatusRequest,
106 const ::imtgql::CGqlRequest& gqlRequest,
107 QString& errorMessage) const override;
108 virtual sdl::imtbase::ImtCollection::CRemoveElementsPayload OnRemoveElements(
109 const sdl::imtbase::ImtCollection::CRemoveElementsGqlRequest& removeElementsRequest,
110 const ::imtgql::CGqlRequest& gqlRequest,
111 QString& errorMessage) const override;
112 virtual sdl::imtbase::ImtCollection::CRemoveElementSetPayload OnRemoveElementSet(
113 const sdl::imtbase::ImtCollection::CRemoveElementSetGqlRequest& removeElementSetRequest,
114 const ::imtgql::CGqlRequest& gqlRequest,
115 QString& errorMessage) const override;
116 virtual sdl::imtbase::ImtCollection::CRestoreObjectsPayload OnRestoreObjects(
117 const sdl::imtbase::ImtCollection::CRestoreObjectsGqlRequest& restoreObjectsRequest,
118 const ::imtgql::CGqlRequest& gqlRequest,
119 QString& errorMessage) const override;
120 virtual sdl::imtbase::ImtCollection::CRestoreObjectSetPayload OnRestoreObjectSet(
121 const sdl::imtbase::ImtCollection::CRestoreObjectSetGqlRequest& restoreObjectSetRequest,
122 const ::imtgql::CGqlRequest& gqlRequest,
123 QString& errorMessage) const override;
124 virtual sdl::imtbase::ImtCollection::CSetObjectNamePayload OnSetObjectName(
125 const sdl::imtbase::ImtCollection::CSetObjectNameGqlRequest& setObjectNameRequest,
126 const ::imtgql::CGqlRequest& gqlRequest,
127 QString& errorMessage) const override;
128 virtual sdl::imtbase::ImtCollection::CSetObjectDescriptionPayload OnSetObjectDescription(
129 const sdl::imtbase::ImtCollection::CSetObjectDescriptionGqlRequest& setObjectDescriptionRequest,
130 const ::imtgql::CGqlRequest& gqlRequest,
131 QString& errorMessage) const override;
132 virtual sdl::imtbase::ImtCollection::CExportObjectPayload OnExportObject(
133 const sdl::imtbase::ImtCollection::CExportObjectGqlRequest& exportObjectRequest,
134 const ::imtgql::CGqlRequest& gqlRequest,
135 QString& errorMessage) const override;
136 virtual sdl::imtbase::ImtCollection::CImportObjectPayload OnImportObject(
137 const sdl::imtbase::ImtCollection::CImportObjectGqlRequest& importObjectRequest,
138 const ::imtgql::CGqlRequest& gqlRequest,
139 QString& errorMessage) const override;
140 virtual sdl::imtbase::ImtCollection::CGetObjectTypeIdPayload OnGetObjectTypeId(
141 const sdl::imtbase::ImtCollection::CGetObjectTypeIdGqlRequest& getObjectTypeIdRequest,
142 const ::imtgql::CGqlRequest& gqlRequest,
143 QString& errorMessage) const override;
144 virtual sdl::imtbase::ImtCollection::CGetCollectionHeadersPayload OnGetCollectionHeaders(
145 const sdl::imtbase::ImtCollection::CGetCollectionHeadersGqlRequest& getCollectionHeadersRequest,
146 const ::imtgql::CGqlRequest& gqlRequest,
147 QString& errorMessage) const override;
148 virtual sdl::imtbase::ImtCollection::CGetElementsCountPayload OnGetElementsCount(
149 const sdl::imtbase::ImtCollection::CGetElementsCountGqlRequest& getElementsCountRequest,
150 const ::imtgql::CGqlRequest& gqlRequest,
151 QString& errorMessage) const override;
152 virtual sdl::imtbase::ImtCollection::CGetElementIdsPayload OnGetElementIds(
153 const sdl::imtbase::ImtCollection::CGetElementIdsGqlRequest& getElementIdsRequest,
154 const ::imtgql::CGqlRequest& gqlRequest,
155 QString& errorMessage) const override;
156 virtual sdl::imtbase::ImtCollection::CInsertNewObjectPayload OnInsertNewObject(
157 const sdl::imtbase::ImtCollection::CInsertNewObjectGqlRequest& insertNewObjectRequest,
158 const ::imtgql::CGqlRequest& gqlRequest,
159 QString& errorMessage) const override;
160 virtual sdl::imtbase::ImtCollection::CSetObjectDataPayload OnSetObjectData(
161 const sdl::imtbase::ImtCollection::CSetObjectDataGqlRequest& setObjectDataRequest,
162 const ::imtgql::CGqlRequest& gqlRequest,
163 QString& errorMessage) const override;
164 virtual sdl::imtbase::ImtCollection::CGetObjectDataPayload OnGetObjectData(
165 const sdl::imtbase::ImtCollection::CGetObjectDataGqlRequest& getObjectDataRequest,
166 const ::imtgql::CGqlRequest& gqlRequest,
167 QString& errorMessage) const override;
168 virtual sdl::imtbase::ImtCollection::CGetDataMetaInfoPayload OnGetDataMetaInfo(
169 const sdl::imtbase::ImtCollection::CGetDataMetaInfoGqlRequest& getDataMetaInfoRequest,
170 const ::imtgql::CGqlRequest& gqlRequest,
171 QString& errorMessage) const override;
172 virtual sdl::imtbase::ImtCollection::CGetElementInfoPayload OnGetElementInfo(
173 const sdl::imtbase::ImtCollection::CGetElementInfoGqlRequest& getElementInfoRequest,
174 const ::imtgql::CGqlRequest& gqlRequest,
175 QString& errorMessage) const override;
176 virtual sdl::imtbase::ImtCollection::CGetElementMetaInfoPayload OnGetElementMetaInfo(
177 const sdl::imtbase::ImtCollection::CGetElementMetaInfoGqlRequest& getElementMetaInfoRequest,
178 const ::imtgql::CGqlRequest& gqlRequest,
179 QString& errorMessage) const override;
180 virtual sdl::imtbase::ImtCollection::CCreateSubCollectionPayload OnCreateSubCollection(
181 const sdl::imtbase::ImtCollection::CCreateSubCollectionGqlRequest& createSubCollectionRequest,
182 const ::imtgql::CGqlRequest& gqlRequest,
183 QString& errorMessage) const override;
184
185 // reimplemented (imtservergql::CGqlRequestHandlerCompBase)
186 virtual QJsonObject CreateInternalResponse(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const override;
187 virtual bool IsRequestSupported(const imtgql::CGqlRequest& gqlRequest) const override;
188
189 // reimplemented (imtgql::IGqlRequestExtractor)
190 virtual istd::IChangeableUniquePtr ExtractObject(const imtgql::CGqlRequest& gqlRequest, QByteArray& newObjectId, QString& errorMessage) const override;
191
192protected:
193 void ReplaceComplexFilterFields(imtbase::IComplexCollectionFilter& filter) const;
194 void UpdateFieldsInfoFromHeaders(imtbase::IComplexCollectionFilter& filter) const;
195
196 virtual bool GetOperationFromRequest(const imtgql::CGqlRequest& gqlRequest, imtgql::CGqlParamObject& gqlObject, QString& errorMessage, int& operationType) const;
197 virtual QByteArray GetObjectIdFromInputParams(const imtgql::CGqlParamObject &inputParams) const;
198 virtual QByteArray GetObjectIdFromRequest(const imtgql::CGqlRequest& gqlRequest) const;
199 virtual QJsonObject GetObject(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
200 virtual QJsonObject InsertObject(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
201 virtual QJsonObject UpdateObject(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
202 virtual QJsonObject RenameObject(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
203 virtual QJsonObject SetObjectDescription(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
204 virtual QJsonObject ListObjects(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
205 virtual QJsonObject GetElementsCount(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
206 virtual QJsonObject DeleteObject(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
208 virtual QJsonObject GetMetaInfo(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
209 virtual QJsonObject GetInfo(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
210 virtual QJsonObject GetDataMetaInfo(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
211 virtual QJsonObject GetObjectTypeId(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
212 virtual QJsonObject ImportObject(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
213 virtual QJsonObject ExportObject(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
214
215 virtual bool ConvertObject(const istd::IChangeable& source, istd::IChangeable& target) const;
216 virtual int GetObjectTypeIdIndex(const QByteArray& typeId) const;
217 virtual int GetMimeTypeIndex(const QString& mimeType) const;
218 virtual QString GetExtensionFromMimeType(const imtbase::CMimeType& mimeType) const;
219 virtual QString GetExportFileName(const QByteArray& objectId) const;
220 virtual bool UpdateObjectFromRequest(const imtgql::CGqlRequest& gqlRequest, istd::IChangeable& object, QString& errorMessage) const;
221 virtual QVariant GetInputArgumentFromRequest(const imtgql::CGqlRequest& gqlRequest, const QString& argumentKey) const;
222 virtual imtbase::ICollectionInfo::Ids ExtractObjectIdsForRemoval(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
223
224 using GqlItemSetupContext = std::shared_ptr<const void>;
225 virtual GqlItemSetupContext CreateGqlItemSetupContext(const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
226 virtual bool SetupGqlItemWithContext(
227 const imtgql::CGqlRequest& gqlRequest,
228 const GqlItemSetupContext& setupContext,
229 QJsonObject& itemObj,
230 const imtbase::IObjectCollectionIterator* objectCollectionIterator,
231 QString& errorMessage) const;
232
236 virtual bool SetupGqlItem(
237 const imtgql::CGqlRequest& gqlRequest,
238 QJsonObject& itemObj,
239 const QByteArray& collectionId,
240 QString& errorMessage) const;
241
242 virtual bool SetupGqlItem(
243 const imtgql::CGqlRequest& gqlRequest,
244 QJsonObject& itemObj,
245 const imtbase::IObjectCollectionIterator* objectCollectionIterator,
246 QString& errorMessage) const;
247
251 virtual QByteArrayList GetInformationIds(const imtgql::CGqlRequest& gqlRequest, const QByteArray& objectId) const;
252
256 virtual QVariant GetObjectInformation(const QByteArray& informationId, const QByteArray& objectId) const;
257
261 virtual QByteArray GetObjectTypeIdFromRequest(const imtgql::CGqlRequest& gqlRequest) const;
262
266 virtual bool CreateRepresentationFromObject(
267 const istd::IChangeable& data,
268 const QByteArray& objectTypeId,
269 const imtgql::CGqlRequest& gqlRequest,
270 QJsonObject& dataObj,
271 QString& errorMessage) const;
272
276 [[deprecated]] virtual istd::IChangeableUniquePtr CreateObjectFromInputParams(const QList<imtgql::CGqlParamObject>& inputParams, QByteArray &objectId, QString& errorMessage) const;
277
281 virtual istd::IChangeableUniquePtr CreateObjectFromRequest(const imtgql::CGqlRequest& gqlRequest, QByteArray& newObjectId, QString& errorMessage) const;
282
286 virtual void PrepareFilters(const imtgql::CGqlRequest& gqlRequest, const imtgql::CGqlParamObject& viewParamsGql, iprm::CParamsSet& filterParams) const;
287
291 virtual void SetAdditionalFilters(const imtgql::CGqlRequest& gqlRequest,const imtgql::CGqlParamObject& viewParamsGql, iprm::CParamsSet* filterParams) const;
292
293 virtual void SetAdditionalFilters(const imtgql::CGqlRequest& gqlRequest, imtbase::CComplexCollectionFilter& complexFilter) const;
294
295 virtual istd::IChangeableUniquePtr CreateObject(const QByteArray& typeId) const;
296 virtual QString GetObjectNameFromRequest(const imtgql::CGqlRequest& gqlRequest) const;
297 virtual bool CreateCollectionFilterFromViewParamsSdl(
298 const sdl::imtbase::ImtCollection::CCollectionViewParams::V1_0& viewParams,
299 int& offset,
300 int& count,
301 iprm::CParamsSet& filterParams) const;
302 virtual bool CreateCollectionFilterFromSdl(
303 sdl::imtbase::ComplexCollectionFilter::CComplexCollectionFilter::V1_0& collectionFilter,
304 iprm::CParamsSet& filterParams) const;
305 virtual bool CreateDocumentFilterFromSdl(
306 sdl::imtbase::DocumentCollectionFilter::CDocumentCollectionFilter::V1_0& documentFilter,
307 iprm::CParamsSet& filterParams) const;
308 virtual QString ConvertMetaInfoToString(int infoType, const QVariant& metaInfoValue) const;
309 bool GetParamsSetFromRepresentation(sdl::imtbase::ImtBaseTypes::CParamsSet::V1_0& representation, iprm::IParamsSet& paramsSet) const;
310 bool RegisterFilterToSelectionParams(
311 iser::ISerializable& filterParam,
312 const imtserverapp::IJsonRepresentationController& representationController);
313
314 // By returning False, you can prevent the deletion of elements.
315 virtual bool OnBeforeRemoveElements(const QByteArrayList& elementIds, const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
316 virtual void OnAfterRemoveElements(const QByteArrayList& elementIds, const imtgql::CGqlRequest& gqlRequest) const;
317
318 virtual bool OnBeforeSetObjectName(const QByteArray& objectId, QString& newName, const imtgql::CGqlRequest& gqlRequest, QString& errorMessage) const;
319 virtual void OnAfterSetObjectName(const QByteArray& objectId, const QString& oldName, const QString& newName, const imtgql::CGqlRequest& gqlRequest) const;
320
321 virtual bool OnBeforeSetObjectDescription(
322 const QByteArray& objectId,
323 QString& description,
324 const imtgql::CGqlRequest& gqlRequest,
325 QString& errorMessage) const;
326 virtual void OnAfterSetObjectDescription(
327 const QByteArray& objectId,
328 const QString& description,
329 const imtgql::CGqlRequest& gqlRequest) const;
330
331 QByteArray ExtractObjectIdFromGetObjectTypeIdGqlRequest(const imtgql::CGqlRequest& gqlRequest) const;
332 QByteArray ExtractObjectIdFromGetObjectDataGqlRequest(const imtgql::CGqlRequest& gqlRequest) const;
333
334 // reimplemented (icomp::CComponentBase)
335 virtual void OnComponentCreated() override;
336
337private:
338 virtual bool DoUpdateObjectFromRequest(const imtgql::CGqlRequest& gqlRequest, istd::IChangeable& object, QByteArray& newObjectId, QString& errorMessage) const;
339 bool SerializeObject(istd::IChangeable& object, QByteArray& objectData) const;
340 bool DeSerializeObject(istd::IChangeable& object, const QByteArray& objectData) const;
341 bool CreateUserActionLog(
342 const QByteArray& objectId,
343 const QByteArray& objectTypeId,
344 const QByteArray& actionTypeId,
345 const imtgql::CGqlRequest& gqlRequest) const;
346
347protected:
348 QMap<QByteArray, QByteArray> m_fieldReplacementMap;
349
350private:
351 iprm::CParamsSet m_selectionParams;
352 imtcol::CDocumentCollectionFilter m_documentCollectionFilter;
353 imtcol::CDocumentIdFilter m_documentIdFilter;
354 imtbase::CComplexCollectionFilter m_complexCollectionFilter;
355 imtserverapp::CParamSetRepresentationController m_paramSetRepresentationController;
356 imtserverapp::CDocumentFilterRepresentationController m_documentFilterRepresentationController;
357 imtserverapp::CComplexCollectionFilterRepresentationController m_complexCollectionFilterRepresentationController;
358 imtserverapp::CDocumentIdFilterRepresentationController m_documentIdFilterRepresentationController;
359
360protected:
361 I_MULTIATTR(QByteArray, m_replaceableFieldsAttrPtr);
362 I_MULTIATTR(QByteArray, m_replacementFieldsAttrPtr);
363 I_REF(imtbase::IObjectCollection, m_objectCollectionCompPtr);
364 I_REF(imtcol::ICollectionHeadersProvider, m_headersProviderCompPtr);
365 I_REF(imtbase::IOperationContextController, m_operationContextControllerCompPtr);
366 I_REF(imtauth::IUserActionManager, m_userActionManagerCompPtr);
367
368 I_MULTIATTR(QByteArray, m_objectTypeIdAttrPtr);
369 I_MULTIATTR(QByteArray, m_objectIconPathsAttrPtr);
370 I_MULTIFACT(istd::IChangeable, m_objectFactCompPtr);
371
372 I_MULTIATTR(QString, m_mimeTypeAttrPtr);
373 I_MULTIFACT(istd::IChangeable, m_importExportObjectFactCompPtr);
374 I_MULTIREF(ifile::IFilePersistence, m_filePersistenceCompPtr);
375 I_REF(iser::IVersionInfo, m_versionInfoCompPtr);
376};
377
378
379} // namespace imtservergql
380