source: pacpusframework/branches/2.0-beta1/include/Pacpus/kernel/ComponentManager.h@ 89

Last change on this file since 89 was 89, checked in by morasjul, 11 years ago

PACPUS 2.0 Beta deployed in new branch

Major changes:
-Add communication interface between components
-Add examples for communications interface (TestComponents)
-Move to Qt5 support

  • Property svn:executable set to *
File size: 5.5 KB
Line 
1// %pacpus:license{
2// This file is part of the PACPUS framework distributed under the
3// CECILL-C License, Version 1.0.
4// %pacpus:license}
5/// @file
6/// @author Gerald Dherbomez <firstname.surname@utc.fr>
7/// @date January, 2006
8/// @version $Id: ComponentManager.h 76 2013-01-10 17:05:10Z kurdejma $
9/// @copyright Copyright (c) UTC/CNRS Heudiasyc 2006 - 2013. All rights reserved.
10/// @brief Brief description.
11///
12/// Purpose: This class records the components and manages them
13/// This class is a singleton
14/// Use the static ComponentManager::create() function
15/// to get a pointer on this object.
16
17#ifndef DEF_PACPUS_COMPONENTMANAGER_H
18#define DEF_PACPUS_COMPONENTMANAGER_H
19
20#include <Pacpus/kernel/pacpus.h>
21#include <Pacpus/kernel/ComponentFactoryBase.h>
22#include <Pacpus/kernel/PacpusPluginInterface.h>
23#include <Pacpus/kernel/XmlConfigFile.h>
24
25#include <cstddef>
26#include <QList>
27#include <QMap>
28#include <QPluginLoader>
29
30namespace pacpus {
31
32class ComponentBase;
33
34/// @todo Documentation
35typedef QMap<QString, ComponentBase *> ComponentMap;
36/// @todo Documentation
37typedef QMap<QString, ComponentFactoryBase *> FactoryMap;
38
39/// Singleton recording the components and managing them.
40class ComponentManager
41{
42 friend class ComponentBase;
43
44public:
45 /// @returns a pointer to the ComponentManager object
46 /// @deprecated Use getInstance()
47 PACPUS_DEPRECATED_MSG( static PACPUSLIB_API ComponentManager * create(), "use 'getInstance()'" );
48
49 /// Returns an instance of the singleton ComponentManager class.
50 /// @returns Pointer to the ComponentManager singleton.
51 static PACPUSLIB_API ComponentManager* getInstance();
52
53 /// Destroys the ComponentManager singleton.
54 ///
55 /// After this call, every pointer to the ComponentManager becomes invalid.
56 static PACPUSLIB_API void destroy();
57
58 /// Automatic deleter class.
59 struct destroyer {
60 /// Invokes ComponentManager::destroy() method if @b mgr pointer is not null.
61 void operator()(ComponentManager * mgr) const
62 {
63 if (!mgr) {
64 return;
65 }
66 mgr->destroy();
67 }
68 };
69
70 /** Load the components included in the XML config file.
71 * @param file Name of the XML file.
72 * @return Number of components loaded by the manager.
73 */
74 PACPUSLIB_API std::size_t loadComponents(const QString& file);
75
76 /** Start all the components
77 * @return True if all the component has been started, otherwise false.
78 */
79 PACPUSLIB_API bool start();
80
81 /** Start only the component passed in parameter.
82 * @param component Component to start.
83 * @return True if the component exists and has been started, otherwise false.
84 */
85 PACPUSLIB_API bool start(const QString& component);
86
87 /** Stop all the components
88 * @return True if all the component has been stopped, otherwise false.
89 */
90 PACPUSLIB_API bool stop();
91
92 /** Stop only the component passed in parameter.
93 * @param component Component to stop.
94 * @return True if the component has been stopped, otherwise false.
95 */
96 PACPUSLIB_API bool stop(const QString& component);
97
98 /** Get a pointer to the component referred by @em name.
99 * @param name Name of the component.
100 * @return Pointer to the component if it exists, otherwise @em NULL.
101 */
102 PACPUSLIB_API ComponentBase* getComponent(const QString& name);
103
104 /** Get the list of all the names of the component known by the manager.
105 * @return List of all the component's name.
106 */
107 PACPUSLIB_API QStringList getAllComponentsName() const;
108
109 /** Load a new plugin from the file filename (it may be a .so/.dll file)
110 * @param filename Name of the shared object or the dll.
111 * @return True if the plugin has been loaded, otherwise false.
112 */
113 PACPUSLIB_API bool loadPlugin(const QString& filename);
114
115private:
116 /// Create a new component of type 'type' and with the name 'name'
117 bool createComponent(const QString& type, const QString& name);
118
119 bool createConnection(const QString& type, const QString& name, const QString& , int );
120
121 bool registerComponent(ComponentBase* addr, const QString& name);
122 bool registerComponentFactory(ComponentFactoryBase* addr, const QString& type);
123
124 bool unRegisterComponent(const QString& name);
125 bool unRegisterComponentFactory(const QString& type);
126
127 // Allow 2 functions to access to private members of ComponentManager
128 friend void ComponentFactoryBase::addFactory(ComponentFactoryBase* addr, const QString & type);
129 friend void ComponentFactoryBase::addComponent(const QString & name);
130
131 /// private constructor accessible only via static create() function
132 ComponentManager();
133
134 /// private destructor accessible only via static destroy() function
135 ~ComponentManager();
136
137private:
138 /// The static pointer to this object (ComponentManager is a singleton)
139 static ComponentManager * mInstance;
140
141 /// The map of available factories of component
142 FactoryMap factoryMap_;
143
144 /// The map of loaded components
145 ComponentMap componentMap_;
146
147 /// a pointer on the xml interface
148 pacpus::XmlConfigFile * xmlTree_;
149
150 /// a list of QObject in which plugins are embedded
151 QObjectList pluginList_;
152
153 /// The object used to load the plugins
154 QPluginLoader pluginLoader_;
155};
156
157} // namespace pacpus
158
159#endif
Note: See TracBrowser for help on using the repository browser.