ImagingTools Core SDK
CSdlGenTools.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 <imtsdl/imtsdl.h>
7#include <imtsdl/ISdlTypeListProvider.h>
8#include <imtsdl/ISdlEnumListProvider.h>
9#include <imtsdl/ISdlUnionListProvider.h>
10#include <imtsdl/CSdlTools.h>
11#include <imtsdl/CSdlField.h>
12#include <imtsdl/CSdlDocumentType.h>
13
14
15class QTextStream;
16
17namespace iprm
18{
19class IParamsSet;
20}
21
22
23namespace imtsdl
24{
25class ISdlProcessArgumentsParser;
26}
27
28
29namespace imtsdlgencpp
30{
31
32
33class CSdlGenTools
34{
35public:
36 class CStructNamespaceConverter
37 {
38 public:
39 CStructNamespaceConverter();
40 CStructNamespaceConverter(const imtsdl::CSdlEntryBase& sdlEntry, const QString& relatedNamespace, const imtsdl::ISdlTypeListProvider& listProvider, const imtsdl::ISdlEnumListProvider& enumListProvider, const imtsdl::ISdlUnionListProvider& unionListProvider, bool listWrap);
41 CStructNamespaceConverter(const imtsdl::CSdlField& sdlField, const QString& relatedNamespace, const imtsdl::ISdlTypeListProvider& listProvider, const imtsdl::ISdlEnumListProvider& enumListProvider, const imtsdl::ISdlUnionListProvider& unionListProvider, bool listWrap);
42
43 const imtsdl::ISdlTypeListProvider* typeListProviderPtr = nullptr;
44 const imtsdl::ISdlEnumListProvider* enumListProviderPtr = nullptr;
45 const imtsdl::ISdlUnionListProvider* unionListProviderPtr = nullptr;
46 QString relatedNamespace;
47 bool listWrap = false;
48 bool addVersion = false;
49 bool cleanNamespace = true;
50 const imtsdl::CSdlField* sdlFieldPtr = nullptr;
51 const imtsdl::CSdlEntryBase* sdlEntryPtr = nullptr;
52 [[nodiscard]] QString GetString() const;
53 };
54
59 [[nodiscard]] static QString GetNamespaceFromSchemaParams(const iprm::IParamsSet& schemaParams, const QString& prefix = "sdl");
60
64 [[nodiscard]] static QString GetNamespaceFromTypeSchemaParams(const imtsdl::CSdlType& type, const QString& prefix = "sdl");
65
66 [[nodiscard]] static QString GetSchemaVerstionString(const iprm::IParamsSet& schemaParams, bool addVPrefix = true);
67 [[nodiscard]] static QString OptListConvertTypeWithNamespaceStruct(
68 const imtsdl::CSdlField& sdlField,
69 const QString& relatedNamespace,
70 const imtsdl::ISdlTypeListProvider& listProvider,
71 const imtsdl::ISdlEnumListProvider& enumlistProvider,
72 const imtsdl::ISdlUnionListProvider& unionlistProvider,
73 bool listWrap = false,
74 bool* isCustomPtr = nullptr,
75 bool* isComplexPtr = nullptr,
76 bool* isArrayPtr = nullptr,
77 bool* isEnumPtr = nullptr,
78 bool* isUnionPtr = nullptr,
79 const bool& addVersion = true);
80
87 [[nodiscard]] static QString GetNullCheckString(const imtsdl::CSdlField& sdlField, bool checkNull = true, const QString& objectName = QString());
88
89 [[nodiscard]] static QString GetSettingValueString(
90 const imtsdl::CSdlField& sdlField,
91 const QString& relatedNamespace,
92 const imtsdl::ISdlTypeListProvider& listProvider,
93 const QString& variableName,
94 const QString& objectName = QString());
95
96 static void AddArrayInternalChecksFail(QTextStream& stream, const imtsdl::CSdlField& field, bool checkEmpty, const QString& objectName = QString(), uint hIndents = 1);
97
103 static void AddErrorReport(QTextStream& stream, const QString& errorMessage, uint hIndents = 0, const QStringList& argset = QStringList(), bool onlyDebug = true);
104
105 template <class SdlEntryClass>
106 [[nodiscard]] static QString GetSdlEntryVersion(const SdlEntryClass& entry, bool addVPrefix = true);
107
108 [[nodiscard]] static QString GetTempVariableWrappedValue(const imtsdl::CSdlField& sdlField);
109
110 static void GenerateIsRequestSupportedMethodImpl(
111 QTextStream& stream,
112 const imtsdl::SdlRequestList& requestList,
113 const QString& className);
114
115 [[nodiscard]] static QString GetQObjectTypeName(
116 const imtsdl::CSdlField& sdlField,
117 const imtsdl::SdlTypeList& typeList,
118 const imtsdl::SdlEnumList& enumList,
119 const imtsdl::SdlUnionList& unionList,
120 bool withPointer = true,
121 bool treatArrayAsElement = false);
122
123 [[nodiscard]] static QString GetTempVariableWrappedValue(const QString& variableName);
124
125 [[nodiscard]] static std::shared_ptr<imtsdl::CSdlEntryBase> GetCollectionReferenceForDocument(
126 const imtsdl::CSdlDocumentType& documentType,
127 const imtsdl::SdlTypeList& typeList,
128 const imtsdl::SdlUnionList& unionList,
129 imtsdl::CSdlDocumentType::OperationType operationType);
130
131 [[nodiscard]] static QString GetCollectionReferenceName(
132 const imtsdl::CSdlDocumentType& documentType,
133 const imtsdl::SdlTypeList& typeList,
134 const imtsdl::SdlUnionList& unionList,
135 imtsdl::CSdlDocumentType::OperationType operationType);
136};
137
138
139// inline methods
140
141template<class SdlEntryClass>
142inline QString CSdlGenTools::GetSdlEntryVersion(const SdlEntryClass& entry, bool addVPrefix)
143{
144 return GetSchemaVerstionString(entry.GetSchemaParams(), addVPrefix);
145}
146
147inline QString CSdlGenTools::GetTempVariableWrappedValue(const imtsdl::CSdlField& sdlField)
148{
149 return GetTempVariableWrappedValue(sdlField.GetId());
150}
151
152inline QString CSdlGenTools::GetCollectionReferenceName(
153 const imtsdl::CSdlDocumentType& documentType,
154 const imtsdl::SdlTypeList& typeList,
155 const imtsdl::SdlUnionList& unionList,
156 imtsdl::CSdlDocumentType::OperationType operationType)
157{
158 auto refEntry = GetCollectionReferenceForDocument(documentType, typeList, unionList, operationType);
159 if (refEntry)
160 {
161 return refEntry->GetName();
162 }
163
164 return {};
165}
166
167
168
169} // namespace imtsdlgencpp