FastRTPS  Version 2.11.2
FastRTPS
XMLProfileManager.h
1 // Copyright 2017 Proyectos y Sistemas de Mantenimiento SL (eProsima).
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 #ifndef XML_PROFILE_MANAGER_H_
16 #define XML_PROFILE_MANAGER_H_
17 
18 #include <fastrtps/attributes/ParticipantAttributes.h>
19 #include <fastrtps/attributes/PublisherAttributes.h>
20 #include <fastrtps/attributes/SubscriberAttributes.h>
21 #include <fastrtps/xmlparser/XMLParserCommon.h>
22 #include <fastrtps/xmlparser/XMLParser.h>
23 #include <fastrtps/types/DynamicTypeBuilderFactory.h>
24 #include <fastrtps/types/DynamicTypeBuilder.h>
25 #include <fastrtps/types/DynamicPubSubType.h>
26 
27 #include <stdio.h>
28 #include <string>
29 #include <map>
30 
31 namespace eprosima {
32 namespace fastrtps {
33 namespace xmlparser {
34 
35 using participant_map_t = std::map<std::string, up_participant_t>;
36 using part_map_iterator_t = participant_map_t::iterator;
37 using publisher_map_t = std::map<std::string, up_publisher_t>;
38 using publ_map_iterator_t = publisher_map_t::iterator;
39 using subscriber_map_t = std::map<std::string, up_subscriber_t>;
40 using subs_map_iterator_t = subscriber_map_t::iterator;
41 using topic_map_t = std::map<std::string, up_topic_t>;
42 using topic_map_iterator_t = topic_map_t::iterator;
43 using requester_map_t = std::map<std::string, up_requester_t>;
44 using requester_map_iterator_t = requester_map_t::iterator;
45 using replier_map_t = std::map<std::string, up_replier_t>;
46 using replier_map_iterator_t = replier_map_t::iterator;
47 using xmlfiles_map_t = std::map<std::string, XMLP_ret>;
48 using xmlfile_map_iterator_t = xmlfiles_map_t::iterator;
49 
54 {
55 public:
56 
60  RTPS_DllAPI static void loadDefaultXMLFile();
61 
68  RTPS_DllAPI static XMLP_ret loadXMLFile(
69  const std::string& filename);
70 
78  RTPS_DllAPI static XMLP_ret loadXMLString(
79  const char* data,
80  size_t length);
81 
88  RTPS_DllAPI static XMLP_ret loadXMLNode(
89  tinyxml2::XMLDocument& doc);
90 
97  RTPS_DllAPI static XMLP_ret loadXMLProfiles(
98  tinyxml2::XMLElement& profiles);
99 
105  RTPS_DllAPI static XMLP_ret loadXMLDynamicTypes(
106  tinyxml2::XMLElement& types);
107 
112  RTPS_DllAPI static void library_settings(
114 
119  RTPS_DllAPI static const LibrarySettingsAttributes& library_settings();
120 
128  RTPS_DllAPI static XMLP_ret fillParticipantAttributes(
129  const std::string& profile_name,
130  ParticipantAttributes& atts,
131  bool log_error = true);
132 
134  RTPS_DllAPI static void getDefaultParticipantAttributes(
135  ParticipantAttributes& participant_attributes);
136 
144  RTPS_DllAPI static XMLP_ret fillPublisherAttributes(
145  const std::string& profile_name,
146  PublisherAttributes& atts,
147  bool log_error = true);
148 
150  RTPS_DllAPI static void getDefaultPublisherAttributes(
151  PublisherAttributes& publisher_attributes);
152 
160  RTPS_DllAPI static XMLP_ret fillSubscriberAttributes(
161  const std::string& profile_name,
162  SubscriberAttributes& atts,
163  bool log_error = true);
164 
166  RTPS_DllAPI static void getDefaultSubscriberAttributes(
167  SubscriberAttributes& subscriber_attributes);
168 
170  RTPS_DllAPI static bool insertTransportById(
171  const std::string& transport_id,
172  sp_transport_t transport);
173 
175  RTPS_DllAPI static sp_transport_t getTransportById(
176  const std::string& transport_id);
177 
184  RTPS_DllAPI static XMLP_ret fillTopicAttributes(
185  const std::string& profile_name,
186  TopicAttributes& atts);
187 
189  RTPS_DllAPI static void getDefaultTopicAttributes(
190  TopicAttributes& topic_attributes);
191 
193  RTPS_DllAPI static bool insertDynamicTypeByName(
194  const std::string& type_name,
196 
198  RTPS_DllAPI static p_dynamictypebuilder_t getDynamicTypeByName(
199  const std::string& type_name);
200 
201 
208  RTPS_DllAPI static XMLP_ret fillRequesterAttributes(
209  const std::string& profile_name,
210  RequesterAttributes& atts);
211 
218  RTPS_DllAPI static XMLP_ret fillReplierAttributes(
219  const std::string& profile_name,
220  ReplierAttributes& atts);
221 
227  RTPS_DllAPI static void DeleteInstance()
228  {
229  participant_profiles_.clear();
230  publisher_profiles_.clear();
231  subscriber_profiles_.clear();
232  requester_profiles_.clear();
233  replier_profiles_.clear();
234  topic_profiles_.clear();
235  xml_files_.clear();
236  transport_profiles_.clear();
237  }
238 
245  const std::string& type_name)
246  {
247  if (dynamic_types_.find(type_name) != dynamic_types_.end())
248  {
249  return new types::DynamicPubSubType(dynamic_types_[type_name]->build());
250  }
251  return nullptr;
252  }
253 
258  RTPS_DllAPI static void DeleteDynamicPubSubType(
260  {
261  delete type;
262  }
263 
264 private:
265 
266  RTPS_DllAPI static XMLP_ret extractProfiles(
267  up_base_node_t properties,
268  const std::string& filename);
269 
270  RTPS_DllAPI static XMLP_ret extractParticipantProfile(
271  up_base_node_t& profile,
272  const std::string& filename);
273 
274  RTPS_DllAPI static XMLP_ret extractPublisherProfile(
275  up_base_node_t& profile,
276  const std::string& filename);
277 
278  RTPS_DllAPI static XMLP_ret extractSubscriberProfile(
279  up_base_node_t& profile,
280  const std::string& filename);
281 
282  RTPS_DllAPI static XMLP_ret extractTopicProfile(
283  up_base_node_t& profile,
284  const std::string& filename);
285 
286  RTPS_DllAPI static XMLP_ret extractRequesterProfile(
287  up_base_node_t& profile,
288  const std::string& filename);
289 
290  RTPS_DllAPI static XMLP_ret extractReplierProfile(
291  up_base_node_t& profile,
292  const std::string& filename);
293 
294  static BaseNode* root;
295 
296  static LibrarySettingsAttributes library_settings_;
297 
298  static participant_map_t participant_profiles_;
299 
300  static publisher_map_t publisher_profiles_;
301 
302  static subscriber_map_t subscriber_profiles_;
303 
304  static topic_map_t topic_profiles_;
305 
306  static requester_map_t requester_profiles_;
307 
308  static replier_map_t replier_profiles_;
309 
310  static xmlfiles_map_t xml_files_;
311 
312  static sp_transport_map_t transport_profiles_;
313 
314  static p_dynamictype_map_t dynamic_types_;
315 };
316 
317 } /* xmlparser */
318 } /* namespace */
319 } /* namespace eprosima */
320 
321 #endif // ifndef XML_PROFILE_MANAGER_H_
eprosima::fastrtps::ReplierAttributes
Definition: ReplierAttributes.hpp:28
eprosima::fastrtps::xmlparser::XMLProfileManager::loadXMLString
static RTPS_DllAPI XMLP_ret loadXMLString(const char *data, size_t length)
Load a profiles XML string.
eprosima::fastrtps::xmlparser::XMLProfileManager::getDynamicTypeByName
static RTPS_DllAPI p_dynamictypebuilder_t getDynamicTypeByName(const std::string &type_name)
Retrieves a transport instance by its name.
eprosima::fastrtps::xmlparser::sp_transport_t
std::shared_ptr< fastdds::rtps::TransportDescriptorInterface > sp_transport_t
Definition: XMLParser.h:50
eprosima::fastrtps::xmlparser::XMLProfileManager::insertTransportById
static RTPS_DllAPI bool insertTransportById(const std::string &transport_id, sp_transport_t transport)
Add a new transport instance along with its id.
eprosima::fastrtps::xmlparser::XMLProfileManager::getDefaultParticipantAttributes
static RTPS_DllAPI void getDefaultParticipantAttributes(ParticipantAttributes &participant_attributes)
Fills participant_attributes with the default values.
eprosima::fastrtps::xmlparser::p_dynamictype_map_t
std::map< std::string, p_dynamictypebuilder_t > p_dynamictype_map_t
Definition: XMLParser.h:53
eprosima::fastrtps::xmlparser::XMLProfileManager::fillSubscriberAttributes
static RTPS_DllAPI XMLP_ret fillSubscriberAttributes(const std::string &profile_name, SubscriberAttributes &atts, bool log_error=true)
Search for the profile specified and fill the structure.
eprosima::fastrtps::xmlparser::XMLProfileManager::library_settings
static const RTPS_DllAPI LibrarySettingsAttributes & library_settings()
Library settings getter.
eprosima::fastrtps::xmlparser::topic_map_t
std::map< std::string, up_topic_t > topic_map_t
Definition: XMLProfileManager.h:41
eprosima::fastrtps::ParticipantAttributes
Class ParticipantAttributes, used by the user to define the attributes of a Participant.
Definition: ParticipantAttributes.h:34
eprosima::fastrtps::xmlparser::XMLProfileManager
Class XMLProfileManager, used to make available profiles from XML file.
Definition: XMLProfileManager.h:53
eprosima::fastrtps::xmlparser::XMLProfileManager::fillParticipantAttributes
static RTPS_DllAPI XMLP_ret fillParticipantAttributes(const std::string &profile_name, ParticipantAttributes &atts, bool log_error=true)
Search for the profile specified and fill the structure.
eprosima::fastrtps::xmlparser::BaseNode
Definition: XMLTree.h:34
eprosima::fastrtps::xmlparser::XMLProfileManager::loadXMLNode
static RTPS_DllAPI XMLP_ret loadXMLNode(tinyxml2::XMLDocument &doc)
Load a profiles XML node.
eprosima::fastrtps::xmlparser::part_map_iterator_t
participant_map_t::iterator part_map_iterator_t
Definition: XMLProfileManager.h:36
eprosima::fastrtps::PublisherAttributes
Class PublisherAttributes, used by the user to define the attributes of a Publisher.
Definition: PublisherAttributes.h:40
eprosima::fastrtps::types::DynamicTypeBuilder
Definition: DynamicTypeBuilder.h:31
eprosima::fastrtps::xmlparser::XMLProfileManager::getDefaultPublisherAttributes
static RTPS_DllAPI void getDefaultPublisherAttributes(PublisherAttributes &publisher_attributes)
Fills publisher_attributes with the default values.
eprosima::fastrtps::xmlparser::XMLProfileManager::fillPublisherAttributes
static RTPS_DllAPI XMLP_ret fillPublisherAttributes(const std::string &profile_name, PublisherAttributes &atts, bool log_error=true)
Search for the profile specified and fill the structure.
eprosima::fastrtps::xmlparser::XMLProfileManager::DeleteInstance
static RTPS_DllAPI void DeleteInstance()
Deletes the XMLProfileManager instance.
Definition: XMLProfileManager.h:227
eprosima::fastrtps::xmlparser::XMLProfileManager::fillTopicAttributes
static RTPS_DllAPI XMLP_ret fillTopicAttributes(const std::string &profile_name, TopicAttributes &atts)
Search for the profile specified and fill the structure.
eprosima::fastrtps::xmlparser::XMLProfileManager::getDefaultSubscriberAttributes
static RTPS_DllAPI void getDefaultSubscriberAttributes(SubscriberAttributes &subscriber_attributes)
Fills subscriber_attributes with the default values.
eprosima::fastrtps::types::DynamicPubSubType
Definition: DynamicPubSubType.h:28
eprosima::fastrtps::xmlparser::sp_transport_map_t
std::map< std::string, sp_transport_t > sp_transport_map_t
Definition: XMLParser.h:51
eprosima::fastrtps::xmlparser::requester_map_iterator_t
requester_map_t::iterator requester_map_iterator_t
Definition: XMLProfileManager.h:44
eprosima::fastrtps::xmlparser::XMLProfileManager::loadXMLDynamicTypes
static RTPS_DllAPI XMLP_ret loadXMLDynamicTypes(tinyxml2::XMLElement &types)
Load a dynamic types XML node.
eprosima::fastrtps::xmlparser::XMLProfileManager::loadXMLFile
static RTPS_DllAPI XMLP_ret loadXMLFile(const std::string &filename)
Load a profiles XML file.
eprosima::fastrtps::xmlparser::XMLProfileManager::fillReplierAttributes
static RTPS_DllAPI XMLP_ret fillReplierAttributes(const std::string &profile_name, ReplierAttributes &atts)
Search for the profile specified and fill the structure.
eprosima::fastrtps::xmlparser::publ_map_iterator_t
publisher_map_t::iterator publ_map_iterator_t
Definition: XMLProfileManager.h:38
eprosima::fastrtps::xmlparser::XMLProfileManager::DeleteDynamicPubSubType
static RTPS_DllAPI void DeleteDynamicPubSubType(types::DynamicPubSubType *type)
Deletes the given DynamicPubSubType previously created by calling XMLProfileManager::CreateDynamicPub...
Definition: XMLProfileManager.h:258
eprosima::fastrtps::xmlparser::topic_map_iterator_t
topic_map_t::iterator topic_map_iterator_t
Definition: XMLProfileManager.h:42
eprosima::fastrtps::xmlparser::xmlfiles_map_t
std::map< std::string, XMLP_ret > xmlfiles_map_t
Definition: XMLProfileManager.h:47
eprosima::fastrtps::xmlparser::publisher_map_t
std::map< std::string, up_publisher_t > publisher_map_t
Definition: XMLProfileManager.h:37
eprosima::fastrtps::xmlparser::XMLProfileManager::insertDynamicTypeByName
static RTPS_DllAPI bool insertDynamicTypeByName(const std::string &type_name, p_dynamictypebuilder_t type)
Add a new dynamic type instance along with its name.
eprosima::fastrtps::xmlparser::replier_map_iterator_t
replier_map_t::iterator replier_map_iterator_t
Definition: XMLProfileManager.h:46
eprosima::fastrtps::xmlparser::XMLP_ret
XMLP_ret
Enum class XMLP_ret, used to provide a strongly typed result from the operations within this module.
Definition: XMLParserCommon.h:25
eprosima::fastrtps::xmlparser::XMLProfileManager::CreateDynamicPubSubType
static RTPS_DllAPI types::DynamicPubSubType * CreateDynamicPubSubType(const std::string &type_name)
Retrieves a DynamicPubSubType for the given dynamic type name.
Definition: XMLProfileManager.h:244
eprosima::fastrtps::xmlparser::XMLProfileManager::loadXMLProfiles
static RTPS_DllAPI XMLP_ret loadXMLProfiles(tinyxml2::XMLElement &profiles)
Load a profiles XML node.
eprosima::fastrtps::xmlparser::xmlfile_map_iterator_t
xmlfiles_map_t::iterator xmlfile_map_iterator_t
Definition: XMLProfileManager.h:48
eprosima::fastrtps::xmlparser::requester_map_t
std::map< std::string, up_requester_t > requester_map_t
Definition: XMLProfileManager.h:43
eprosima::fastrtps::xmlparser::XMLProfileManager::loadDefaultXMLFile
static RTPS_DllAPI void loadDefaultXMLFile()
Load the default profiles XML file.
eprosima::fastrtps::xmlparser::participant_map_t
std::map< std::string, up_participant_t > participant_map_t
Definition: XMLProfileManager.h:35
eprosima::fastrtps::xmlparser::XMLProfileManager::getTransportById
static RTPS_DllAPI sp_transport_t getTransportById(const std::string &transport_id)
Retrieves a transport instance by its id.
eprosima::fastrtps::RequesterAttributes
Definition: RequesterAttributes.hpp:28
eprosima::fastrtps::xmlparser::replier_map_t
std::map< std::string, up_replier_t > replier_map_t
Definition: XMLProfileManager.h:45
eprosima::fastrtps::xmlparser::XMLProfileManager::getDefaultTopicAttributes
static RTPS_DllAPI void getDefaultTopicAttributes(TopicAttributes &topic_attributes)
Fills topic_attributes with the default values.
eprosima::fastrtps::TopicAttributes
Class TopicAttributes, used by the user to define the attributes of the topic associated with a Publi...
Definition: TopicAttributes.h:35
eprosima::fastrtps::LibrarySettingsAttributes
Class LibraySettingsAttributes, used by the user to define the FastRTPS library behaviour.
Definition: LibrarySettingsAttributes.h:37
eprosima::fastrtps::xmlparser::up_base_node_t
std::unique_ptr< BaseNode > up_base_node_t
Definition: XMLParser.h:42
eprosima
Definition: LibrarySettingsAttributes.h:23
eprosima::fastrtps::xmlparser::subs_map_iterator_t
subscriber_map_t::iterator subs_map_iterator_t
Definition: XMLProfileManager.h:40
eprosima::fastrtps::SubscriberAttributes
Class SubscriberAttributes, used by the user to define the attributes of a Subscriber.
Definition: SubscriberAttributes.h:38
eprosima::fastrtps::xmlparser::subscriber_map_t
std::map< std::string, up_subscriber_t > subscriber_map_t
Definition: XMLProfileManager.h:39
eprosima::fastrtps::xmlparser::XMLProfileManager::fillRequesterAttributes
static RTPS_DllAPI XMLP_ret fillRequesterAttributes(const std::string &profile_name, RequesterAttributes &atts)
Search for the profile specified and fill the structure.