ImagingTools Core SDK
CGqlSchemaParser.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/QTextStream>
7#include <QtCore/QIODevice>
8#include <QtCore/QMap>
9#include <QtCore/QVariant>
10
11// ACF includes
12#include <istd/ILogger.h>
13
14// ImtCore includes
15#include <imtsdl/ISdlTypeListProvider.h>
16#include <imtsdl/ISdlRequestListProvider.h>
17#include <imtsdl/ISdlEnumListProvider.h>
18#include <imtsdl/ISdlUnionListProvider.h>
19#include <imtsdl/CSdlRequest.h>
20#include <imtsdl/CSdlEnumConverter.h>
21#include <imtsdl/CSdlEnum.h>
22#include <imtsdl/CSdlUnion.h>
23
24
25namespace iprm {
26
27class CParamsSet;
28
29} // namespace iprm::CParamsSet
30
31
32namespace imtsdl
33{
34
40 virtual public istd::IPolymorphic,
41 virtual public ISdlTypeListProvider,
42 virtual public ISdlRequestListProvider,
43 virtual public ISdlEnumListProvider,
44 virtual public ISdlUnionListProvider,
45 virtual protected istd::ILogger,
46 protected CSdlEnumConverter
47{
48
49 Q_DISABLE_COPY(CGqlSchemaParser)
50
51protected:
53
54public:
55 CGqlSchemaParser(QIODevice& device);
56
57 virtual bool ParseGqlSchema();
58 bool SetSchemaName(const QString& schemaName) const;
59
60 // reimplemented (ISdlTypeListProvider)
61 virtual QStringList GetTypeNames() const override;
62 virtual SdlTypeList GetSdlTypes(bool onlyLocal) const override;
63 virtual SdlFieldList GetFields(const QString typeName) const override;
64
65 // reimplemented (ISdlRequestListProvider)
66 virtual SdlRequestList GetRequests(bool onlyLocal) const override;
67
68 // reimplemented (ISdlEnumListProvider)
69 virtual SdlEnumList GetEnums(bool onlyLocal) const override;
70
71 // reimplemented (ISdlUnionListProvider)
72 virtual SdlUnionList GetUnions(bool onlyLocal) const override;
73
74protected:
75 virtual bool ProcessSchema();
76 virtual bool ProcessSchemaImports();
77 virtual bool ProcessType();
78 virtual bool ProcessInterface();
79 virtual bool ProcessUnion();
80 virtual bool ProcessScalar();
81 virtual bool ProcessEnum();
82 virtual bool ProcessInput();
83 virtual bool ProcessExtend();
84 virtual bool ProcessDirective();
85 virtual bool ProcessQuery();
86 virtual bool ProcessMutation();
87 virtual bool ProcessSubscription();
88 virtual bool ProcessValue(SdlFieldList& output, bool* endOfReadPtr);
89 virtual bool ProcessRequests(CSdlRequest::Type type);
90
96 virtual bool ProcessCustomSchemaValue(const QString& key, const QString& value);
97
103 virtual bool ProcessCustomSection(const QString& sectionName);
104
105 virtual bool ValidateSchema();
106
107 void SetDevice(QIODevice& device);
108 bool ReadToDelimeter(
109 const QByteArray& delimeters,
110 QByteArray& result,
111 char* foundDelimeterPtr = nullptr,
112 bool allowEmptyResult = true,
113 bool skipDelimeter = true);
114 bool ReadToDelimeterOrSpace(
115 const QByteArray& delimeters,
116 QByteArray& result,
117 char* foundDelimeterPtr = nullptr,
118 bool allowEmptyResult = true,
119 bool skipDelimeter = true);
120
121 bool MoveToCharType(QChar::Category category, char* foundDelimeterPtr = nullptr, bool skipDelimeter = false);
122 bool MoveToCharType(const QList<QChar::Category>& categoryList, char* foundDelimeterPtr = nullptr, bool skipDelimeter = false);
123 bool MoveToNextReadableSymbol(char* foundDelimeterPtr = nullptr, bool skipDelimeter = false);
124 bool MoveInside();
125 bool MoveAfterWord(const QString& word);
126
127protected:
128 QTextStream m_stream;
129 char m_lastReadChar;
130 qulonglong m_lastReadLine;
131 bool m_useLastReadChar;
132 QMap<KeyId, QByteArray> m_keywordMap;
133 QString m_originalSchemaFile;
134
135 SdlTypeList m_sdlTypes;
136 SdlRequestList m_requests;
137 SdlEnumList m_enums;
138 SdlUnionList m_unions;
139
146 std::shared_ptr<iprm::CParamsSet> m_schemaParamsPtr;
147};
148
149
150} // namespace imtsdl
151
152
153
154
155
156
157
158
159
std::shared_ptr< iprm::CParamsSet > m_schemaParamsPtr
saved schema parameters, declarated in .sdl file
virtual bool ProcessCustomSection(const QString &sectionName)
virtual bool ProcessCustomSchemaValue(const QString &key, const QString &value)