1// Copyright (C) 2023 basysKom GmbH, opensource@basyskom.com
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#pragma once
5
6#include "visitor.h"
7
8#include <QtCore/qlist.h>
9#include <QtCore/qtextstream.h>
10
11class DataTypeFileWriter : public Visitor
12{
13public:
14 enum GeneratingError { NoError, UnableToWrite };
15 DataTypeFileWriter(const QString &path,
16 const QString &prefix,
17 const QString &header);
18 ~DataTypeFileWriter() override = default;
19
20 void visit(EnumeratedType *enumeratedType) override;
21 void visit(EnumeratedValue *enumeratedValue) override;
22 void visit(Field *field) override;
23 void visit(Import *import) override;
24 void visit(StructuredType *structuredType) override;
25 void visit(TypeDictionary *typeDictionary) override;
26 void visit(XmlElement *xmlElement) override;
27
28 GeneratingError generateFile(const XmlElement *type, const QString &fileExtension);
29 GeneratingError generateTypes(const QList<XmlElement *> &types);
30
31 QList<XmlElement *> generateMapping() const;
32 void setGenerateMapping(const QList<XmlElement *> &generateMapping);
33
34 bool writeBundleFiles();
35
36private:
37 QString m_path;
38 QString m_prefix;
39 QString m_header;
40 QList<QString> m_generatedEnumeratedTypeFilenames;
41 QList<QString> m_generatedStructuredTypeFilenames;
42 QList<XmlElement *> m_generateMapping;
43 QList<EnumeratedType *> m_enumeratedTypes;
44
45 QStringList m_generatedSourceFileNames;
46 QStringList m_generatedHeaderFileNames;
47
48 void writeLicenseHeader(QTextStream &output);
49
50 void writeStructuredTypeCpp(const StructuredType *structuredType, QTextStream &output);
51 void writeStructuredTypeCppClassComment(const StructuredType *structuredType,
52 QTextStream &output);
53 void writeStructuredTypeCppDataClass(const StructuredType *structuredType, QTextStream &output);
54 void writeStructuredTypeCppDataClassMember(const StructuredType *structuredType,
55 QTextStream &output);
56 void writeStructuredTypeCppConstructors(const StructuredType *structuredType,
57 QTextStream &output);
58 void writeStructuredTypeCppOperatorAssignment(const StructuredType *structuredType,
59 QTextStream &output);
60 void writeStructuredTypeCppOperatorEquality(const StructuredType *structuredType,
61 QTextStream &output);
62 void writeStructuredTypeCppQVariant(const StructuredType *structuredType, QTextStream &output);
63 void writeStructuredTypeCppDestructor(const StructuredType *structuredType, QTextStream &output);
64 void writeStructuredTypeCppGetterSetter(const StructuredType *structuredType,
65 QTextStream &output);
66 void writeStructuredTypeCppGetter(const StructuredType *structuredType, QTextStream &output);
67 void writeStructuredTypeCppSetter(const Field *field,
68 const StructuredType *structuredType,
69 QTextStream &output);
70
71 void writeStructuredTypeHeader(const StructuredType *structuredType, QTextStream &output);
72 void writeStructuredTypeHeaderIncludes(const StructuredType *structuredType,
73 QTextStream &output);
74 void writeStructuredTypeHeaderUnion(const StructuredType *structuredType, QTextStream &output);
75 void writeStructuredTypeHeaderGetterSetter(const StructuredType *structuredType,
76 QTextStream &output);
77
78 void writeStructuredTypeHeaderDebug(const StructuredType *structuredType,
79 QTextStream &output);
80 void writeStructuredTypeCppDebug(const StructuredType *structuredType,
81 QTextStream &output);
82
83 void writeEnumeratedType(const EnumeratedType *enumeratedType, QTextStream &output);
84 GeneratingError writeEnumeratedTypes();
85};
86

source code of qtopcua/tools/datatypecodegenerator/datatypefilewriter.h