Go to the documentation of this file.00001
00005
00006 #include <cassert>
00007 #include <iostream>
00008 #include <sstream>
00009 #include <fstream>
00010 #include <string>
00011
00012 #include <boost/program_options.hpp>
00013
00014 #include <stdair/basic/BasLogParams.hpp>
00015 #include <stdair/basic/BasDBParams.hpp>
00016 #include <stdair/bom/BookingRequestStruct.hpp>
00017 #include <stdair/bom/TravelSolutionStruct.hpp>
00018 #include <stdair/service/Logger.hpp>
00019
00020 #include <travelccm/TRAVELCCM_Service.hpp>
00021 #include <travelccm/config/travelccm-paths.hpp>
00022
00023
00027 const std::string K_TRAVELCCM_DEFAULT_LOG_FILENAME ("travelccm.log");
00028
00032 const std::string K_TRAVELCCM_DEFAULT_INPUT_FILENAME (STDAIR_SAMPLE_DIR
00033 "/ccm_01.csv");
00034
00039 const bool K_TRAVELCCM_DEFAULT_BUILT_IN_INPUT = false;
00040
00044 const int K_TRAVELCCM_EARLY_RETURN_STATUS = 99;
00045
00046
00047
00048
00049 template<class T> std::ostream& operator<< (std::ostream& os,
00050 const std::vector<T>& v) {
00051 std::copy (v.begin(), v.end(), std::ostream_iterator<T> (std::cout, " "));
00052 return os;
00053 }
00054
00058 int readConfiguration (int argc, char* argv[], bool& ioIsBuiltin,
00059 stdair::Filename_T& lInputFilename,
00060 stdair::Filename_T& lLogFilename) {
00061
00062
00063 ioIsBuiltin = K_TRAVELCCM_DEFAULT_BUILT_IN_INPUT;
00064
00065
00066 boost::program_options::options_description generic ("Generic options");
00067 generic.add_options()
00068 ("prefix", "print installation prefix")
00069 ("version,v", "print version string")
00070 ("help,h", "produce help message");
00071
00072
00073
00074 boost::program_options::options_description config ("Configuration");
00075 config.add_options()
00076 ("builtin,b",
00077 "The sample BOM tree can be either built-in or parsed from an input file. That latter must then be given with the -i/--input option")
00078 ("input,i",
00079 boost::program_options::value< std::string >(&lInputFilename)->default_value(K_TRAVELCCM_DEFAULT_INPUT_FILENAME),
00080 "(CSV) input file for the customer choice rule sets")
00081 ("log,l",
00082 boost::program_options::value< std::string >(&lLogFilename)->default_value(K_TRAVELCCM_DEFAULT_LOG_FILENAME),
00083 "Filename for the logs")
00084 ;
00085
00086
00087
00088 boost::program_options::options_description hidden ("Hidden options");
00089 hidden.add_options()
00090 ("copyright",
00091 boost::program_options::value< std::vector<std::string> >(),
00092 "Show the copyright (license)");
00093
00094 boost::program_options::options_description cmdline_options;
00095 cmdline_options.add(generic).add(config).add(hidden);
00096
00097 boost::program_options::options_description config_file_options;
00098 config_file_options.add(config).add(hidden);
00099
00100 boost::program_options::options_description visible ("Allowed options");
00101 visible.add(generic).add(config);
00102
00103 boost::program_options::positional_options_description p;
00104 p.add ("copyright", -1);
00105
00106 boost::program_options::variables_map vm;
00107 boost::program_options::
00108 store (boost::program_options::command_line_parser (argc, argv).
00109 options (cmdline_options).positional(p).run(), vm);
00110
00111 std::ifstream ifs ("travelccm.cfg");
00112 boost::program_options::store (parse_config_file (ifs, config_file_options),
00113 vm);
00114 boost::program_options::notify (vm);
00115
00116 if (vm.count ("help")) {
00117 std::cout << visible << std::endl;
00118 return K_TRAVELCCM_EARLY_RETURN_STATUS;
00119 }
00120
00121 if (vm.count ("version")) {
00122 std::cout << PACKAGE_NAME << ", version " << PACKAGE_VERSION << std::endl;
00123 return K_TRAVELCCM_EARLY_RETURN_STATUS;
00124 }
00125
00126 if (vm.count ("prefix")) {
00127 std::cout << "Installation prefix: " << PREFIXDIR << std::endl;
00128 return K_TRAVELCCM_EARLY_RETURN_STATUS;
00129 }
00130
00131 if (vm.count ("builtin")) {
00132 ioIsBuiltin = true;
00133 }
00134 const std::string isBuiltinStr = (ioIsBuiltin == true)?"yes":"no";
00135 std::cout << "The BOM should be built-in? " << isBuiltinStr << std::endl;
00136
00137 if (ioIsBuiltin == false) {
00138
00139
00140 if (vm.count ("input")) {
00141 lInputFilename = vm["input"].as< std::string >();
00142 std::cout << "Input filename is: " << lInputFilename << std::endl;
00143
00144 } else {
00145
00146
00147 std::cerr << "Either one among the -b/--builtin and -i/--input "
00148 << "options must be specified" << std::endl;
00149 }
00150 }
00151
00152 if (vm.count ("log")) {
00153 lLogFilename = vm["log"].as< std::string >();
00154 std::cout << "Log filename is: " << lLogFilename << std::endl;
00155 }
00156
00157 return 0;
00158 }
00159
00160
00161
00162 int main (int argc, char* argv[]) {
00163
00164
00165 bool isBuiltin;
00166
00167
00168 stdair::Filename_T lInputFilename;
00169
00170
00171 stdair::Filename_T lLogFilename;
00172
00173
00174 const int lOptionParserStatus =
00175 readConfiguration (argc, argv, isBuiltin, lInputFilename, lLogFilename);
00176
00177 if (lOptionParserStatus == K_TRAVELCCM_EARLY_RETURN_STATUS) {
00178 return 0;
00179 }
00180
00181
00182 std::ofstream logOutputFile;
00183
00184 logOutputFile.open (lLogFilename.c_str());
00185 logOutputFile.clear();
00186
00187
00188 const stdair::BasLogParams lLogParams (stdair::LOG::DEBUG, logOutputFile);
00189
00190
00191 TRAVELCCM::TRAVELCCM_Service travelccmService (lLogParams);
00192
00193
00194 STDAIR_LOG_DEBUG ("Welcome to TravelCCM");
00195
00196
00197 if (isBuiltin == true) {
00198
00199
00200 travelccmService.buildSampleBom();
00201
00202 } else {
00209
00210 }
00211
00212
00213 const stdair::BookingRequestStruct& lBookingRequest =
00214 travelccmService.buildSampleBookingRequest();
00215
00216
00217 STDAIR_LOG_DEBUG ("Booking request: " << lBookingRequest.display());
00218
00219
00220 stdair::TravelSolutionList_T lTSList;
00221 travelccmService.buildSampleTravelSolutions (lTSList);
00222
00223
00224 const std::string& lCSVDump = travelccmService.csvDisplay (lTSList);
00225 STDAIR_LOG_DEBUG (lCSVDump);
00226
00227
00228 const stdair::TravelSolutionStruct* lTS_ptr =
00229 travelccmService.chooseTravelSolution (lTSList, lBookingRequest);
00230
00231 if (lTS_ptr != NULL) {
00232
00233 STDAIR_LOG_DEBUG ("Chosen travel solution: " << lTS_ptr->display());
00234
00235 } else {
00236
00237 STDAIR_LOG_DEBUG ("No travel solution can be found for "
00238 << lBookingRequest.display()
00239 << " within the following list of travel solutions");
00240 STDAIR_LOG_DEBUG (lCSVDump);
00241 }
00242
00243
00244 logOutputFile.close();
00245
00253 return 0;
00254 }