$treeview $search $mathjax
StdAir Logo  1.00.2
$projectbrief
$projectbrief
$searchbox

stdair/bom/BomKeyManager.cpp

Go to the documentation of this file.
00001 // //////////////////////////////////////////////////////////////////////
00002 // Import section
00003 // //////////////////////////////////////////////////////////////////////
00004 // STL
00005 #include <cassert>
00006 #include <sstream>
00007 // Boost
00008 #include <boost/tokenizer.hpp>
00009 #include <boost/lexical_cast.hpp>
00010 #include <boost/date_time/gregorian/parsers.hpp>
00011 // StdAir
00012 #include <stdair/stdair_exceptions.hpp>
00013 #include <stdair/basic/BasConst_BomDisplay.hpp>
00014 #include <stdair/bom/InventoryKey.hpp>
00015 #include <stdair/bom/FlightDateKey.hpp>
00016 #include <stdair/bom/SegmentDateKey.hpp>
00017 #include <stdair/bom/LegDateKey.hpp>
00018 #include <stdair/bom/ParsedKey.hpp>
00019 #include <stdair/bom/BomKeyManager.hpp>
00020 #include <stdair/service/Logger.hpp>
00021 
00022 namespace stdair {
00023 
00024   // ////////////// Tokenising support ///////////////
00028   typedef boost::tokenizer<boost::char_separator<char> > Tokeniser_T;
00029 
00030   // ////////////////////////////////////////////////////////////////////
00031   ParsedKey BomKeyManager::extractKeys (const std::string& iFullKeyStr) {
00032     ParsedKey oParsedKey;
00033     oParsedKey._fullKey = iFullKeyStr;
00034 
00035     // Token-ise the full key string
00036     Tokeniser_T lTokens (iFullKeyStr, DEFAULT_KEY_TOKEN_DELIMITER);
00037     Tokeniser_T::iterator itToken = lTokens.begin();
00038 
00039     // Airline code
00040     if (itToken != lTokens.end()) {
00041       oParsedKey._airlineCode = *itToken;
00042       
00043     // Flight number
00044       ++itToken;
00045       if (itToken != lTokens.end()) {
00046         oParsedKey._flightNumber = *itToken;
00047 
00048         // Departure date
00049         ++itToken;
00050         if (itToken != lTokens.end()) {
00051           oParsedKey._departureDate = *itToken;
00052 
00053           // Origin
00054           ++itToken;
00055           if (itToken != lTokens.end()) {
00056             oParsedKey._boardingPoint = *itToken;
00057 
00058             // Destination
00059             ++itToken;
00060             if (itToken != lTokens.end()) {
00061               oParsedKey._offPoint = *itToken;
00062 
00063               // Boarding time
00064               ++itToken;
00065               if (itToken != lTokens.end()) {
00066                 oParsedKey._boardingTime = *itToken;
00067               }
00068             }
00069           }
00070         }
00071       }
00072     }
00073 
00074     return oParsedKey;
00075   }
00076 
00077   // ////////////////////////////////////////////////////////////////////
00078   InventoryKey BomKeyManager::
00079   extractInventoryKey (const std::string& iFullKeyStr) {
00080     ParsedKey lParsedKey = extractKeys (iFullKeyStr);
00081 
00082     return lParsedKey.getInventoryKey();
00083   }
00084 
00085   // ////////////////////////////////////////////////////////////////////
00086   FlightDateKey BomKeyManager::
00087   extractFlightDateKey (const std::string& iFullKeyStr) {
00088     ParsedKey lParsedKey = extractKeys (iFullKeyStr);
00089 
00090     return lParsedKey.getFlightDateKey();
00091   }
00092 
00093   // ////////////////////////////////////////////////////////////////////
00094   SegmentDateKey BomKeyManager::
00095   extractSegmentDateKey (const std::string& iFullKeyStr) {
00096     ParsedKey lParsedKey = extractKeys (iFullKeyStr);
00097 
00098     return lParsedKey.getSegmentKey();
00099   } 
00100 
00101   // ////////////////////////////////////////////////////////////////////
00102   LegDateKey BomKeyManager::
00103   extractLegDateKey (const std::string& iFullKeyStr) {
00104     ParsedKey lParsedKey = extractKeys (iFullKeyStr);
00105 
00106     return lParsedKey.getLegKey();
00107   }
00108 }