ImagingTools Core SDK
CCollectionDocumentManagerPublisherComp.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// ImtCore includes
6#include <imtdoc/IDocumentManager.h>
7#include <imtdoc/IDocumentManagerEventHandler.h>
8#include <imtservergql/CGqlPublisherCompBase.h>
9
10// ImtCore includes
11#include <GeneratedFiles/imtbasesdl/SDL/1.0/CPP/CollectionDocumentManager.h>
12
13
14namespace imtservergql
15{
16
17
18class CCollectionDocumentManagerPublisherComp:
19 public CGqlPublisherCompBase,
20 virtual public imtdoc::IDocumentManagerEventHandler
21{
22public:
23 typedef CGqlPublisherCompBase BaseClass;
24
25 I_BEGIN_COMPONENT(CCollectionDocumentManagerPublisherComp)
26 I_REGISTER_INTERFACE(imtdoc::IDocumentManagerEventHandler)
27 I_ASSIGN(m_collectionIdAttrPtr, "CollectionId", "Collection ID", true, "DummyCollection");
28 I_END_COMPONENT;
29
30protected:
31 // reimplemented (imtgql::IGqlSubscriberController)
32 virtual bool IsRequestSupported(const imtgql::CGqlRequest& gqlRequest) const override;
33
34 // reimplemented (imtdoc::IDocumentManagerEventHandler)
35 virtual bool ProcessEvent(imtdoc::CEventBase* eventPtr) override;
36
37protected:
38 virtual bool OnDocumentCreated(imtdoc::CEventBase* eventPtr) const;
39 virtual bool OnDocumentOpened(imtdoc::CEventBase* eventPtr) const;
40 virtual bool OnDocumentRenamed(imtdoc::CEventBase* eventPtr) const;
41 virtual bool OnDocumentChanged(imtdoc::CEventBase* eventPtr) const;
42 virtual bool OnDocumentUndoRedoChanged(imtdoc::CEventBase* eventPtr) const;
43 virtual bool OnDocumentSaved(imtdoc::CEventBase* eventPtr) const;
44 virtual bool OnDocumentSavedAs(imtdoc::CEventBase* eventPtr) const;
45 virtual bool OnDocumentClosed(imtdoc::CEventBase* eventPtr) const;
46 virtual bool OnDocumentDataLoaded(imtdoc::CEventBase* eventPtr) const;
47
48protected:
49 void FillDocumentNotification(
50 const imtdoc::CEventBase* eventPtr,
51 imtdoc::IDocumentManager::DocumentNotification& notification) const;
52 void FillSdlNotification(
53 const imtdoc::IDocumentManager::DocumentNotification& notification,
54 sdl::imtbase::CollectionDocumentManager::EDocumentOperation operation,
55 sdl::imtbase::CollectionDocumentManager::CDocumentManagerNotification::V1_0& sdlNotification) const;
56 QByteArray ConvertUrlToObjectId(const QUrl& url) const;
57 QByteArray GetCommandId() const;
58
59 template<class Representation>
60 void PublishRepresentation(
61 const QByteArray& commandId,
62 const QByteArray& userId,
63 const Representation& representation) const;
64
65private:
66 I_ATTR(QByteArray, m_collectionIdAttrPtr);
67};
68
69
70// privte methods
71
72template<class Representation>
73void CCollectionDocumentManagerPublisherComp::PublishRepresentation(
74 const QByteArray& commandId,
75 const QByteArray& userId,
76 const Representation& representation) const
77{
78 QJsonObject jsonObject;
79 if (!representation.WriteToJsonObject(jsonObject)){
80 Q_ASSERT(false);
81 }
82
83 QJsonDocument jsonDoc;
84 jsonDoc.setObject(jsonObject);
85
86 QByteArray data = jsonDoc.toJson(QJsonDocument::Compact);
87
88 for (const RequestNetworks& networkRequest : m_registeredSubscribers){
89 if (!userId.isEmpty()){
90 const imtgql::IGqlContext* contextPtr = networkRequest.gqlRequest.GetRequestContext();
91 if (contextPtr != nullptr){
92 const imtauth::IUserInfo* userInfoPtr = contextPtr->GetUserInfo();
93 if (userInfoPtr != nullptr){
94 if (userInfoPtr->GetId() != userId){
95 continue;
96 }
97 }
98 }
99 }
100
101 if (commandId == networkRequest.gqlRequest.GetCommandId()){
102 PublishData(commandId, data);
103 }
104 }
105}
106
107
108} // namespace imtservergql
109
110
virtual QByteArray GetId() const =0