7 #include <stdair/service/Logger.hpp>
8 #include <stdair/stdair_exceptions.hpp>
15 namespace bsc = boost::spirit::classic;
19 namespace InventoryParserHelper {
27 : _flightDate (ioFlightDate) {
51 const stdair::AirlineCode_T lAirlineCode (iStr, iStrEnd);
98 const std::string lFlightTypeCodeStr (iStr, iStrEnd);
113 const std::string lFlightVisibilityCodeStr (iStr, iStrEnd);
128 stdair::AirportCode_T lBoardingPoint (iStr, iStrEnd);
164 stdair::AirportCode_T lOffPoint (iStr, iStrEnd);
390 stdair::AirportCode_T lBoardingPoint (iStr, iStrEnd);
439 stdair::AirportCode_T lOffPoint (iStr, iStrEnd);
711 std::ostringstream ostr;
724 std::string lClasses (iStr, iStrEnd);
748 unsigned int& ioNbOfFlights)
750 _nbOfFlights (ioNbOfFlights) {
864 unsigned int& ioNbOfFlights)
865 : _bomRoot (ioBomRoot), _flightDate (ioFlightDate),
866 _nbOfFlights (ioNbOfFlights) {
870 template<
typename ScannerT>
874 flight_date_list = *( not_to_be_parsed | flight_date )
878 bsc::lexeme_d[ bsc::comment_p(
"//") | bsc::comment_p(
"/*",
"*/")
882 flight_date = flight_key
889 flight_date_end = bsc::ch_p(
';')
893 >>
'/' >> airline_code
894 >>
'/' >> flight_number
909 bsc::lexeme_d[(
day_p)[bsc::assign_a(
self._flightDate._itDay)]
910 >> (
month_p)[bsc::assign_a(
self._flightDate._itMonth)]
911 >> (
year_p)[bsc::assign_a(
self._flightDate._itYear)]]
915 ( bsc::chseq_p(
"INT") | bsc::chseq_p(
"DOM") | bsc::chseq_p(
"GRD") )
918 flight_visibility_code =
919 ( bsc::chseq_p(
"HID") | bsc::chseq_p(
"PSD") )
922 leg_list = +(
'/' >> leg )
925 leg = leg_key >>
';' >> leg_details >> leg_cabin_list
938 leg_cabin_list = +(
';' >> leg_cabin_details >> !bucket_list )
943 >>
',' >> (bsc::real_p)[
storeAU(
self._flightDate)]
944 >>
',' >> (bsc::real_p)[
storeUPR(
self._flightDate)]
946 >>
',' >> (bsc::real_p)[
storeNAV(
self._flightDate)]
947 >>
',' >> (bsc::real_p)[
storeGAV(
self._flightDate)]
948 >>
',' >> (bsc::ureal_p)[
storeACP(
self._flightDate)]
949 >>
',' >> (bsc::real_p)[
storeETB(
self._flightDate)]
954 (
hours_p)[bsc::assign_a(
self._flightDate._itHours)]
955 >> (
minutes_p)[bsc::assign_a(
self._flightDate._itMinutes)]
956 >> !((
seconds_p)[bsc::assign_a(
self._flightDate._itSeconds)])
960 bucket_list = +(
',' >> bucket_details )
968 segment_list = +(
'/' >> segment )
971 segment = segment_key >> segment_cabin_list
979 +(
';' >> segment_cabin_key >>
','
980 >> segment_cabin_details >> class_list >> family_cabin_list )
984 +(
';' >> family_cabin_details)
991 segment_cabin_details =
995 class_list = +(
',' >> class_key >>
'|' >> class_details )
1001 parent_subclass_code =
1011 (bsc::ureal_p)[
storeNego(
self._flightDate)]
1016 >>
':' >> !( parent_subclass_code )
1017 >>
':' >> !( class_protection )
1018 >>
':' >> (bsc::ureal_p)[
storeNoShow(
self._flightDate)]
1026 >>
':' >> !( class_nego )
1032 family_cabin_details =
1039 BOOST_SPIRIT_DEBUG_NODE (flight_date_list);
1040 BOOST_SPIRIT_DEBUG_NODE (not_to_be_parsed);
1041 BOOST_SPIRIT_DEBUG_NODE (flight_date);
1042 BOOST_SPIRIT_DEBUG_NODE (flight_date_end);
1043 BOOST_SPIRIT_DEBUG_NODE (flight_key);
1044 BOOST_SPIRIT_DEBUG_NODE (airline_code);
1045 BOOST_SPIRIT_DEBUG_NODE (flight_number);
1046 BOOST_SPIRIT_DEBUG_NODE (flight_type_code);
1047 BOOST_SPIRIT_DEBUG_NODE (flight_visibility_code);
1048 BOOST_SPIRIT_DEBUG_NODE (date);
1049 BOOST_SPIRIT_DEBUG_NODE (leg_list);
1050 BOOST_SPIRIT_DEBUG_NODE (leg);
1051 BOOST_SPIRIT_DEBUG_NODE (leg_key);
1052 BOOST_SPIRIT_DEBUG_NODE (leg_details);
1053 BOOST_SPIRIT_DEBUG_NODE (leg_cabin_list);
1054 BOOST_SPIRIT_DEBUG_NODE (leg_cabin_details);
1055 BOOST_SPIRIT_DEBUG_NODE (bucket_list);
1056 BOOST_SPIRIT_DEBUG_NODE (bucket_details);
1057 BOOST_SPIRIT_DEBUG_NODE (time);
1058 BOOST_SPIRIT_DEBUG_NODE (segment_list);
1059 BOOST_SPIRIT_DEBUG_NODE (segment);
1060 BOOST_SPIRIT_DEBUG_NODE (segment_key);
1061 BOOST_SPIRIT_DEBUG_NODE (full_segment_cabin_details);
1062 BOOST_SPIRIT_DEBUG_NODE (segment_cabin_list);
1063 BOOST_SPIRIT_DEBUG_NODE (segment_cabin_key);
1064 BOOST_SPIRIT_DEBUG_NODE (segment_cabin_details);
1065 BOOST_SPIRIT_DEBUG_NODE (class_list);
1066 BOOST_SPIRIT_DEBUG_NODE (class_key);
1067 BOOST_SPIRIT_DEBUG_NODE (parent_subclass_code);
1068 BOOST_SPIRIT_DEBUG_NODE (class_protection);
1069 BOOST_SPIRIT_DEBUG_NODE (class_nego);
1070 BOOST_SPIRIT_DEBUG_NODE (class_details);
1071 BOOST_SPIRIT_DEBUG_NODE (family_cabin_list);
1072 BOOST_SPIRIT_DEBUG_NODE (family_cabin_details);
1076 template<
typename ScannerT>
1077 bsc::rule<ScannerT>
const&
1079 return flight_date_list;
1093 : _filename (iFilename), _bomRoot (ioBomRoot),
1099 void InventoryFileParser::init() {
1104 if (!_startIterator) {
1105 std::ostringstream oMessage;
1106 oMessage <<
"The file " << _filename <<
" can not be open.";
1107 STDAIR_LOG_ERROR (oMessage.str());
1112 _endIterator = _startIterator.make_end();
1117 bool oResult =
false;
1119 STDAIR_LOG_DEBUG (
"Parsing inventory input file: " << _filename);
1129 bsc::parse_info<iterator_t> info = bsc::parse (_startIterator, _endIterator,
1131 bsc::space_p - bsc::eol_p);
1136 const std::string hasBeenFullyReadStr = (info.full ==
true)?
"":
"not ";
1137 if (oResult ==
true) {
1138 STDAIR_LOG_DEBUG (
"Parsing of inventory input file: " << _filename
1139 <<
" succeeded: read " << info.length
1140 <<
" characters. The input file has "
1141 << hasBeenFullyReadStr
1142 <<
"been fully read. Stop point: " << info.stop);
1145 STDAIR_LOG_ERROR (
"Parsing of inventory input file: " << _filename
1146 <<
" failed: read " << info.length
1147 <<
" characters. The input file has "
1148 << hasBeenFullyReadStr
1149 <<
"been fully read. Stop point: " << info.stop);
1151 ": " + _filename +
" failed");