mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 00:31:14 +00:00
move fairmq json parser to fairmq/options
This commit is contained in:
parent
f54fbb0f59
commit
a2ebbbe450
|
@ -6,7 +6,9 @@
|
||||||
# copied verbatim in the file "LICENSE" #
|
# copied verbatim in the file "LICENSE" #
|
||||||
################################################################################
|
################################################################################
|
||||||
#Temporary for test
|
#Temporary for test
|
||||||
add_subdirectory (options/ProgOptionTest)
|
#add_subdirectory (options/ProgOptionTest)
|
||||||
|
configure_file(${CMAKE_SOURCE_DIR}/fairmq/options/ProgOptionTest/macro/bsampler-sink.json ${CMAKE_BINARY_DIR}/bin/bsampler-sink.json)
|
||||||
|
|
||||||
Set(INCLUDE_DIRECTORIES
|
Set(INCLUDE_DIRECTORIES
|
||||||
${CMAKE_SOURCE_DIR}/fairmq
|
${CMAKE_SOURCE_DIR}/fairmq
|
||||||
${CMAKE_SOURCE_DIR}/fairmq/devices
|
${CMAKE_SOURCE_DIR}/fairmq/devices
|
||||||
|
@ -76,7 +78,7 @@ set(SRCS
|
||||||
"devices/FairMQMerger.cxx"
|
"devices/FairMQMerger.cxx"
|
||||||
"options/FairProgOptions.cxx"
|
"options/FairProgOptions.cxx"
|
||||||
"options/FairMQProgOptions.cxx"
|
"options/FairMQProgOptions.cxx"
|
||||||
"options/FairMQChannel.cxx"
|
"options/FairMQParser.cxx"
|
||||||
"FairMQPoller.cxx"
|
"FairMQPoller.cxx"
|
||||||
"examples/req-rep/FairMQExampleClient.cxx"
|
"examples/req-rep/FairMQExampleClient.cxx"
|
||||||
"examples/req-rep/FairMQExampleServer.cxx"
|
"examples/req-rep/FairMQExampleServer.cxx"
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
#include "FairMQParser.h"
|
#include "FairMQParser.h"
|
||||||
#include "FairMQLogger.h"
|
#include "FairMQLogger.h"
|
||||||
#include <boost/property_tree/xml_parser.hpp>
|
|
||||||
|
|
||||||
// WARNING : pragma commands to hide boost (1.54.0) warning
|
// WARNING : pragma commands to hide boost (1.54.0) warning
|
||||||
// TODO : remove these pragma commands when boost will fix this issue in future release
|
// TODO : remove these pragma commands when boost will fix this issue in future release
|
||||||
|
@ -18,11 +17,10 @@
|
||||||
|
|
||||||
namespace FairMQParser
|
namespace FairMQParser
|
||||||
{
|
{
|
||||||
no_id_exception NoIdErr;
|
|
||||||
|
|
||||||
// TODO : add key-value map<string,string> parameter for replacing/updating values from keys
|
// TODO : add key-value map<string,string> parameter for replacing/updating values from keys
|
||||||
// function that convert property tree (given the xml or json structure) to FairMQMap
|
// function that convert property tree (given the xml or json structure) to FairMQMap
|
||||||
FairMQMap boost_ptree_to_MQMap(const boost::property_tree::ptree& pt, const std::string& device_id, const std::string& root_node, const std::string& format_flag)
|
FairMQMap ptreeToMQMap(const boost::property_tree::ptree& pt, const std::string& device_id, const std::string& root_node, const std::string& format_flag)
|
||||||
{
|
{
|
||||||
// Create fair mq map
|
// Create fair mq map
|
||||||
FairMQMap MQChannelMap;
|
FairMQMap MQChannelMap;
|
||||||
|
@ -31,10 +29,6 @@ namespace FairMQParser
|
||||||
std::string kdevice_id;
|
std::string kdevice_id;
|
||||||
std::string kchannel;
|
std::string kchannel;
|
||||||
|
|
||||||
if(device_id.empty())
|
|
||||||
throw NoIdErr;
|
|
||||||
|
|
||||||
|
|
||||||
// do a first loop just to print the device-id in xml/json input
|
// do a first loop just to print the device-id in xml/json input
|
||||||
for(const auto& p : pt.get_child(root_node))
|
for(const auto& p : pt.get_child(root_node))
|
||||||
{
|
{
|
||||||
|
@ -156,97 +150,19 @@ namespace FairMQParser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
//----------- filename version
|
|
||||||
FairMQMap XML::UserParser(const std::string& filename, const std::string& device_id, const std::string& root_node)
|
|
||||||
{
|
|
||||||
boost::property_tree::ptree pt;
|
|
||||||
boost::property_tree::read_xml(filename, pt);
|
|
||||||
return boost_ptree_to_MQMap(pt,device_id,root_node,"xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//----------- stringstream version
|
|
||||||
FairMQMap XML::UserParser(std::stringstream& input_ss, const std::string& device_id, const std::string& root_node)
|
|
||||||
{
|
|
||||||
boost::property_tree::ptree pt;
|
|
||||||
boost::property_tree::read_xml(input_ss, pt);
|
|
||||||
return boost_ptree_to_MQMap(pt,device_id,root_node,"xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
FairMQMap JSON::UserParser(const std::string& filename, const std::string& device_id, const std::string& root_node)
|
FairMQMap JSON::UserParser(const std::string& filename, const std::string& device_id, const std::string& root_node)
|
||||||
{
|
{
|
||||||
boost::property_tree::ptree pt;
|
boost::property_tree::ptree pt;
|
||||||
boost::property_tree::read_json(filename, pt);
|
boost::property_tree::read_json(filename, pt);
|
||||||
return boost_ptree_to_MQMap(pt,device_id,root_node,"json");
|
return ptreeToMQMap(pt,device_id,root_node,"json");
|
||||||
}
|
}
|
||||||
|
|
||||||
FairMQMap JSON::UserParser(std::stringstream& input_ss, const std::string& device_id, const std::string& root_node)
|
FairMQMap JSON::UserParser(std::stringstream& input_ss, const std::string& device_id, const std::string& root_node)
|
||||||
{
|
{
|
||||||
boost::property_tree::ptree pt;
|
boost::property_tree::ptree pt;
|
||||||
boost::property_tree::read_json(input_ss, pt);
|
boost::property_tree::read_json(input_ss, pt);
|
||||||
return boost_ptree_to_MQMap(pt,device_id,root_node,"json");
|
return ptreeToMQMap(pt,device_id,root_node,"json");
|
||||||
}
|
}
|
||||||
|
|
||||||
// other xml examples
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
boost::property_tree::ptree MQXML2::UserParser(const std::string& filename)
|
|
||||||
{
|
|
||||||
boost::property_tree::ptree pt;
|
|
||||||
boost::property_tree::read_xml(filename, pt);
|
|
||||||
return pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TODO : finish implementation
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
boost::property_tree::ptree MQXML3::UserParser(const std::string& filename, const std::string& devicename)
|
|
||||||
{
|
|
||||||
// Create an empty property tree object
|
|
||||||
boost::property_tree::ptree pt;
|
|
||||||
boost::property_tree::read_xml(filename, pt);
|
|
||||||
|
|
||||||
|
|
||||||
// Create fair mq map
|
|
||||||
|
|
||||||
auto xml = pt.get_child("");
|
|
||||||
std::vector<std::pair<std::string, boost::property_tree::ptree>> match;
|
|
||||||
std::pair<std::string, boost::property_tree::ptree> device_match;
|
|
||||||
|
|
||||||
ProcessTree(xml.begin (), xml.end (), std::back_inserter(match),
|
|
||||||
[] (const std::string& key) { return key == "device"; });
|
|
||||||
|
|
||||||
|
|
||||||
// for each device
|
|
||||||
for (const auto& pair: match)
|
|
||||||
{
|
|
||||||
if(pair.second.get<std::string>("<xmlattr>.name") == devicename)
|
|
||||||
{
|
|
||||||
device_match=pair;
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//match.erase(std::remove(match.begin(), match.end(), pair), match.end());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//std::cout << "pair.first " << pair.first << std::endl;//device
|
|
||||||
//std::cout << "\t node = " << pair.first
|
|
||||||
// << "\t name = " << pair.second.get<std::string>("<xmlattr>.name")
|
|
||||||
// << "\t id = " << pair.second.get<std::string>("<xmlattr>.id");
|
|
||||||
//std::cout<<std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
return device_match.second;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // end FairMQParser namespace
|
} // end FairMQParser namespace
|
38
fairmq/options/FairMQParser.h
Normal file
38
fairmq/options/FairMQParser.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* File: FairMQParser.h
|
||||||
|
* Author: winckler
|
||||||
|
*
|
||||||
|
* Created on May 14, 2015, 5:01 PM
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FAIRMQPARSER_H
|
||||||
|
#define FAIRMQPARSER_H
|
||||||
|
|
||||||
|
// FairRoot
|
||||||
|
#include "FairMQChannel.h"
|
||||||
|
|
||||||
|
// Boost
|
||||||
|
#include <boost/property_tree/ptree.hpp>
|
||||||
|
|
||||||
|
// std
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
|
namespace FairMQParser
|
||||||
|
{
|
||||||
|
|
||||||
|
typedef std::map<std::string, std::vector<FairMQChannel> > FairMQMap;
|
||||||
|
FairMQMap ptreeToMQMap(const boost::property_tree::ptree& pt, const std::string& device_id, const std::string& root_node, const std::string& format_flag="json");
|
||||||
|
|
||||||
|
struct JSON
|
||||||
|
{
|
||||||
|
FairMQMap UserParser(const std::string& filename, const std::string& device_id, const std::string& root_node="fairMQOptions");
|
||||||
|
FairMQMap UserParser(std::stringstream& input_ss, const std::string& device_id, const std::string& root_node="fairMQOptions");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // end FairMQParser namespace
|
||||||
|
#endif /* FAIRMQPARSER_H */
|
||||||
|
|
|
@ -52,7 +52,7 @@ ${Boost_LIBRARY_DIRS}
|
||||||
link_directories(${LINK_DIRECTORIES})
|
link_directories(${LINK_DIRECTORIES})
|
||||||
|
|
||||||
Set(SRCS
|
Set(SRCS
|
||||||
lib/FairMQParser.cxx
|
lib/FairMQParserExample.cxx
|
||||||
)
|
)
|
||||||
|
|
||||||
Set(LIBRARY_NAME ProgOptionTest)
|
Set(LIBRARY_NAME ProgOptionTest)
|
||||||
|
|
97
fairmq/options/ProgOptionTest/lib/FairMQParserExample.cxx
Normal file
97
fairmq/options/ProgOptionTest/lib/FairMQParserExample.cxx
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
* File: FairMQParserExample.cxx
|
||||||
|
* Author: winckler
|
||||||
|
*
|
||||||
|
* Created on May 14, 2015, 5:01 PM
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "FairMQParserExample.h"
|
||||||
|
#include "FairMQLogger.h"
|
||||||
|
#include <boost/property_tree/xml_parser.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
namespace FairMQParser
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
//----------- filename version
|
||||||
|
FairMQMap XML::UserParser(const std::string& filename, const std::string& device_id, const std::string& root_node)
|
||||||
|
{
|
||||||
|
boost::property_tree::ptree pt;
|
||||||
|
boost::property_tree::read_xml(filename, pt);
|
||||||
|
return ptreeToMQMap(pt,device_id,root_node,"xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//----------- stringstream version
|
||||||
|
FairMQMap XML::UserParser(std::stringstream& input_ss, const std::string& device_id, const std::string& root_node)
|
||||||
|
{
|
||||||
|
boost::property_tree::ptree pt;
|
||||||
|
boost::property_tree::read_xml(input_ss, pt);
|
||||||
|
return ptreeToMQMap(pt,device_id,root_node,"xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// other xml examples
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
boost::property_tree::ptree MQXML2::UserParser(const std::string& filename)
|
||||||
|
{
|
||||||
|
boost::property_tree::ptree pt;
|
||||||
|
boost::property_tree::read_xml(filename, pt);
|
||||||
|
return pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TODO : finish implementation
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
boost::property_tree::ptree MQXML3::UserParser(const std::string& filename, const std::string& devicename)
|
||||||
|
{
|
||||||
|
// Create an empty property tree object
|
||||||
|
boost::property_tree::ptree pt;
|
||||||
|
boost::property_tree::read_xml(filename, pt);
|
||||||
|
|
||||||
|
|
||||||
|
// Create fair mq map
|
||||||
|
|
||||||
|
auto xml = pt.get_child("");
|
||||||
|
std::vector<std::pair<std::string, boost::property_tree::ptree>> match;
|
||||||
|
std::pair<std::string, boost::property_tree::ptree> device_match;
|
||||||
|
|
||||||
|
ProcessTree(xml.begin (), xml.end (), std::back_inserter(match),
|
||||||
|
[] (const std::string& key) { return key == "device"; });
|
||||||
|
|
||||||
|
|
||||||
|
// for each device
|
||||||
|
for (const auto& pair: match)
|
||||||
|
{
|
||||||
|
if(pair.second.get<std::string>("<xmlattr>.name") == devicename)
|
||||||
|
{
|
||||||
|
device_match=pair;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//match.erase(std::remove(match.begin(), match.end(), pair), match.end());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//std::cout << "pair.first " << pair.first << std::endl;//device
|
||||||
|
//std::cout << "\t node = " << pair.first
|
||||||
|
// << "\t name = " << pair.second.get<std::string>("<xmlattr>.name")
|
||||||
|
// << "\t id = " << pair.second.get<std::string>("<xmlattr>.id");
|
||||||
|
//std::cout<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return device_match.second;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} // end FairMQParser namespace
|
|
@ -1,15 +1,16 @@
|
||||||
/*
|
/*
|
||||||
* File: FairMQParser.h
|
* File: FairMQParserExample.h
|
||||||
* Author: winckler
|
* Author: winckler
|
||||||
*
|
*
|
||||||
* Created on May 14, 2015, 5:01 PM
|
* Created on May 14, 2015, 5:01 PM
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FAIRMQPARSER_H
|
#ifndef FAIRMQPARSEREXAMPLE_H
|
||||||
#define FAIRMQPARSER_H
|
#define FAIRMQPARSEREXAMPLE_H
|
||||||
|
|
||||||
// FairRoot
|
// FairRoot
|
||||||
#include "FairMQChannel.h"
|
#include "FairMQChannel.h"
|
||||||
|
#include "FairMQParser.h"
|
||||||
|
|
||||||
// Boost
|
// Boost
|
||||||
#include <boost/property_tree/ptree.hpp>
|
#include <boost/property_tree/ptree.hpp>
|
||||||
|
@ -23,9 +24,6 @@
|
||||||
namespace FairMQParser
|
namespace FairMQParser
|
||||||
{
|
{
|
||||||
|
|
||||||
typedef std::map<std::string, std::vector<FairMQChannel> > FairMQMap;
|
|
||||||
FairMQMap boost_ptree_to_MQMap(const boost::property_tree::ptree& pt, const std::string& device_id, const std::string& root_node, const std::string& format_flag="json");
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
/////////////////////////////////// XML ////////////////////////////////////
|
/////////////////////////////////// XML ////////////////////////////////////
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -52,14 +50,7 @@ namespace FairMQParser
|
||||||
boost::property_tree::ptree UserParser(const std::string& filename, const std::string& root_node);
|
boost::property_tree::ptree UserParser(const std::string& filename, const std::string& root_node);
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////// JSON ///////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
struct JSON
|
|
||||||
{
|
|
||||||
FairMQMap UserParser(const std::string& filename, const std::string& device_id, const std::string& root_node="fairMQOptions");
|
|
||||||
FairMQMap UserParser(std::stringstream& input_ss, const std::string& device_id, const std::string& root_node="fairMQOptions");
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -94,10 +85,10 @@ namespace FairMQParser
|
||||||
{
|
{
|
||||||
virtual const char* what() const throw()
|
virtual const char* what() const throw()
|
||||||
{
|
{
|
||||||
return "Empty string for the device-id in FairMQParser::boost_ptree_to_MQMap(...) function";
|
return "Empty string for the device-id in FairMQParser::ptreeToMQMap(...) function";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end FairMQParser namespace
|
} // end FairMQParser namespace
|
||||||
#endif /* FAIRMQPARSER_H */
|
#endif /* FAIRMQPARSEREXAMPLE_H */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user