9#include <iproc/TSyncProcessorCompBase.h>
10#include <iprm/IOptionsManager.h>
11#include <iprm/ITextParam.h>
12#include <icomp/TMakeComponentWrap.h>
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>
26class CGqlSchemaParserComp:
27 public ilog::TLoggerCompWrap<icomp::TMakeComponentWrap<CGqlExtSchemaParser>>,
28 public iproc::TSyncProcessorWrap<iproc::IProcessor>,
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;
40 typedef ilog::TLoggerCompWrap<icomp::TMakeComponentWrap<CGqlExtSchemaParser>> BaseClass;
41 typedef iproc::TSyncProcessorWrap<iproc::IProcessor> BaseClass2;
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);
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")
62 virtual TaskState DoProcessing(
63 const iprm::IParamsSet* paramsPtr,
64 const istd::IPolymorphic* inputPtr,
65 istd::IChangeable* outputPtr,
66 ibase::IProgressManager* progressManagerPtr = NULL) override;
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);
75 virtual
bool ProcessFilesImports();
76 virtual
bool ProcessJavaStyleImports();
79 virtual
bool ProcessSchemaImports() override;
80 virtual
bool ValidateSchema() override;
85 template <class InterfaceType>
86 static InterfaceType* ExtractSchemaCustomParams(CGqlSchemaParserComp& component)
88 return component.m_schemaParamsPtr.get();
90 template <
class InterfaceType>
91 static InterfaceType* ExtractDependentSchemaList(CGqlSchemaParserComp& component)
93 return component.m_processedFilesPtr;
97 I_REF(ISdlProcessArgumentsParser, m_argumentParserCompPtr);
100 I_ATTR(
bool, m_useFilesImportAttrPtr);
101 I_REF(iprm::ITextParam, m_schemaNamespaceCompPtr);
102 I_FACT(iproc::IProcessor, m_fileSchemaParserCompFactPtr);
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;