ACF $AcfVersion:0$
CRegistriesManagerComp.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/QMap>
7#include <QtCore/QDir>
8
9// ACF includes
10#include <istd/TDelPtr.h>
18
19
20namespace ipackage
21{
22
23
30 virtual public icomp::IExtPackagesManager,
31 virtual public icomp::IRegistriesManager,
32 virtual public icomp::IRegistryLoader
33{
34public:
36
42
43 I_BEGIN_COMPONENT(CRegistriesManagerComp);
44 I_REGISTER_INTERFACE(icomp::IExtPackagesManager);
45 I_REGISTER_INTERFACE(icomp::IPackagesManager);
46 I_REGISTER_INTERFACE(icomp::IRegistriesManager);
47 I_REGISTER_INTERFACE(icomp::IRegistryLoader);
48 I_ASSIGN(m_registryLoaderCompPtr, "RegistryLoader", "Loader used to read registry", true, "RegistryLoader");
49 I_ASSIGN(m_configFilePathCompPtr, "ConfigFilePath", "Path of packages configuration file will be loaded, if enabled", false, "ConfigFilePath");
50 I_ASSIGN(m_ignoreRealPackagesAttrPtr, "AreRealPackagesIgnored", "If set to true, all real packages will be ignored", true, false);
51 I_END_COMPONENT;
52
53 // reimplemented (icomp::IExtPackagesManager)
54 virtual PathList GetConfigurationPathList(PathType pathType) const override;
55 virtual int GetPackageDefinitionLevel(const QByteArray& packageId) const override;
56
57 // reimplemented (icomp::IPackagesManager)
58 virtual bool LoadPackages(const QString& configFilePath = QString()) override;
59 virtual int GetPackageType(const QByteArray& packageId) const override;
60 virtual QString GetPackagePath(const QByteArray& packageId) const override;
61 virtual QString GetRegistryPath(const icomp::CComponentAddress& address) const override;
62
63 // reimplemented (icomp::IRegistriesManager)
64 virtual const icomp::IRegistry* GetRegistry(const icomp::CComponentAddress& address, const icomp::IRegistry* contextRegistryPtr = NULL) const override;
65
66 // reimplemented (icomp::IComponentListProvider)
67 virtual ComponentAddresses GetComponentAddresses(int typeFlag = CTF_ALL) const override;
68
69 // reimplemented (icomp::IRegistryLoader)
70 virtual const icomp::IRegistry* GetRegistryFromFile(const QString& path) const override;
71
72protected:
73 void RegisterPackageFile(const QString& file, int definitionLevel);
74 void RegisterPackagesDir(const QString& subDir, int definitionLevel);
75 bool LoadConfigFile(const QString& configFile, int definitionLevel);
76
77 bool CheckAndMarkPath(PathList& pathList, const QDir& directory, const QString& path, QString& resultPath) const;
78
79 // reimplemented (icomp::CComponentBase)
80 virtual void OnComponentCreated() override;
81
82private:
83 struct RealPackageInfo
84 {
85 QString filePath;
86 int definitionLevel;
87 };
91 typedef QMap<QByteArray, RealPackageInfo> RealPackagesMap;
92 RealPackagesMap m_realPackagesMap;
93
94 typedef QMap<QByteArray, QString> ComponentIdToRegistryFileMap;
95 struct CompositePackageInfo
96 {
97 QDir directory;
98 ComponentIdToRegistryFileMap componentIdToRegistryFileMap;
99 int definitionLevel;
100 };
104 typedef QMap<QByteArray, CompositePackageInfo> CompositePackagesMap;
105 CompositePackagesMap m_compositePackagesMap;
106
107 typedef istd::TDelPtr<icomp::IRegistry> RegistryPtr;
108 typedef QMap<QString, RegistryPtr> RegistriesMap;
109
110 mutable RegistriesMap m_registriesMap;
111
112 mutable PathList m_usedConfigFilesList;
113 mutable PathList m_usedPackageDirsList;
114 mutable PathList m_usedPackageFilesList;
115 mutable PathList m_usedRegistryFilesList;
116
117 I_REF(ifile::IFilePersistence, m_registryLoaderCompPtr);
118 I_REF(ifile::IFileNameParam, m_configFilePathCompPtr);
119 I_ATTR(bool, m_ignoreRealPackagesAttrPtr);
120};
121
122
123} // namespace ipackage
124
125
126
127
Represents global address of component.
QSet< CComponentAddress > ComponentAddresses
QSet< QString > PathList
List of pathes.
Allow access to registries defined by composed components.
Interface representing information stored in component registry.
Definition IRegistry.h:48
Interface for a ACF registry loader.
Common interface for any file system item name (e.g directory, file or URL path)
Interface providing loading and saving of data objects.
Template wrapper adding comprehensive logging functionality to components.
Manages registries and composed component.
void RegisterPackagesDir(const QString &subDir, int definitionLevel)
virtual PathList GetConfigurationPathList(PathType pathType) const override
Get list of files used for configuration.
virtual ComponentAddresses GetComponentAddresses(int typeFlag=CTF_ALL) const override
Get addresses of known components.
virtual void OnComponentCreated() override
Called when component is created.
bool LoadConfigFile(const QString &configFile, int definitionLevel)
virtual int GetPackageType(const QByteArray &packageId) const override
Get type of package as defined in PackageType.
ilog::CLoggerComponentBase BaseClass
virtual QString GetRegistryPath(const icomp::CComponentAddress &address) const override
Get registry file path, if it is composed registry.
void RegisterPackageFile(const QString &file, int definitionLevel)
virtual bool LoadPackages(const QString &configFilePath=QString()) override
Configure environment for specified file path.
bool CheckAndMarkPath(PathList &pathList, const QDir &directory, const QString &path, QString &resultPath) const
virtual const icomp::IRegistry * GetRegistryFromFile(const QString &path) const override
Get an ACF registry from a given file.
virtual const icomp::IRegistry * GetRegistry(const icomp::CComponentAddress &address, const icomp::IRegistry *contextRegistryPtr=NULL) const override
Get access to stored registry.
virtual int GetPackageDefinitionLevel(const QByteArray &packageId) const override
Get level of package definition in configuration.
virtual QString GetPackagePath(const QByteArray &packageId) const override
Get directory path of specified component package.
Pointer wrapper providing automatic deleting pointed object during destruction.
Definition TDelPtr.h:21
#define NULL
Definition istd.h:74
Package contains implementation for the management of ACF environment.