ImagingTools Core SDK
CGqlRequest.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 <imtgql/IGqlRequest.h>
7#include <imtgql/CGqlParamObject.h>
8#include <imtgql/CGqlFieldObject.h>
9
10
11namespace imtgql
12{
13
14
15class CGqlRequest: virtual public IGqlRequest
16{
17public:
18 CGqlRequest(RequestType requestType = RT_QUERY, const QByteArray& commandId = QByteArray());
19 ~CGqlRequest();
20
21 void AddParamValue(const QByteArray& paramId, const QVariant& value);
22 void AddParamValue(const QByteArray& paramId, const CGqlEnum& value);
23 void AddParam(const QByteArray& paramId, const CGqlParamObject& param);
24 void AddField(const QByteArray& fieldId, const CGqlFieldObject& field);
25 void AddSimpleField(const QByteArray& fieldId);
26 void SetGqlContext(IGqlContextSharedPtr gqlContext);
27 void SetRequestType(RequestType requestType);
28 void SetCommandId(const QByteArray& commandId);
29 QByteArray GetHeader(const QByteArray& headerId) const;
30 void SetHeader(const QByteArray& headerId, const QByteArray& value);
31
32 const CGqlFieldObject& GetFields() const;
33 const CGqlParamObject& GetParams() const;
34
35 void SetParams(const CGqlParamObject& params);
36
37 const CGqlFieldObject* GetFieldObject(const QByteArray& fieldId) const;
38 const CGqlParamObject* GetParamObject(const QByteArray& paramId) const;
39 const CGqlParamObject& GetVariables() const;
40 const QString& GetOperationName() const;
41
42
43 void SetProtocolVersion(const QByteArray& protocolVersion);
44
45 bool ParseQuery(const QByteArray& query, qsizetype& errorPosition);
46
47 // reimplemented (IGqlRequest)
48 virtual QByteArray GetCommandId() const override;
49 virtual RequestType GetRequestType() const override;
50 virtual QByteArray GetQuery() const override;
51 virtual const IGqlContext* GetRequestContext() const override;
52 virtual QByteArray GetProtocolVersion() const override;
53
54 // reimplemented (iser::IObject)
55 virtual QByteArray GetFactoryId() const override;
56
57 // reimplemented (iser::ISerializable)
58 virtual bool Serialize(iser::IArchive& archive) override;
59
60 // reimplemented (istd::IChangeable)
61 virtual int GetSupportedOperations() const override;
62 virtual bool CopyFrom(const IChangeable& object, CompatibilityMode mode = CM_WITHOUT_REFS) override;
63 virtual istd::IChangeableUniquePtr CloneMe(CompatibilityMode mode = CM_WITHOUT_REFS) const override;
64 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS) override;
65
66protected:
67 virtual QByteArray CreateQueryFields() const;
68 virtual QByteArray CreateQueryParams() const;
69 virtual QByteArray AddObjectFieldPart(const CGqlFieldObject& gqlObject) const;
70 virtual QByteArray AddObjectParamPart(const CGqlParamObject& gqlObject) const;
71 virtual QByteArray AddObjectParamValue(const QVariant& value) const;
72 virtual void ParseObjectFieldPart(CGqlFieldObject& gqlObject, const QJsonObject& object) const;
73 virtual void ParseObjectParamPart(CGqlParamObject& gqlObject, const QJsonObject& object) const;
74
75private:
76 void SetParseObject(const QByteArray& commandId);
77 void SetParseText(const QByteArray& text);
78 void StartArray(const QByteArray& text);
79 bool CloseArray();
80
81protected:
82 QByteArray m_commandId;
83 RequestType m_requestType;
84 CGqlParamObject m_params;
85 CGqlFieldObject m_fields;
86 CGqlParamObject m_variables;
87 QString m_operationName;
88
89 bool m_startKey;
90 bool m_startValue;
91 bool m_startParams;
92 bool m_startFields;
93 bool m_startFragment;
94 bool m_startArrayPrimitives;
95 bool m_textString;
96 QByteArray m_currentField;
97 QByteArray m_protocolVersion;
98
99 CGqlParamObject* m_activeGqlObjectPtr;
100 CGqlFieldObject* m_activeFieldObjectPtr;
101 QList<CGqlParamObject*> m_objectArrayList;
102 IGqlContextSharedPtr m_gqlContextPtr;
103 QList<QByteArray> m_activeArrayIds;
104
105 static const QHash<QByteArray, IGqlRequest::RequestType> s_requestNameMap;
106};
107
108
109} // namespace imtgql
110
111