ImagingTools Core SDK
CGqlSchemaParserComp.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/QFile>
7
8// ACF includes
9#include <iproc/TSyncProcessorCompBase.h>
10#include <iprm/IOptionsManager.h>
11#include <iprm/ITextParam.h>
12#include <icomp/TMakeComponentWrap.h>
13
14// ImtCore includes
15#include <imtbase/CTempDir.h>
16#include <imtsdl/ISdlProcessArgumentsParser.h>
17#include <imtsdl/ISdlDocumentTypeListProvider.h>
18#include <imtsdl/CGqlExtSchemaParser.h>
19#include <imtsdl/CSdlTools.h>
20
21
22namespace imtsdl
23{
24
25
26class CGqlSchemaParserComp:
27 public ilog::TLoggerCompWrap<icomp::TMakeComponentWrap<CGqlExtSchemaParser>>,
28 public iproc::TSyncProcessorWrap<iproc::IProcessor>,
29 private CSdlTools
30{
31public:
32 static const QByteArray s_processedFilesParamId;
33 static const QByteArray s_typeListParamId;
34 static const QByteArray s_requestListParamId;
35 static const QByteArray s_documentTypeListParamId;
36 static const QByteArray s_enumListParamId;
37 static const QByteArray s_unionListParamId;
38
39public:
40 typedef ilog::TLoggerCompWrap<icomp::TMakeComponentWrap<CGqlExtSchemaParser>> BaseClass;
41 typedef iproc::TSyncProcessorWrap<iproc::IProcessor> BaseClass2;
42
43 I_BEGIN_COMPONENT(CGqlSchemaParserComp)
44 I_REGISTER_INTERFACE(iproc::IProcessor)
45 I_REGISTER_INTERFACE(ISdlTypeListProvider)
46 I_REGISTER_INTERFACE(ISdlEnumListProvider)
47 I_REGISTER_INTERFACE(ISdlRequestListProvider)
48 I_REGISTER_INTERFACE(ISdlUnionListProvider)
49 I_REGISTER_INTERFACE(ISdlDocumentTypeListProvider)
50 I_REGISTER_SUBELEMENT(SchemaCustomParams)
51 I_REGISTER_SUBELEMENT_INTERFACE(SchemaCustomParams, iprm::IParamsSet, ExtractSchemaCustomParams);
52 I_REGISTER_SUBELEMENT(DependentSchemaList)
53 I_REGISTER_SUBELEMENT_INTERFACE(DependentSchemaList, iprm::IOptionsManager, ExtractDependentSchemaList);
54
55 I_ASSIGN(m_useFilesImportAttrPtr, "UseJavaStyleImport", "If enabled, all imports will be procesed by resloving paths in file a system", true, true)
56 I_ASSIGN(m_argumentParserCompPtr, "ArgumentParser", "Command line process argument parser", true, "ArgumentParser")
57 I_ASSIGN(m_schemaNamespaceCompPtr, "SchemaNamespace", "The namespace of the schema being processed", false, "SchemaNamespace")
58 I_ASSIGN(m_fileSchemaParserCompFactPtr, "FileSchemaParserFactory", "Factory used to create shema parser", false, "FileSchemaParserFactory")
59 I_END_COMPONENT;
60
61 // reimplemented(iproc::IProcessor)
62 virtual TaskState DoProcessing(
63 const iprm::IParamsSet* paramsPtr,
64 const istd::IPolymorphic* inputPtr,
65 istd::IChangeable* outputPtr,
66 ibase::IProgressManager* progressManagerPtr = NULL) override;
67
68protected:
69 QStringList GetPathsFromImportEntry(QString importDirective, const QStringList& searchPathList) const;
70 QString FindFileInList(const QString& relativePath, const QStringList& searchPathList) const;
71 QStringList FindFilesFromDir(const QString& relativeDirPath, const QStringList& searchPathList) const;
72 bool ExtractTypesFromImport(const QStringList& importFilesList);
73 bool SetupSchemaFilePath(const istd::IPolymorphic* inputPtr);
74
75 virtual bool ProcessFilesImports();
76 virtual bool ProcessJavaStyleImports();
77
78 // reimplemented (CGqlExtSchemaParser)
79 virtual bool ProcessSchemaImports() override;
80 virtual bool ValidateSchema() override;
81
82
83private:
84 // static template methods for sub element access
85 template <class InterfaceType>
86 static InterfaceType* ExtractSchemaCustomParams(CGqlSchemaParserComp& component)
87 {
88 return component.m_schemaParamsPtr.get();
89 }
90 template <class InterfaceType>
91 static InterfaceType* ExtractDependentSchemaList(CGqlSchemaParserComp& component)
92 {
93 return component.m_processedFilesPtr;
94 }
95
96protected:
97 I_REF(ISdlProcessArgumentsParser, m_argumentParserCompPtr);
98
99private:
100 I_ATTR(bool, m_useFilesImportAttrPtr);
101 I_REF(iprm::ITextParam, m_schemaNamespaceCompPtr);
102 I_FACT(iproc::IProcessor, m_fileSchemaParserCompFactPtr);
103
104 istd::TDelPtr<QFile> m_currentInputFilePtr;
105 istd::TDelPtr<imtbase::CTempDir> m_tempDirPtr;
106 iprm::IOptionsManager* m_processedFilesPtr;
107 QStringList m_includePathList;
108 QString m_currentSchemaFilePath;
109};
110
111
112} // namespace imtsdl
113
114