LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
InitializableObjectManager.h
Go to the documentation of this file.
1// Copyright 2002-2019 CEA LIST
2// SPDX-FileCopyrightText: 2022 CEA LIST <gael.de-chalendar@cea.fr>
3//
4// SPDX-License-Identifier: MIT
5
6/***************************************************************************
7 * Copyright (C) 2004-2019 by CEA LIST *
8 * *
9 ***************************************************************************/
10
11#ifndef LIMA_COMMON_ABSTRACTFACTORYPATTERN_INITIALIZABLEOBJECTMANAGER_H
12#define LIMA_COMMON_ABSTRACTFACTORYPATTERN_INITIALIZABLEOBJECTMANAGER_H
13
14#include "ObjectManager.h"
20
21namespace Lima
22{
23
30template <typename Object,typename InitializationParameters = NoParameters>
32{
33public:
34
41 const InitializationParameters& params);
42
49
54
58 const InitializationParameters& getInitializationParameters() const;
59
63 InitializationParameters& getInitializationParameters();
64
72
73protected:
74
80 virtual std::shared_ptr<Object> createObject(const std::string& id) override;
81
82private:
83
85 InitializationParameters m_params;
86
87};
88
89template <typename Object,typename InitializationParameters>
92 const InitializationParameters& params) :
93 ObjectManager<Object>(),
94 m_conf(conf),
95 m_params(params)
96{
97// std::cerr << this << "InitializableObjectManager::InitializableObjectManager " << m_conf.getName() << "'" << std::endl;
98}
99
100template <typename Object,typename InitializationParameters>
102{
103 return m_params;
104}
105
106template <typename Object,typename InitializationParameters>
111
112template <typename Object,typename InitializationParameters>
117
118template <typename Object,typename InitializationParameters>
123
124template <typename Object,typename InitializationParameters>
130
131template <typename Object,typename InitializationParameters>
133 const std::string& id)
134{
136 LDEBUG << "InitializableObjectManager::createObject" << this << id
137 << "from module" << &m_conf << m_conf.getName().c_str();
138 std::shared_ptr<Object> obj;
139 try
140 {
142
143 std::string classId;
144 try
145 {
146 classId=gconf.getAttribute("class");
147// std::cerr << "class id is '" << classId.c_str() << "' !" << std::endl;
148 }
150 {
151 std::cerr << "no class attribute in unitConfiguration "<< id << std::endl;
152 throw InvalidConfiguration("no class attribute in unitConfiguration !");
153 }
154 if (classId.empty())
155 {
156 std::cerr << "Empty class attribute in unitConfiguration " << id << "/class" << std::endl;
157 throw InvalidConfiguration("Empty class attribute in unitConfiguration!");
158 }
159 try
160 {
161 std::string libs=gconf.getAttribute("lib");
162 // parse string in case several libs are
163 std::string::size_type begin=0;
164 std::string::size_type i=libs.find(",",begin);
165 while (i!=std::string::npos) {
166 std::string libName(libs,begin,i-begin);
167// std::cerr << "import library '" << libName.c_str() << "'" << std::endl;
168 if (!Common::DynamicLibrariesManager::changeable().loadLibrary(libName))
169 {
170 std::cerr << "loadLibrary(\"" << libName << "\") method failed." << std::endl;
171 throw InvalidConfiguration("loadLibrary method failed.");
172 }
173 begin=i+1;
174 i=libs.find(",",begin);
175 }
176 std::string libName(libs,begin);
177// std::cerr << "import library '" << libName.c_str() << "'" << std::endl;
178 if (!Common::DynamicLibrariesManager::changeable().loadLibrary(libName))
179 {
180 std::cerr << "loadLibrary(\"" << libName << "\") method failed." << std::endl;
181 throw InvalidConfiguration("loadLibrary method failed.");
182 }
183 }
185 {
186 // optional
187 //LDEBUG << "no lib attribute in unitConfiguration";
188 }
189
190// std::cerr << "class id(2) is '" << classId.c_str() << "' !" << std::endl;
191 const std::shared_ptr<InitializableObjectFactory<Object>> fact=InitializableObjectFactory<Object>::getFactory(classId);
192 obj=fact->create(gconf,this);
193 }
195 {
196 std::stringstream s_mess;
197 s_mess << "No Object '" << id.c_str() << "' defined in module '" << m_conf.getName().c_str() << "'";
198 std::cerr << "InvalidConfiguration: " << s_mess.str().c_str() << std::endl;
199 throw InvalidConfiguration( s_mess.str() );
200 }
201 return obj;
202}
203
204} // Lima
205
206#endif
handle dynamic library opening (wrapper around QLibrary)
#define LDEBUG
Definition LimaCommon.h:157
#define ABSTRACTFACTORYPATTERNLOGINIT
Definition LimaCommon.h:198
return a message when an 'attribute' was not found
return a message when a 'group' was not found
Manage initialization of InitializableObjects using configuration module and parameters.
const Common::XMLConfigurationFiles::ModuleConfigurationStructure & getModuleConfigurationStructure() const
get ModuleConfigurationStructure
virtual ~InitializableObjectManager()
virtual destructor
const InitializationParameters & getInitializationParameters() const
get Initialization Parameters
virtual std::shared_ptr< Object > createObject(const std::string &id) override
create Object.
InitializableObjectManager(const Common::XMLConfigurationFiles::ModuleConfigurationStructure &conf, const InitializationParameters &params)
constructor with configuration module
Use this exception to signal an error in one of the configuration files.
Definition LimaCommon.h:345
Manager for objects.
static std::shared_ptr< InitializableObjectFactory< Object > > getFactory(const std::string &id)
get the factory corresponding to the given id
static DynamicLibrariesManager & changeable()
singleton accessor
Definition Singleton.h:71
originally detectModuleConfigurationStructure.h in detectlibraries
NAUTITIA.
launch exception related to the configuration file parsing