ACF $AcfVersion:0$
CRegistryCodeSaverComp.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ACF-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QList>
7#include <QtCore/QSet>
8#include <QtCore/QTextStream>
9
10// ACF includes
11#include <icomp/IRegistry.h>
15#include <iprm/IOptionsList.h>
19
20
21namespace ipackage
22{
23
24
31{
32public:
34
42
54
55 I_BEGIN_COMPONENT(CRegistryCodeSaverComp);
56 I_REGISTER_INTERFACE(ifile::IFileTypeInfo);
57 I_REGISTER_INTERFACE(ifile::IFilePersistence);
58 I_REGISTER_INTERFACE(iprm::IOptionsList);
59 I_ASSIGN(m_packagesManagerCompPtr, "PackagesManager", "Packages manager providing access to package informations", true, "PackagesManager");
60 I_ASSIGN_TO(m_extPackagesManagerCompPtr, m_packagesManagerCompPtr, false);
61 I_ASSIGN(m_registriesManagerCompPtr, "RegistriesManager", "Registries manager providing access to all composite component registries", true, "RegistriesManager");
62 I_ASSIGN(m_workingModeAttrPtr, "WorkingMode", "Working mode\n\t0 - generate sources\n\t1 - generate dependencies to registries\n\t2 - generate all dependencies", true, 0);
63 I_ASSIGN(m_translationLevelAttrPtr, "TranslationLevel", "Level of configuration used for translation all packages, if disabled all levels of used packages will be stored", false, 0);
64 I_ASSIGN(m_useBinaryCodeAttrPtr, "UseBinaryCode", "If true, binary serialized registries will be used instead of generated by code", true, false);
65 I_ASSIGN(m_depfilePathAttrPtr, "DepfilePath", "Optional path where the dependency file will be stored", false, "");
66 I_END_COMPONENT;
67
69
70 // reimplemented (ifile::IFilePersistence)
72 const istd::IChangeable* dataObjectPtr,
73 const QString* filePathPtr = NULL,
74 int flags = -1,
75 bool beQuiet = true) const override;
78 const QString& filePath = QString(),
79 ibase::IProgressManager* progressManagerPtr = NULL) const override;
81 const istd::IChangeable& data,
82 const QString& filePath = QString(),
83 ibase::IProgressManager* progressManagerPtr = NULL) const override;
84
85 // reimplemented (ifile::IFileTypeInfo)
86 virtual bool GetFileExtensions(QStringList& result, const istd::IChangeable* dataObjectPtr = NULL, int flags = -1, bool doAppend = false) const override;
87 virtual QString GetTypeDescription(const QString* extensionPtr = NULL) const override;
88
89protected:
90 typedef QSet<icomp::CComponentAddress> Addresses;
91 typedef QSet<QByteArray> Ids;
92
97 const icomp::IRegistry& registry,
98 const QStringList& registryPath,
99 Addresses& realAddresses,
100 Addresses& composedAddresses) const;
101 Ids ExtractPackageIds(const Addresses& addresses) const;
102 Ids ExtractComponentIds(const Addresses& addresses, const QByteArray& packageId) const;
103
105 const QByteArray& className,
106 const icomp::IRegistry& registry,
107 const Addresses& composedAddresses,
108 const Addresses& realAddresses,
109 QTextStream& stream) const;
111 const QByteArray& className,
112 const Addresses& addresses,
113 QTextStream& stream) const;
115 const QByteArray& className,
116 const icomp::IRegistry& registry,
117 const Addresses& composedAddresses,
118 const Addresses& realAddresses,
119 QTextStream& stream) const;
121 const Addresses& composedAddresses,
122 const Addresses& realAddresses,
123 bool singleLine,
124 QTextStream& stream) const;
126 const icomp::IRegistry& registry,
127 const QByteArray& registryCallPrefix,
128 QTextStream& stream) const;
130 const icomp::IRegistry& registry,
131 const QByteArray& registryCallPrefix,
132 const QByteArray& componentId,
133 const icomp::IRegistry::ElementInfo& componentInfo,
134 QTextStream& stream) const;
136 const QByteArray& attributeId,
137 const QByteArray& componentId,
138 const QByteArray& attributeName,
139 const iser::IObject& attribute,
140 QTextStream& stream) const;
141
146 const icomp::IRegistry& registry,
147 bool& translationFound,
148 QTextStream& stream) const;
153 int level,
154 bool& translationFound,
155 QTextStream& stream) const;
156
161 const QByteArray& componentId,
162 const icomp::IRegistry::ElementInfo& componentInfo,
163 bool& translationFound,
164 QTextStream& stream) const;
165
167 const QByteArray& baseClassName,
168 const QByteArray& registryClassName,
169 const icomp::IRegistry& registry,
170 QTextStream& stream) const;
172 const QByteArray& baseClassName,
173 const QByteArray& registryClassName,
174 const icomp::IRegistry& registry,
175 QTextStream& stream) const;
179 bool WriteDeserializingCode(const iser::ISerializable& object, QTextStream& stream) const;
180
182 const iser::ISerializable& attribute,
183 QByteArray& valueString,
184 QByteArray& typeName) const;
186 const iser::ISerializable& attribute,
187 QList<QByteArray>& valueStrings,
188 QByteArray& typeName) const;
189
193 bool NextLine(QTextStream& stream) const;
194 int ChangeIndent(int difference) const;
195
199 bool ExtractInfoFromFile(const QString& filePath, QByteArray& className, QString& baseFilePath) const;
200
204 QByteArray GetPackageName(const QByteArray& packageId) const;
205
209 QByteArray GetStringLiteral(const QString& text) const;
213 QByteArray GetIdValueLiteral(const QByteArray& text) const;
217 QByteArray GetValidIdentifier(const QByteArray& identifier) const;
218
219private:
220 I_REF(icomp::IPackagesManager, m_packagesManagerCompPtr);
221 I_REF(icomp::IExtPackagesManager, m_extPackagesManagerCompPtr);
222 I_REF(icomp::IRegistriesManager, m_registriesManagerCompPtr);
223 I_ATTR(int, m_workingModeAttrPtr);
224 I_ATTR(int, m_translationLevelAttrPtr);
225 I_ATTR(bool, m_useBinaryCodeAttrPtr);
226 I_ATTR(QString, m_depfilePathAttrPtr);
227
228 mutable int m_indentCount;
229};
230
231
232} // namespace ipackage
233
234
235
236
Consume information about progress of some process.
Allow access to registries defined by composed components.
Interface representing information stored in component registry.
Definition IRegistry.h:48
Interface providing loading and saving of data objects.
OperationState
Result of operation.
Provide loading and saving of objects.
Template wrapper adding comprehensive logging functionality to components.
Save registry as C++ code (it generates C++ class with the same functionality) and/or dependencies li...
virtual OperationState LoadFromFile(istd::IChangeable &data, const QString &filePath=QString(), ibase::IProgressManager *progressManagerPtr=NULL) const override
This function loads data data from file filePath.
bool WriteHeader(const QByteArray &className, const icomp::IRegistry &registry, const Addresses &composedAddresses, const Addresses &realAddresses, QTextStream &stream) const
bool AppendAddresses(const icomp::IRegistry &registry, const QStringList &registryPath, Addresses &realAddresses, Addresses &composedAddresses) const
Get component addresses used by given registry and its elements (recursively).
QByteArray GetIdValueLiteral(const QByteArray &text) const
Get some string as C++ string literal.
bool WritePackagesTranslation(int level, bool &translationFound, QTextStream &stream) const
Write translation macro of all string attributes from packages till some level of package depth.
bool ExtractInfoFromFile(const QString &filePath, QByteArray &className, QString &baseFilePath) const
Extract class name and absolute header path from a file name.
QByteArray GetStringLiteral(const QString &text) const
Get some wide string as C++ string literal.
bool WriteRegistryTranslation(const icomp::IRegistry &registry, bool &translationFound, QTextStream &stream) const
Write translation macro of all string attributes from registry.
bool WriteAttribute(const QByteArray &attributeId, const QByteArray &componentId, const QByteArray &attributeName, const iser::IObject &attribute, QTextStream &stream) const
bool WriteComponentInfo(const icomp::IRegistry &registry, const QByteArray &registryCallPrefix, const QByteArray &componentId, const icomp::IRegistry::ElementInfo &componentInfo, QTextStream &stream) const
bool WriteRegistryInfo(const icomp::IRegistry &registry, const QByteArray &registryCallPrefix, QTextStream &stream) const
QSet< icomp::CComponentAddress > Addresses
ilog::CLoggerComponentBase BaseClass
bool WriteRegistryClassDeclaration(const QByteArray &baseClassName, const QByteArray &registryClassName, const icomp::IRegistry &registry, QTextStream &stream) const
QByteArray GetPackageName(const QByteArray &packageId) const
Ensure that a package name ends with 'Pck'.
bool GetMultiAttributeValue(const iser::ISerializable &attribute, QList< QByteArray > &valueStrings, QByteArray &typeName) const
bool WriteDependencies(const Addresses &composedAddresses, const Addresses &realAddresses, bool singleLine, QTextStream &stream) const
bool WriteClassDefinitions(const QByteArray &className, const icomp::IRegistry &registry, const Addresses &composedAddresses, const Addresses &realAddresses, QTextStream &stream) const
virtual bool IsOperationSupported(const istd::IChangeable *dataObjectPtr, const QString *filePathPtr=NULL, int flags=-1, bool beQuiet=true) const override
Returns true if object dataObject can be loaded/saved.
bool NextLine(QTextStream &stream) const
Insert a new line and indentation tabs.
virtual bool GetFileExtensions(QStringList &result, const istd::IChangeable *dataObjectPtr=NULL, int flags=-1, bool doAppend=false) const override
Get file extensions supported by this loader.
bool WriteDeserializingCode(const iser::ISerializable &object, QTextStream &stream) const
Write code deserializing some object from data buffer.
int ChangeIndent(int difference) const
bool WriteIncludes(const QByteArray &className, const Addresses &addresses, QTextStream &stream) const
bool WriteComponentTranslation(const QByteArray &componentId, const icomp::IRegistry::ElementInfo &componentInfo, bool &translationFound, QTextStream &stream) const
Write translation macro of all string attributes from component.
Ids ExtractComponentIds(const Addresses &addresses, const QByteArray &packageId) const
virtual QString GetTypeDescription(const QString *extensionPtr=NULL) const override
Get description of object type associated with single extension.
Ids ExtractPackageIds(const Addresses &addresses) const
virtual OperationState SaveToFile(const istd::IChangeable &data, const QString &filePath=QString(), ibase::IProgressManager *progressManagerPtr=NULL) const override
This function saves data data to file filePath.
bool WriteRegistryClassBody(const QByteArray &baseClassName, const QByteArray &registryClassName, const icomp::IRegistry &registry, QTextStream &stream) const
bool GetAttributeValue(const iser::ISerializable &attribute, QByteArray &valueString, QByteArray &typeName) const
QByteArray GetValidIdentifier(const QByteArray &identifier) const
Get valid C++ identifier (used for variable names) from arbitrary string.
@ WM_DEPENDENCIES
Generation of dependencies to all related ACF registry files.
Constraints of selection from set of possibilities.
Common interface for factorisable model objects.
Definition IObject.h:23
Common class for all classes which objects can be archived or restored from archive.
Common interface for data model objects, which can be changed.
Definition IChangeable.h:28
#define NULL
Definition istd.h:74
Package contains implementation for the management of ACF environment.
Describe information stored with each element.
Definition IRegistry.h:69