ACF $AcfVersion:0$
CPackagesLoaderComp.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/QFileInfo>
8#include <QtCore/QDir>
9#include <QtCore/QLibrary>
10
11// ACF includes
12#include <istd/TDelPtr.h>
14#include <icomp/CRegistry.h>
18#include <icomp/export.h>
22
23
24namespace ipackage
25{
26
27
32 public QObject,
35 virtual public icomp::IRegistryLoader
36{
37 Q_OBJECT
38
39public:
42
48
49 I_BEGIN_COMPONENT(CPackagesLoaderComp);
50 I_REGISTER_INTERFACE(icomp::IRegistryLoader);
51 I_REGISTER_INTERFACE(icomp::IComponentEnvironmentManager);
52 I_REGISTER_INTERFACE(icomp::IComponentStaticInfo);
53 I_REGISTER_INTERFACE(icomp::IPackagesManager);
54 I_REGISTER_INTERFACE(icomp::IRegistriesManager);
55 I_REGISTER_INTERFACE(icomp::IMetaInfoManager);
56 I_ASSIGN(m_registryLoaderCompPtr, "RegistryLoader", "Loader used to read registry", true, "RegistryLoader");
57 I_ASSIGN(m_configFilePathCompPtr, "ConfigFilePath", "Path of packages configuration file will be loaded, if enabled", false, "ConfigFilePath");
58 I_END_COMPONENT;
59
60 // reimplemented (icomp::IRegistryLoader)
61 virtual const icomp::IRegistry* GetRegistryFromFile(const QString& path) const override;
62
63 // reimplemented (icomp::IComponentEnvironmentManager)
64 virtual QString GetConfigFilePath() const override;
65 virtual QStringList GetProjectTargets() const override;
66
67 // reimplemented (icomp::IPackagesManager)
68 virtual bool LoadPackages(const QString& configFilePath = QString()) override;
69 virtual int GetPackageType(const QByteArray& packageId) const override;
70 virtual QString GetPackagePath(const QByteArray& packageId) const override;
71 virtual QString GetRegistryPath(const icomp::CComponentAddress& address) const override;
72
73 // reimplemented (icomp::IRegistriesManager)
74 virtual const icomp::IRegistry* GetRegistry(const icomp::CComponentAddress& address, const icomp::IRegistry* contextRegistryPtr = NULL) const override;
75
76 // reimplemented (icomp::IComponentListProvider)
77 virtual ComponentAddresses GetComponentAddresses(int typeFlag = CTF_ALL) const override;
78
79 // reimplemented (icomp::CComponentBase)
80 virtual void OnComponentCreated() override;
81
82protected:
84 {
85 public:
87
88 explicit LogingRegistry(CPackagesLoaderComp* parentPtr);
89
90 // reimplemented (icomp::IRegistry)
92 const QByteArray& elementId,
93 const icomp::CComponentAddress& address,
94 bool ensureElementCreated = true) override;
95
96 private:
97 CPackagesLoaderComp& m_parent;
98 };
99
100 virtual bool RegisterPackageFile(const QString& file);
101 virtual bool RegisterPackagesDir(const QString& subDir);
102 virtual bool LoadConfigFile(const QString& configFile);
103
104 icomp::GetPackageInfoFunc GetPackageFunction(const QFileInfo& fileInfo);
105
109 bool CheckAndMarkPath(const QDir& directory, const QString& path, QString& resultPath) const;
110
111private:
112 typedef QMap<QString, icomp::GetPackageInfoFunc> LibraryToInfoFuncMap;
113 LibraryToInfoFuncMap m_libraryToInfoFuncMap;
114
115 typedef QMap<QByteArray, QString> ComponentIdToRegistryFileMap;
116 struct CompositePackageInfo
117 {
119
120 QDir directory;
121 ComponentIdToRegistryFileMap componentIdToRegistryFileMap;
122 };
126 typedef QMap<QByteArray, QString> RealPackagesMap;
127 RealPackagesMap m_realPackagesMap;
128
132 typedef QMap<QByteArray, CompositePackageInfo> CompositePackagesMap;
133 CompositePackagesMap m_compositePackagesMap;
134
135 typedef istd::TDelPtr<icomp::IRegistry> RegistryPtr;
136 typedef QMap<QString, RegistryPtr> RegistriesMap;
137 typedef QMap<const icomp::IRegistry*, QFileInfo> InvRegistriesMap;
138
139 mutable RegistriesMap m_registriesMap;
140 mutable InvRegistriesMap m_invRegistriesMap;
141
145 typedef QSet<QString> PathList;
146 mutable PathList m_usedFilesList;
147
148 QString m_configFilePath;
149 QStringList m_projectTargets;
150
151 I_REF(ifile::IFilePersistence, m_registryLoaderCompPtr);
152 I_REF(ifile::IFileNameParam, m_configFilePathCompPtr);
153};
154
155
156} // namespace ipackage
157
158
159
160
Represents global address of component.
Standard implementation of registry.
Definition CRegistry.h:42
QSet< CComponentAddress > ComponentAddresses
This interface provide static information about component meta info.
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.
virtual ElementInfo * InsertElementInfo(const QByteArray &elementId, const icomp::CComponentAddress &address, bool ensureElementCreated=true) override
Insert new attribute info object to collection of attributes.
LogingRegistry(CPackagesLoaderComp *parentPtr)
Loads component packages from dynamic link libraries.
virtual QString GetPackagePath(const QByteArray &packageId) const override
Get directory path of specified component package.
virtual bool LoadConfigFile(const QString &configFile)
virtual const icomp::IRegistry * GetRegistry(const icomp::CComponentAddress &address, const icomp::IRegistry *contextRegistryPtr=NULL) const override
Get access to stored registry.
virtual const icomp::IRegistry * GetRegistryFromFile(const QString &path) const override
Get an ACF registry from a given file.
virtual int GetPackageType(const QByteArray &packageId) const override
Get type of package as defined in PackageType.
virtual bool LoadPackages(const QString &configFilePath=QString()) override
Configure environment for specified file path.
virtual bool RegisterPackagesDir(const QString &subDir)
virtual QStringList GetProjectTargets() const override
Get the list of project targets.
bool CheckAndMarkPath(const QDir &directory, const QString &path, QString &resultPath) const
Check if path was already visited and return enrolled value.
icomp::CEnvironmentManagerBase BaseClass2
icomp::GetPackageInfoFunc GetPackageFunction(const QFileInfo &fileInfo)
virtual ComponentAddresses GetComponentAddresses(int typeFlag=CTF_ALL) const override
Get addresses of known components.
ilog::CLoggerComponentBase BaseClass
virtual QString GetRegistryPath(const icomp::CComponentAddress &address) const override
Get registry file path, if it is composed registry.
virtual bool RegisterPackageFile(const QString &file)
virtual void OnComponentCreated() override
Called when component is created.
virtual QString GetConfigFilePath() const override
Get file path of real used config file.
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.
Describe information stored with each element.
Definition IRegistry.h:69