StdAir Logo  0.43.0
C++ Standard Airline IT Library
CmdBomManager.cpp
Go to the documentation of this file.
00001 
00005 // //////////////////////////////////////////////////////////////////////
00006 // Import section
00007 // //////////////////////////////////////////////////////////////////////
00008 // STL
00009 #include <cassert>
00010 #include <sstream>
00011 // StdAir
00012 #include <stdair/basic/BasConst_General.hpp>
00013 #include <stdair/basic/BasConst_DefaultObject.hpp>
00014 #include <stdair/basic/BasConst_Request.hpp>
00015 #include <stdair/basic/BasConst_Inventory.hpp>
00016 #include <stdair/bom/BomRoot.hpp>
00017 #include <stdair/bom/Inventory.hpp>
00018 #include <stdair/bom/FlightDate.hpp>
00019 #include <stdair/bom/LegDate.hpp>
00020 #include <stdair/bom/LegCabin.hpp>
00021 #include <stdair/bom/SegmentDate.hpp>
00022 #include <stdair/bom/SegmentCabin.hpp>
00023 #include <stdair/bom/FareFamily.hpp>
00024 #include <stdair/bom/BookingClass.hpp>
00025 #include <stdair/bom/AirportPair.hpp>
00026 #include <stdair/bom/PosChannel.hpp>
00027 #include <stdair/bom/DatePeriod.hpp>
00028 #include <stdair/bom/TimePeriod.hpp>
00029 #include <stdair/bom/FareFeatures.hpp>
00030 #include <stdair/bom/YieldFeatures.hpp>
00031 #include <stdair/bom/AirlineClassList.hpp>
00032 #include <stdair/bom/BomManager.hpp>
00033 #include <stdair/bom/TravelSolutionStruct.hpp>
00034 #include <stdair/bom/BookingRequestStruct.hpp>
00035 #include <stdair/factory/FacBomManager.hpp>
00036 #include <stdair/factory/FacBom.hpp>
00037 #include <stdair/command/CmdBomManager.hpp>
00038 #include <stdair/service/Logger.hpp>
00039 #include <stdair/bom/OnDDate.hpp>
00040 #include <stdair/bom/SegmentPeriod.hpp>
00041 #include <stdair/bom/FlightPeriod.hpp>
00042 
00043 namespace stdair {
00044 
00045   // //////////////////////////////////////////////////////////////////////
00046   void CmdBomManager::buildSampleBom (BomRoot& ioBomRoot) {
00047 
00048     // DEBUG
00049     STDAIR_LOG_DEBUG ("StdAir is building the BOM tree from built-in "
00050                       << "specifications.");
00051 
00052     // ////// Basic Bom Tree ///////    
00053     // Build the inventory (flight-dates) and the schedule (flight period) parts.
00054     buildSampleInventorySchedule (ioBomRoot);
00055 
00056     // Build the pricing (fare rules) and revenue accounting (yields) parts.
00057     buildSamplePricing (ioBomRoot);
00058 
00059     // ////// Partnership Bom Tree ///////    
00060     // Build the inventory (flight-dates) and the schedule (flight period) parts.
00061     buildPartnershipsSampleInventoryAndRM (ioBomRoot);
00062 
00063     // Build the pricing (fare rules) and revenue accounting (yields) parts.
00064     buildPartnershipsSamplePricing (ioBomRoot);
00065       
00066   }
00067 
00068   // //////////////////////////////////////////////////////////////////////
00069   void CmdBomManager::buildSampleInventorySchedule (BomRoot& ioBomRoot) {
00070 
00071     // Inventory
00072     // Step 0.1: Inventory level
00073     // Create an Inventory for BA
00074     const InventoryKey lBAKey ("BA");
00075     Inventory& lBAInv = FacBom<Inventory>::instance().create (lBAKey);
00076     FacBomManager::addToListAndMap (ioBomRoot, lBAInv);
00077     FacBomManager::linkWithParent (ioBomRoot, lBAInv);
00078 
00079     // Create an Inventory for AF
00080     const InventoryKey lAFKey ("AF");
00081     Inventory& lAFInv = FacBom<Inventory>::instance().create (lAFKey);
00082     FacBomManager::addToListAndMap (ioBomRoot, lAFInv);
00083     FacBomManager::linkWithParent (ioBomRoot, lAFInv);
00084 
00085     // BA
00086     // Step 0.2: Flight-date level
00087     // Create a FlightDate (BA9/10-JUN-2011) for BA's Inventory
00088     FlightNumber_T lFlightNumber = 9;
00089     Date_T lDate (2011, 6, 10);
00090     FlightDateKey lFlightDateKey (lFlightNumber, lDate);
00091 
00092     FlightDate& lBA9_20110610_FD =
00093       FacBom<FlightDate>::instance().create (lFlightDateKey);
00094     FacBomManager::addToListAndMap (lBAInv, lBA9_20110610_FD);
00095     FacBomManager::linkWithParent (lBAInv, lBA9_20110610_FD);
00096     
00097     // Display the flight-date
00098     // STDAIR_LOG_DEBUG ("FlightDate: " << lBA9_20110610_FD.toString());
00099     
00100     // Step 0.3: Segment-date level
00101     // Create a first SegmentDate (LHR-SYD) for BA's Inventory
00102     // See http://www.britishairways.com/travel/flightinformation/public/fr_fr?&Carrier=BA&FlightNumber=0009&from=LHR&to=SYD&depDate=100611&SellingClass=O
00103     const AirportCode_T lLHR ("LHR");
00104     const AirportCode_T lSYD ("SYD");
00105     const DateOffset_T l1Day (1);
00106     const DateOffset_T l2Days (2);
00107     const Duration_T l2135 (21, 45, 0);
00108     const Duration_T l0610 (6, 10, 0);
00109     const Duration_T l2205 (22, 05, 0);
00110     SegmentDateKey lSegmentDateKey (lLHR, lSYD);
00111 
00112     SegmentDate& lLHRSYDSegment =
00113       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
00114     FacBomManager::addToListAndMap (lBA9_20110610_FD, lLHRSYDSegment);
00115     FacBomManager::linkWithParent (lBA9_20110610_FD, lLHRSYDSegment);
00116 
00117     // Fill the SegmentDate content
00118     lLHRSYDSegment.setBoardingDate (lDate);
00119     lLHRSYDSegment.setOffDate (lDate + l2Days);
00120     lLHRSYDSegment.setBoardingTime (l2135);
00121     lLHRSYDSegment.setOffTime (l0610);
00122     lLHRSYDSegment.setElapsedTime (l2135);
00123   
00124     // Display the segment-date
00125     // STDAIR_LOG_DEBUG ("SegmentDate: " << lLHRSYDSegment);
00126 
00127     // Create a second SegmentDate (LHR-BKK) for BA's Inventory
00128     // See http://www.britishairways.com/travel/flightinformation/public/fr_fr?&Carrier=BA&FlightNumber=0009&from=LHR&to=BKK&depDate=100611&SellingClass=O
00129     const AirportCode_T lBKK ("BKK");
00130     const Duration_T l1540 (15, 40, 0);
00131     const Duration_T l1105 (11, 5, 0);
00132     lSegmentDateKey = SegmentDateKey (lLHR, lBKK);
00133 
00134     SegmentDate& lLHRBKKSegment =
00135       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
00136     FacBomManager::addToListAndMap (lBA9_20110610_FD, lLHRBKKSegment);
00137     FacBomManager::linkWithParent (lBA9_20110610_FD, lLHRBKKSegment);
00138 
00139     // Fill the SegmentDate content
00140     lLHRBKKSegment.setBoardingDate (lDate);
00141     lLHRBKKSegment.setOffDate (lDate + l1Day);
00142     lLHRBKKSegment.setBoardingTime (l2135);
00143     lLHRBKKSegment.setOffTime (l1540);
00144     lLHRBKKSegment.setElapsedTime (l1105);
00145   
00146     // Display the segment-date
00147     // STDAIR_LOG_DEBUG ("SegmentDate: " << lLHRBKKSegment);
00148 
00149     // Create a third SegmentDate (BKK-SYD) for BA's Inventory
00150     // See http://www.britishairways.com/travel/flightinformation/public/fr_fr?&Carrier=BA&FlightNumber=0009&from=BKK&to=SYD&depDate=110611&SellingClass=O
00151     const Duration_T l1705 (17, 5, 0);
00152     const Duration_T l0905 (9, 5, 0);
00153     lSegmentDateKey = SegmentDateKey (lBKK, lSYD);
00154 
00155     SegmentDate& lBKKSYDSegment =
00156       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
00157     FacBomManager::addToListAndMap (lBA9_20110610_FD, lBKKSYDSegment);
00158     FacBomManager::linkWithParent (lBA9_20110610_FD, lBKKSYDSegment);
00159 
00160     // Fill the SegmentDate content
00161     lBKKSYDSegment.setBoardingDate (lDate + l1Day);
00162     lBKKSYDSegment.setOffDate (lDate + l2Days);
00163     lBKKSYDSegment.setBoardingTime (l1705);
00164     lBKKSYDSegment.setOffTime (l1540);
00165     lBKKSYDSegment.setElapsedTime (l0905);
00166   
00167     // Display the segment-date
00168     // STDAIR_LOG_DEBUG ("SegmentDate: " << lBKKSYDSegment);
00169 
00170     // Step 0.4: Leg-date level
00171     // Create a first LegDate (LHR) for BA's Inventory
00172     LegDateKey lLegDateKey (lLHR);
00173 
00174     LegDate& lLHRLeg = FacBom<LegDate>::instance().create (lLegDateKey);
00175     FacBomManager::addToListAndMap (lBA9_20110610_FD, lLHRLeg);
00176     FacBomManager::linkWithParent (lBA9_20110610_FD, lLHRLeg);
00177 
00178     // Fill the LegDate content
00179     lLHRLeg.setOffPoint (lBKK);
00180     lLHRLeg.setBoardingDate (lDate);
00181     lLHRLeg.setOffDate (lDate + l1Day);
00182     lLHRLeg.setBoardingTime (l2135);
00183     lLHRLeg.setOffTime (l1540);
00184     lLHRLeg.setElapsedTime (l1105);
00185 
00186     // Display the leg-date
00187     // STDAIR_LOG_DEBUG ("LegDate: " << lLHRLeg.toString());
00188     
00189     // Create a second LegDate (BKK)
00190     lLegDateKey = LegDateKey (lBKK);
00191 
00192     LegDate& lBKKLeg = FacBom<LegDate>::instance().create (lLegDateKey);
00193     FacBomManager::addToListAndMap (lBA9_20110610_FD, lBKKLeg);
00194     FacBomManager::linkWithParent (lBA9_20110610_FD, lBKKLeg);
00195 
00196     // Display the leg-date
00197     // STDAIR_LOG_DEBUG ("LegDate: " << lBKKLeg.toString());
00198 
00199     // Fill the LegDate content
00200     lBKKLeg.setOffPoint (lSYD);
00201     lBKKLeg.setBoardingDate (lDate + l1Day);
00202     lBKKLeg.setOffDate (lDate + l2Days);
00203     lBKKLeg.setBoardingTime (l1705);
00204     lBKKLeg.setOffTime (l1540);
00205     lBKKLeg.setElapsedTime (l0905);
00206 
00207     // Link the segment-dates with the leg-dates
00208     FacBomManager::addToListAndMap (lLHRLeg, lLHRSYDSegment);
00209     FacBomManager::addToListAndMap (lLHRLeg, lLHRBKKSegment);
00210     FacBomManager::addToListAndMap (lBKKLeg, lLHRSYDSegment);
00211     FacBomManager::addToListAndMap (lBKKLeg, lBKKSYDSegment);
00212     FacBomManager::addToListAndMap (lLHRSYDSegment, lLHRLeg);
00213     FacBomManager::addToListAndMap (lLHRBKKSegment, lLHRLeg);
00214     FacBomManager::addToListAndMap (lLHRSYDSegment, lBKKLeg);
00215     FacBomManager::addToListAndMap (lBKKSYDSegment, lBKKLeg);
00216 
00217 
00218     // Step 0.5: segment-cabin level
00219     // Create a SegmentCabin (Y) for the Segment LHR-BKK of BA's Inventory
00220     const CabinCode_T lY ("Y");
00221     SegmentCabinKey lYSegmentCabinKey (lY);
00222 
00223     SegmentCabin& lLHRBKKSegmentYCabin =
00224       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
00225     FacBomManager::addToListAndMap (lLHRBKKSegment, lLHRBKKSegmentYCabin);
00226     FacBomManager::linkWithParent (lLHRBKKSegment, lLHRBKKSegmentYCabin);
00227 
00228     // Display the segment-cabin
00229     // STDAIR_LOG_DEBUG ("SegmentCabin: " << lLHRBKKSegmentYCabin.toString());
00230 
00231     // Create a SegmentCabin (Y) of the Segment BKK-SYD;
00232     SegmentCabin& lBKKSYDSegmentYCabin =
00233       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
00234     FacBomManager::addToListAndMap (lBKKSYDSegment, lBKKSYDSegmentYCabin);
00235     FacBomManager::linkWithParent (lBKKSYDSegment, lBKKSYDSegmentYCabin);
00236 
00237      
00238     // Display the segment-cabin
00239     // STDAIR_LOG_DEBUG ("SegmentCabin: " << lBKKSYDSegmentYCabin.toString());
00240 
00241     // Create a SegmentCabin (Y) of the Segment LHR-SYD;
00242     SegmentCabin& lLHRSYDSegmentYCabin =
00243       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
00244     FacBomManager::addToListAndMap (lLHRSYDSegment, lLHRSYDSegmentYCabin);
00245     FacBomManager::linkWithParent (lLHRSYDSegment, lLHRSYDSegmentYCabin);
00246       
00247     // Display the segment-cabin
00248     // STDAIR_LOG_DEBUG ("SegmentCabin: " << lLHRSYDSegmentYCabin.toString());
00249 
00250     // Step 0.6: leg-cabin level
00251     // Create a LegCabin (Y) for the Leg LHR-BKK on BA's Inventory
00252     LegCabinKey lYLegCabinKey (lY);
00253 
00254     LegCabin& lLHRLegYCabin =
00255       FacBom<LegCabin>::instance().create (lYLegCabinKey);
00256     FacBomManager::addToListAndMap (lLHRLeg, lLHRLegYCabin);
00257     FacBomManager::linkWithParent (lLHRLeg, lLHRLegYCabin);
00258 
00259     // Display the leg-cabin
00260     // STDAIR_LOG_DEBUG ("LegCabin: " << lLHRLegYCabin.toString());
00261 
00262     // Create a LegCabin (Y) for the Leg BKK-SYD
00263     LegCabin& lBKKLegYCabin =
00264       FacBom<LegCabin>::instance().create (lYLegCabinKey);
00265     FacBomManager::addToListAndMap (lBKKLeg, lBKKLegYCabin);
00266     FacBomManager::linkWithParent (lBKKLeg, lBKKLegYCabin);
00267     // Display the leg-cabin
00268     // STDAIR_LOG_DEBUG ("LegCabin: " << lBKKLegYCabin.toString());
00269 
00280     FacBomManager::addToListAndMap (lLHRLegYCabin, lLHRSYDSegmentYCabin,
00281                                     lLHRSYDSegmentYCabin.getFullerKey());
00282     FacBomManager::addToListAndMap (lLHRLegYCabin, lLHRBKKSegmentYCabin,
00283                                     lLHRBKKSegmentYCabin.getFullerKey());
00284     FacBomManager::addToListAndMap (lBKKLegYCabin, lLHRSYDSegmentYCabin,
00285                                     lLHRSYDSegmentYCabin.getFullerKey());
00286     FacBomManager::addToListAndMap (lBKKLegYCabin, lBKKSYDSegmentYCabin,
00287     lBKKSYDSegmentYCabin.getFullerKey());
00288 
00299     FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin, lLHRLegYCabin,
00300                                     lLHRLegYCabin.getFullerKey());
00301     FacBomManager::addToListAndMap (lLHRBKKSegmentYCabin, lLHRLegYCabin,
00302                                     lLHRLegYCabin.getFullerKey());
00303     FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin, lBKKLegYCabin,
00304                                     lBKKLegYCabin.getFullerKey());
00305     FacBomManager::addToListAndMap (lBKKSYDSegmentYCabin, lBKKLegYCabin,
00306                                     lBKKLegYCabin.getFullerKey());
00307 
00308 
00309     // Step 0.7: fare family level
00310     // Create a FareFamily (1) for the Segment LHR-BKK, cabin Y on BA's Inv
00311     const FamilyCode_T l1 ("EcoSaver");
00312     FareFamilyKey l1FareFamilyKey (l1);
00313 
00314     FareFamily& lLHRBKKSegmentYCabin1Family =
00315       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
00316     FacBomManager::addToListAndMap (lLHRBKKSegmentYCabin,
00317                                     lLHRBKKSegmentYCabin1Family);
00318     FacBomManager::linkWithParent (lLHRBKKSegmentYCabin,
00319                                    lLHRBKKSegmentYCabin1Family);
00320 
00321     // Display the booking class
00322     // STDAIR_LOG_DEBUG ("FareFamily: "
00323     //                   << lLHRBKKSegmentYCabin1Family.toString());
00324 
00325     // Create a FareFamily (1)  for the Segment BKK-SYD, cabin Y on BA's Inv
00326     FareFamily& lBKKSYDSegmentYCabin1Family =
00327       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
00328     FacBomManager::addToListAndMap (lBKKSYDSegmentYCabin,
00329                                     lBKKSYDSegmentYCabin1Family);
00330     FacBomManager::linkWithParent (lBKKSYDSegmentYCabin,
00331                                    lBKKSYDSegmentYCabin1Family);
00332     
00333     // Display the booking class
00334     // STDAIR_LOG_DEBUG ("FareFamily: "
00335     //                   << lLHRBKKSegmentYCabin1Family.toString());
00336 
00337     // Create a FareFamily (1)  for the Segment LHR-SYD, cabin Y on BA's Inv
00338     FareFamily& lLHRSYDSegmentYCabin1Family =
00339       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
00340     FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin,
00341                                     lLHRSYDSegmentYCabin1Family);
00342     FacBomManager::linkWithParent (lLHRSYDSegmentYCabin,
00343                                    lLHRSYDSegmentYCabin1Family);
00344 
00345     // Display the booking class
00346     // STDAIR_LOG_DEBUG ("FareFamily: "
00347     //                   << lLHRBKKSegmentYCabin1Family.toString());
00348 
00349 
00350     // Step 0.8: booking class level
00351     // Create a BookingClass (Q) for the Segment LHR-BKK, cabin Y,
00352     // fare family 1 on BA's Inv
00353     const ClassCode_T lQ ("Q");
00354     BookingClassKey lQBookingClassKey (lQ);
00355 
00356     BookingClass& lLHRBKKSegmentYCabin1FamilyQClass =
00357       FacBom<BookingClass>::instance().create (lQBookingClassKey);
00358     FacBomManager::addToListAndMap (lLHRBKKSegmentYCabin1Family,
00359                                     lLHRBKKSegmentYCabin1FamilyQClass);
00360     FacBomManager::linkWithParent (lLHRBKKSegmentYCabin1Family,
00361                                    lLHRBKKSegmentYCabin1FamilyQClass);
00362 
00363     FacBomManager::addToListAndMap (lLHRBKKSegmentYCabin,
00364                                     lLHRBKKSegmentYCabin1FamilyQClass);
00365     FacBomManager::addToListAndMap (lLHRBKKSegment,
00366                                     lLHRBKKSegmentYCabin1FamilyQClass);
00367 
00368     // Display the booking class
00369     // STDAIR_LOG_DEBUG ("BookingClass: "
00370     //                   << lLHRBKKSegmentYCabin1FamilyQClass.toString());
00371 
00372     // Create a BookingClass (Q) for the Segment BKK-SYD, cabin Y,
00373     // fare family 1 on BA's Inv
00374     BookingClass& lBKKSYDSegmentYCabin1FamilyQClass =
00375       FacBom<BookingClass>::instance().create (lQBookingClassKey);
00376     FacBomManager::addToListAndMap (lBKKSYDSegmentYCabin1Family,
00377                                     lBKKSYDSegmentYCabin1FamilyQClass);
00378     FacBomManager::linkWithParent (lBKKSYDSegmentYCabin1Family,
00379                                    lBKKSYDSegmentYCabin1FamilyQClass);
00380     
00381     FacBomManager::addToListAndMap (lBKKSYDSegmentYCabin,
00382                                     lBKKSYDSegmentYCabin1FamilyQClass);
00383     FacBomManager::addToListAndMap (lBKKSYDSegment,
00384                                     lBKKSYDSegmentYCabin1FamilyQClass);
00385 
00386     // Display the booking class
00387     // STDAIR_LOG_DEBUG ("BookingClass: "
00388     //                   << lLHRBKKSegmentYCabin1FamilyQClass.toString());
00389 
00390     // Create a BookingClass (Q) for the Segment LHR-SYD, cabin Y,
00391     // fare family 1 on BA's Inv
00392     BookingClass& lLHRSYDSegmentYCabin1FamilyQClass =
00393       FacBom<BookingClass>::instance().create (lQBookingClassKey);
00394     FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin1Family,
00395                                     lLHRSYDSegmentYCabin1FamilyQClass);
00396     FacBomManager::linkWithParent (lLHRSYDSegmentYCabin1Family,
00397                                    lLHRSYDSegmentYCabin1FamilyQClass);
00398 
00399     FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin,
00400                                     lLHRSYDSegmentYCabin1FamilyQClass);
00401     FacBomManager::addToListAndMap (lLHRSYDSegment,
00402                                     lLHRSYDSegmentYCabin1FamilyQClass);
00403 
00404     // Display the booking class
00405     // STDAIR_LOG_DEBUG ("BookingClass: "
00406     //                   << lLHRBKKSegmentYCabin1FamilyQClass.toString());
00407 
00408     
00409     // ////// AF ///////    
00410     // Step 0.2: Flight-date level
00411     // Create a FlightDate (AF084/20-MAR-2011) for AF's Inventory
00412     lFlightNumber = 84;
00413     lDate = Date_T (2011, 3, 20);
00414     lFlightDateKey = FlightDateKey (lFlightNumber, lDate);
00415 
00416     FlightDate& lAF084_20110320_FD =
00417       FacBom<FlightDate>::instance().create (lFlightDateKey);
00418     FacBomManager::addToListAndMap (lAFInv, lAF084_20110320_FD);
00419     FacBomManager::linkWithParent (lAFInv, lAF084_20110320_FD);
00420     
00421     // Display the flight-date
00422     // STDAIR_LOG_DEBUG ("FlightDate: " << lAF084_20110320_FD.toString());
00423 
00424     // Step 0.3: Segment-date level
00425     // Create a SegmentDate (CDG-SFO) for AF's Inventory
00426     const AirportCode_T lCDG ("CDG");
00427     const AirportCode_T lSFO ("SFO");
00428     const Duration_T l1040 (10, 40, 0);
00429     const Duration_T l1250 (12, 50, 0);
00430     const Duration_T l1110 (11, 10, 0);
00431     lSegmentDateKey = SegmentDateKey (lCDG, lSFO);
00432 
00433     SegmentDate& lCDGSFOSegment =
00434       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
00435     FacBomManager::addToListAndMap (lAF084_20110320_FD, lCDGSFOSegment);
00436     FacBomManager::linkWithParent (lAF084_20110320_FD, lCDGSFOSegment);
00437 
00438     // Display the segment-date
00439     // STDAIR_LOG_DEBUG ("SegmentDate: " << lCDGSFOSegment.toString());
00440 
00441     // Fill the SegmentDate content
00442     lCDGSFOSegment.setBoardingDate (lDate);
00443     lCDGSFOSegment.setOffDate (lDate);
00444     lCDGSFOSegment.setBoardingTime (l1040);
00445     lCDGSFOSegment.setOffTime (l1250);
00446     lCDGSFOSegment.setElapsedTime (l1110);
00447 
00448     // Step 0.4: Leg-date level
00449     // Create a LegDate (CDG) for AF's Inventory
00450     lLegDateKey = LegDateKey (lCDG);
00451 
00452     LegDate& lCDGLeg = FacBom<LegDate>::instance().create (lLegDateKey);
00453     FacBomManager::addToListAndMap (lAF084_20110320_FD, lCDGLeg);
00454     FacBomManager::linkWithParent (lAF084_20110320_FD, lCDGLeg);
00455 
00456     // Fill the LegDate content
00457     lCDGLeg.setOffPoint (lSFO);
00458     lCDGLeg.setBoardingDate (lDate);
00459     lCDGLeg.setOffDate (lDate);
00460     lCDGLeg.setBoardingTime (l1040);
00461     lCDGLeg.setOffTime (l1250);
00462     lCDGLeg.setElapsedTime (l1110);
00463 
00464     // Display the leg-date
00465     // STDAIR_LOG_DEBUG ("LegDate: " << lCDGLeg.toString());
00466 
00467     // Link the segment-dates with the leg-dates
00468     FacBomManager::addToListAndMap (lCDGLeg, lCDGSFOSegment);
00469     FacBomManager::addToListAndMap (lCDGSFOSegment, lCDGLeg);
00470 
00471 
00472     // Step 0.5: segment-cabin level
00473     // Create a SegmentCabin (Y) for the Segment CDG-SFO of AF's Inventory
00474     SegmentCabin& lCDGSFOSegmentYCabin =
00475       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
00476     FacBomManager::addToListAndMap (lCDGSFOSegment, lCDGSFOSegmentYCabin);
00477     FacBomManager::linkWithParent (lCDGSFOSegment, lCDGSFOSegmentYCabin);
00478 
00479     // Display the segment-cabin
00480     // STDAIR_LOG_DEBUG ("SegmentCabin: " << lCDGSFOSegmentYCabin.toString());
00481 
00482     // Step 0.6: leg-cabin level
00483     // Create a LegCabin (Y) for the Leg CDG-SFO on AF's Inventory
00484     LegCabin& lCDGLegYCabin =
00485       FacBom<LegCabin>::instance().create (lYLegCabinKey);
00486     FacBomManager::addToListAndMap (lCDGLeg, lCDGLegYCabin);
00487     FacBomManager::linkWithParent (lCDGLeg, lCDGLegYCabin);
00488 
00489     // Display the leg-cabin
00490     // STDAIR_LOG_DEBUG ("LegCabin: " << lLHRLegYCabin.toString());
00491 
00492     // Link the segment-dates with the leg-dates
00493     FacBomManager::addToListAndMap (lCDGLegYCabin, lCDGSFOSegmentYCabin,
00494                                     lCDGSFOSegmentYCabin.getFullerKey());
00495     FacBomManager::addToListAndMap (lCDGSFOSegmentYCabin, lCDGLegYCabin,
00496                                     lCDGLegYCabin.getFullerKey());
00497 
00498 
00499     // Step 0.7: fare family level
00500     // Create a fareFamily (1) for the Segment CDG-SFO, cabin Y on AF's Inv
00501     FareFamily& lCDGSFOSegmentYCabin1Family =
00502       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
00503     FacBomManager::addToListAndMap (lCDGSFOSegmentYCabin,
00504                                     lCDGSFOSegmentYCabin1Family);
00505     FacBomManager::linkWithParent (lCDGSFOSegmentYCabin,
00506                                    lCDGSFOSegmentYCabin1Family);
00507 
00508     // Display the fare family
00509     // STDAIR_LOG_DEBUG ("fareFamily: "
00510     //
00511     //                   << lCDGSFOSegmentYCabin1Family.toString());
00512 
00513     // Step 0.8: booking class level Create a BookingClass (Q) for the
00514     // Segment CDG-SFO, cabin Y, fare family 1 on AF's Inv
00515     BookingClass& lCDGSFOSegmentYCabin1FamilyQClass =
00516       FacBom<BookingClass>::instance().create (lQBookingClassKey);
00517     FacBomManager::addToListAndMap (lCDGSFOSegmentYCabin1Family,
00518                                     lCDGSFOSegmentYCabin1FamilyQClass);
00519     FacBomManager::linkWithParent (lCDGSFOSegmentYCabin1Family,
00520                                    lCDGSFOSegmentYCabin1FamilyQClass);
00521 
00522     FacBomManager::addToListAndMap (lCDGSFOSegmentYCabin,
00523                                     lCDGSFOSegmentYCabin1FamilyQClass);
00524     FacBomManager::addToListAndMap (lCDGSFOSegment,
00525                                     lCDGSFOSegmentYCabin1FamilyQClass);
00526 
00527     // Display the booking class
00528     // STDAIR_LOG_DEBUG ("BookingClass: "
00529     //                   << lCDGSFOSegmentYCabin1FamilyQClass.toString());
00530 
00531     /*================================================================================
00532       ================================================================================
00533       ================================================================================*/
00534     // Schedule:
00535     // BA:
00536     // Step 1: flight period level
00537     // Create a flight period for BA9:
00538     const DoWStruct lDoWSrtuct ("1111111");
00539     const Date_T lBA9DateRangeStart (2010, boost::gregorian::Jun, 6);
00540     const Date_T lBA9DateRangeEnd (2010, boost::gregorian::Jun, 7);
00541     const DatePeriod_T lBA9DatePeriod (lBA9DateRangeStart, lBA9DateRangeEnd);
00542     const PeriodStruct lBA9PeriodStruct (lBA9DatePeriod, lDoWSrtuct);
00543 
00544     lFlightNumber = FlightNumber_T (9);
00545 
00546     FlightPeriodKey lBA9FlightPeriodKey (lFlightNumber, lBA9PeriodStruct);
00547 
00548     FlightPeriod& lBA9FlightPeriod =
00549       FacBom<FlightPeriod>::instance().create (lBA9FlightPeriodKey);
00550     FacBomManager::addToListAndMap (lBAInv, lBA9FlightPeriod);
00551     FacBomManager::linkWithParent (lBAInv, lBA9FlightPeriod);
00552 
00553     // Step 2: segment period level
00554     // Create a segment period for SIN-BKK:
00555 
00556     SegmentPeriodKey lLHRSYDSegmentPeriodKey (lLHR, lSYD);
00557 
00558     SegmentPeriod& lLHRSYDSegmentPeriod =
00559       FacBom<SegmentPeriod>::instance().create (lLHRSYDSegmentPeriodKey);
00560     FacBomManager::addToListAndMap (lBA9FlightPeriod, lLHRSYDSegmentPeriod);
00561     FacBomManager::linkWithParent (lBA9FlightPeriod, lLHRSYDSegmentPeriod);
00562 
00563     lLHRSYDSegmentPeriod.setBoardingTime (l2135);
00564     lLHRSYDSegmentPeriod.setOffTime (l1540);
00565     lLHRSYDSegmentPeriod.setElapsedTime (l1105);
00566     ClassList_String_T lYM ("YM");
00567     lLHRSYDSegmentPeriod.addCabinBookingClassList (lY,lYM);
00568 
00569     // AF:
00570     // Step 1: flight period level
00571     // Create a flight period for AF84:
00572     const Date_T lAF84DateRangeStart (2011, boost::gregorian::Mar, 20);
00573     const Date_T lAF84DateRangeEnd (2011, boost::gregorian::Mar, 21);
00574     const DatePeriod_T lAF84DatePeriod (lAF84DateRangeStart, lAF84DateRangeEnd);
00575     const PeriodStruct lAF84PeriodStruct (lAF84DatePeriod, lDoWSrtuct);
00576 
00577     lFlightNumber = FlightNumber_T (84);
00578 
00579     FlightPeriodKey lAF84FlightPeriodKey (lFlightNumber, lAF84PeriodStruct);
00580 
00581     FlightPeriod& lAF84FlightPeriod =
00582       FacBom<FlightPeriod>::instance().create (lAF84FlightPeriodKey);
00583     FacBomManager::addToListAndMap (lAFInv, lAF84FlightPeriod);
00584     FacBomManager::linkWithParent (lAFInv, lAF84FlightPeriod);
00585 
00586     // Step 2: segment period level
00587     // Create a segment period for SIN-BKK:
00588 
00589     SegmentPeriodKey lCDGSFOSegmentPeriodKey (lCDG, lSFO);
00590 
00591     SegmentPeriod& lCDGSFOSegmentPeriod =
00592       FacBom<SegmentPeriod>::instance().create (lCDGSFOSegmentPeriodKey);
00593     FacBomManager::addToListAndMap (lAF84FlightPeriod, lCDGSFOSegmentPeriod);
00594     FacBomManager::linkWithParent (lAF84FlightPeriod, lCDGSFOSegmentPeriod);
00595 
00596     lCDGSFOSegmentPeriod.setBoardingTime (l1040);
00597     lCDGSFOSegmentPeriod.setOffTime (l1250);
00598     lCDGSFOSegmentPeriod.setElapsedTime (l1110);
00599     lCDGSFOSegmentPeriod.addCabinBookingClassList (lY,lYM);
00600 
00601     /*================================================================================
00602       ================================================================================
00603       ================================================================================*/
00604     // O&D 
00605     // Create an O&D Date (BA;9,2010-Jun-06;LHR,SYD) for BA's Inventory
00606     OnDString_T  lBALHRSYDOnDStr = "BA;9,2010-Jun-06;LHR,SYD";
00607     OnDStringList_T lBAOnDStrList;
00608     lBAOnDStrList.push_back (lBALHRSYDOnDStr);
00609 
00610     OnDDateKey lBAOnDDateKey (lBAOnDStrList);
00611     OnDDate& lBA_LHRSYD_OnDDate =
00612       FacBom<OnDDate>::instance().create (lBAOnDDateKey);
00613     // Link to the inventory
00614     FacBomManager::addToListAndMap (lBAInv, lBA_LHRSYD_OnDDate);
00615     FacBomManager::linkWithParent (lBAInv, lBA_LHRSYD_OnDDate);
00616 
00617     // Add the segment
00618     FacBomManager::addToListAndMap (lBA_LHRSYD_OnDDate, lLHRSYDSegment);
00619 
00620     // Add total forecast info for cabin Y.
00621     const MeanStdDevPair_T lMean60StdDev6 (60.0, 6.0);
00622     const WTP_T lWTP750 = 750.0;
00623     const WTPDemandPair_T lWTP750Mean60StdDev6 (lWTP750, lMean60StdDev6);
00624     lBA_LHRSYD_OnDDate.setTotalForecast (lY, lWTP750Mean60StdDev6);
00625 
00626     // Create an O&D Date (AF;84,2011-Mar-21;CDG,SFO) for AF's Inventory
00627     OnDString_T lAFLHRSYDOnDStr = "AF;9,2011-Mar-20;CDG,SFO";
00628     OnDStringList_T lAFOnDStrList;
00629     lAFOnDStrList.push_back (lAFLHRSYDOnDStr);
00630 
00631     OnDDateKey lAFOnDDateKey (lAFOnDStrList);
00632     OnDDate& lAF_LHRSYD_OnDDate =
00633       FacBom<OnDDate>::instance().create (lAFOnDDateKey);
00634     // Link to the inventory
00635     FacBomManager::addToListAndMap (lAFInv, lAF_LHRSYD_OnDDate);
00636     FacBomManager::linkWithParent (lAFInv, lAF_LHRSYD_OnDDate);
00637 
00638     // Add the segment
00639     FacBomManager::addToListAndMap (lAF_LHRSYD_OnDDate, lLHRSYDSegment);
00640 
00641     // Add total forecast info for cabin Y. 
00642     lAF_LHRSYD_OnDDate.setTotalForecast (lY, lWTP750Mean60StdDev6);
00643   
00644   }
00645   
00646   // //////////////////////////////////////////////////////////////////////
00647   void CmdBomManager::buildDummyInventory (BomRoot& ioBomRoot,
00648                                            const CabinCapacity_T& iCapacity) {
00649     // Inventory
00650     const InventoryKey lInventoryKey (DEFAULT_AIRLINE_CODE);
00651     Inventory& lInv = FacBom<Inventory>::instance().create (lInventoryKey);
00652     FacBomManager::addToListAndMap (ioBomRoot, lInv);
00653     FacBomManager::linkWithParent (ioBomRoot, lInv);
00654 
00655     // Flight-date
00656     FlightDateKey lFlightDateKey(DEFAULT_FLIGHT_NUMBER, DEFAULT_DEPARTURE_DATE);
00657     FlightDate& lFlightDate =
00658       FacBom<FlightDate>::instance().create (lFlightDateKey);
00659     FacBomManager::addToListAndMap (lInv, lFlightDate);
00660     FacBomManager::linkWithParent (lInv, lFlightDate);
00661 
00662     // Leg-date
00663     LegDateKey lLegDateKey (DEFAULT_ORIGIN);
00664     LegDate& lLeg = FacBom<LegDate>::instance().create (lLegDateKey);
00665     FacBomManager::addToListAndMap (lFlightDate, lLeg);
00666     FacBomManager::linkWithParent (lFlightDate, lLeg);
00667 
00668     // Fill the LegDate content
00669     lLeg.setOffPoint (DEFAULT_DESTINATION);
00670     lLeg.setBoardingDate (DEFAULT_DEPARTURE_DATE);
00671     lLeg.setOffDate (DEFAULT_DEPARTURE_DATE);
00672     lLeg.setBoardingTime (Duration_T (14, 0, 0));
00673     lLeg.setOffTime (Duration_T (16, 0, 0));
00674     lLeg.setElapsedTime (Duration_T (8, 0, 0));
00675 
00676     // Leg-cabin
00677     LegCabinKey lLegCabinKey (DEFAULT_CABIN_CODE);
00678     LegCabin& lLegCabin = FacBom<LegCabin>::instance().create (lLegCabinKey);
00679     FacBomManager::addToListAndMap (lLeg, lLegCabin);
00680     FacBomManager::linkWithParent (lLeg, lLegCabin);
00681 
00682     lLegCabin.setCapacities (iCapacity);
00683     lLegCabin.setAvailabilityPool (iCapacity);
00684 
00685     // Segment-date
00686     SegmentDateKey lSegmentDateKey (DEFAULT_ORIGIN, DEFAULT_DESTINATION);
00687     SegmentDate& lSegment =
00688       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
00689     FacBomManager::addToListAndMap (lFlightDate, lSegment);
00690     FacBomManager::linkWithParent (lFlightDate, lSegment);
00691 
00692     // Links between the segment-date and the leg-date
00693     FacBomManager::addToListAndMap (lLeg, lSegment);
00694     FacBomManager::addToListAndMap (lSegment, lLeg);
00695 
00696     // Fill the SegmentDate content
00697     lSegment.setBoardingDate (DEFAULT_DEPARTURE_DATE);
00698     lSegment.setOffDate (DEFAULT_DEPARTURE_DATE);
00699     lSegment.setBoardingTime (Duration_T (14, 0, 0));
00700     lSegment.setOffTime (Duration_T (16, 0, 0));
00701     lSegment.setElapsedTime (Duration_T (8, 0, 0));
00702 
00703     // Segment-cabin
00704     SegmentCabinKey lSegmentCabinKey (DEFAULT_CABIN_CODE);
00705     SegmentCabin& lSegmentCabin =
00706       FacBom<SegmentCabin>::instance().create (lSegmentCabinKey);
00707     FacBomManager::addToListAndMap (lSegment, lSegmentCabin);
00708     FacBomManager::linkWithParent (lSegment, lSegmentCabin);
00709 
00710     // Links between the segment-cabin and the leg-cabin
00711     FacBomManager::addToListAndMap (lLegCabin, lSegmentCabin,
00712                                     lSegmentCabin.getFullerKey());
00713     FacBomManager::addToListAndMap (lSegmentCabin, lLegCabin,
00714                                     lLegCabin.getFullerKey());
00715 
00716     // Create a FareFamily (1) for the Segment LHR-BKK, cabin Y on BA's Inv
00717     const FamilyCode_T l1 ("EcoSaver");
00718     FareFamilyKey l1FareFamilyKey (l1);
00719 
00720     FareFamily& lSegmentYCabin1Family =
00721       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
00722     FacBomManager::addToListAndMap (lSegmentCabin, lSegmentYCabin1Family);
00723     FacBomManager::linkWithParent (lSegmentCabin, lSegmentYCabin1Family);
00724 
00725     // Create a booking-class
00726     const ClassCode_T lQ ("Q");
00727     BookingClassKey lQBookingClassKey (lQ);
00728 
00729     BookingClass& lSegmentYCabin1FamilyQClass =
00730       FacBom<BookingClass>::instance().create (lQBookingClassKey);
00731     FacBomManager::addToListAndMap (lSegmentYCabin1Family,
00732                                     lSegmentYCabin1FamilyQClass);
00733     FacBomManager::linkWithParent (lSegmentYCabin1Family,
00734                                    lSegmentYCabin1FamilyQClass);
00735     
00736     FacBomManager::addToListAndMap (lSegmentCabin, lSegmentYCabin1FamilyQClass);
00737     FacBomManager::addToListAndMap (lSegment, lSegmentYCabin1FamilyQClass);
00738   }
00739 
00740   // //////////////////////////////////////////////////////////////////////
00741   void CmdBomManager::buildSamplePricing (BomRoot& ioBomRoot) {
00742 
00743     // Set the airport-pair primary key.
00744     const AirportPairKey lAirportPairKey (AIRPORT_LHR, AIRPORT_SYD);
00745     
00746     // Create the AirportPairKey object and link it to the BOM tree root.
00747     AirportPair& lAirportPair =
00748       FacBom<AirportPair>::instance().create (lAirportPairKey);
00749     FacBomManager::addToListAndMap (ioBomRoot, lAirportPair);
00750     FacBomManager::linkWithParent (ioBomRoot, lAirportPair);
00751 
00752     // Set the fare date-period primary key.
00753     const Date_T lDateRangeStart (2011, boost::gregorian::Jan, 15);
00754     const Date_T lDateRangeEnd (2011, boost::gregorian::Dec, 31);
00755     const DatePeriod_T lDateRange (lDateRangeStart, lDateRangeEnd);
00756     const DatePeriodKey lDatePeriodKey (lDateRange);
00757 
00758     // Create the DatePeriodKey object and link it to the PosChannel object.
00759     DatePeriod& lDatePeriod =
00760       FacBom<DatePeriod>::instance().create (lDatePeriodKey);
00761     FacBomManager::addToListAndMap (lAirportPair, lDatePeriod);
00762     FacBomManager::linkWithParent (lAirportPair, lDatePeriod);    
00763 
00764     // Set the point-of-sale-channel primary key.
00765     const PosChannelKey lPosChannelKey (POS_LHR, CHANNEL_DN);  
00766     
00767     // Create the PositionKey object and link it to the AirportPair object.
00768     PosChannel& lPosChannel =
00769       FacBom<PosChannel>::instance().create (lPosChannelKey);
00770     FacBomManager::addToListAndMap (lDatePeriod, lPosChannel);
00771     FacBomManager::linkWithParent (lDatePeriod, lPosChannel);
00772    
00773     // Set the fare time-period primary key.
00774     const Time_T lTimeRangeStart (0, 0, 0);
00775     const Time_T lTimeRangeEnd (23, 0, 0);
00776     const TimePeriodKey lTimePeriodKey (lTimeRangeStart, lTimeRangeEnd);
00777 
00778     // Create the TimePeriodKey and link it to the DatePeriod object.
00779     TimePeriod& lTimePeriod =
00780       FacBom<TimePeriod>::instance().create (lTimePeriodKey);
00781     FacBomManager::addToListAndMap (lPosChannel, lTimePeriod);
00782     FacBomManager::linkWithParent (lPosChannel, lTimePeriod);        
00783 
00784     // Pricing -- Generate the FareRule
00785     const FareFeaturesKey lFareFeaturesKey (TRIP_TYPE_ROUND_TRIP,
00786                                             NO_ADVANCE_PURCHASE,
00787                                             SATURDAY_STAY,
00788                                             CHANGE_FEES,
00789                                             NON_REFUNDABLE,
00790                                             NO_STAY_DURATION);
00791 
00792     // Create the FareFeaturesKey and link it to the TimePeriod object.
00793     FareFeatures& lFareFeatures =
00794       FacBom<FareFeatures>::instance().create (lFareFeaturesKey);
00795     FacBomManager::addToListAndMap (lTimePeriod, lFareFeatures);
00796     FacBomManager::linkWithParent (lTimePeriod, lFareFeatures);        
00797 
00798     // Revenue Accounting -- Generate the YieldRule
00799     const YieldFeaturesKey lYieldFeaturesKey (TRIP_TYPE_ROUND_TRIP,
00800                                               CABIN_Y);
00801     
00802     // Create the YieldFeaturesKey and link it to the TimePeriod object.
00803     YieldFeatures& lYieldFeatures =
00804       FacBom<YieldFeatures>::instance().create (lYieldFeaturesKey);
00805     FacBomManager::addToListAndMap (lTimePeriod, lYieldFeatures);
00806     FacBomManager::linkWithParent (lTimePeriod, lYieldFeatures);     
00807                                               
00808     // Generate Segment Features and link them to their respective
00809     // fare and yield rules.
00810     AirlineCodeList_T lAirlineCodeList;
00811     lAirlineCodeList.push_back (AIRLINE_CODE_BA);
00812     ClassList_StringList_T lClassCodeList;
00813     lClassCodeList.push_back (CLASS_CODE_Y);
00814     const AirlineClassListKey lAirlineClassListKey (lAirlineCodeList,
00815                                                     lClassCodeList);
00816 
00817     // Create the AirlineClassList
00818     AirlineClassList& lAirlineClassList =
00819       stdair::FacBom<AirlineClassList>::instance().create (lAirlineClassListKey);
00820     // Link the AirlineClassList to the FareFeatures object
00821     lAirlineClassList.setFare (900);
00822     FacBomManager::addToListAndMap (lFareFeatures, lAirlineClassList);
00823     FacBomManager::linkWithParent (lFareFeatures, lAirlineClassList);
00824 
00825     // Link the AirlineClassList to the YieldFeatures object
00826     lAirlineClassList.setYield (900);
00827     FacBomManager::addToListAndMap (lYieldFeatures, lAirlineClassList);
00828     // \todo (gsabatier): the following calls overrides the parent for
00829     //       lAirlineClassList. Check that it is what is actually wanted.
00830     FacBomManager::linkWithParent (lYieldFeatures, lAirlineClassList);
00831   }
00832 
00833   // //////////////////////////////////////////////////////////////////////
00834   void CmdBomManager::
00835   buildSampleTravelSolutionForPricing (TravelSolutionList_T& ioTravelSolutionList) {
00836 
00837     // Clean the list
00838     ioTravelSolutionList.clear();
00839 
00840     //
00841     const std::string lBA9_SegmentDateKey ("BA, 9, 2011-06-10, LHR, SYD, 21:45");
00842 
00843     // Add the segment date key to the travel solution
00844     TravelSolutionStruct lTS;
00845     lTS.addSegment (lBA9_SegmentDateKey);
00846 
00847     // Add the travel solution to the list
00848     ioTravelSolutionList.push_back (lTS);
00849   }
00850   
00851   // //////////////////////////////////////////////////////////////////////
00852   void CmdBomManager::
00853   buildSampleTravelSolutions (TravelSolutionList_T& ioTravelSolutionList) {
00854 
00855     // Clean the list
00856     ioTravelSolutionList.clear();
00857 
00858     //
00859     const std::string lBA9_SegmentDateKey ("BA, 9, 2011-06-10, LHR, SYD, 21:45");
00860 
00861     // Add the segment date key to the travel solution
00862     TravelSolutionStruct lTS;
00863     lTS.addSegment (lBA9_SegmentDateKey);
00864 
00865     // Fare option
00866     const ClassCode_T lClassPath (CLASS_CODE_Q);
00867     const Fare_T lFare (900);
00868     const ChangeFees_T lChangeFee (CHANGE_FEES);
00869     const NonRefundable_T isNonRefundable (NON_REFUNDABLE);
00870     const SaturdayStay_T lSaturdayStay (SATURDAY_STAY);
00871     const FareOptionStruct lFareOption (lClassPath, lFare, lChangeFee,
00872                                         isNonRefundable, lSaturdayStay);
00873 
00874     // Add (a copy of) the fare option
00875     lTS.addFareOption (lFareOption);
00876 
00877     // Map of class availabilities: set the availability for the Q
00878     // booking class (the one corresponding to the fare option) to 8.
00879     ClassAvailabilityMap_T lClassAvailabilityMap;
00880     const Availability_T lAvl (8);
00881     const bool hasInsertBeenSuccessful = lClassAvailabilityMap.
00882       insert (ClassAvailabilityMap_T::value_type (lClassPath, lAvl)).second;
00883     assert (hasInsertBeenSuccessful == true);
00884     // Add the map to the dedicated list held by the travel solution
00885     lTS.addClassAvailabilityMap (lClassAvailabilityMap);
00886 
00887     // Add the travel solution to the list
00888     ioTravelSolutionList.push_back (lTS);
00889   }
00890 
00891   // //////////////////////////////////////////////////////////////////////
00892   BookingRequestStruct CmdBomManager::buildSampleBookingRequest() {
00893     // Origin
00894     const AirportCode_T lOrigin (AIRPORT_LHR);
00895 
00896     // Destination
00897     const AirportCode_T lDestination (AIRPORT_SYD);
00898 
00899     // Point of Sale (POS)
00900     const CityCode_T lPOS (POS_LHR);
00901 
00902     // Preferred departure date (10-JUN-2011)
00903     const Date_T lPreferredDepartureDate (2011, boost::gregorian::Jun, 10);
00904 
00905     // Preferred departure time (08:00)
00906     const Duration_T lPreferredDepartureTime (8, 0, 0);
00907 
00908     // Date of the request (15-MAY-2011)
00909     const Date_T lRequestDate (2011, boost::gregorian::May, 15);
00910 
00911     // Time of the request (10:00)
00912     const Duration_T lRequestTime (10, 0, 0);
00913 
00914     // Date-time of the request (made of the date and time above)
00915     const DateTime_T lRequestDateTime (lRequestDate, lRequestTime);
00916 
00917     // Preferred cabin (also named class of service sometimes)
00918     const CabinCode_T lPreferredCabin (CABIN_ECO);
00919 
00920     // Number of persons in the party
00921     const PartySize_T lPartySize (3);
00922 
00923     // Channel (direct/indirect, on-line/off-line)
00924     const ChannelLabel_T lChannel (CHANNEL_DN);
00925 
00926     // Type of the trip (one-way, inbound/outbound of a return trip)
00927     const TripType_T lTripType (TRIP_TYPE_INBOUND);
00928 
00929     // Duration of the stay (expressed as a number of days)
00930     const DayDuration_T lStayDuration (DEFAULT_STAY_DURATION);
00931 
00932     // Frequent flyer tier (member, silver, gold, platinum, senator, etc)
00933     const FrequentFlyer_T lFrequentFlyerType (FREQUENT_FLYER_MEMBER);
00934 
00935     // Maximum willing-to-pay (WTP, expressed in monetary unit, e.g., EUR)
00936     const WTP_T lWTP (DEFAULT_WTP);
00937 
00938     // Value of time, for the customer (expressed in monetary unit per
00939     // unit of time, e.g., EUR/hour)
00940     const PriceValue_T lValueOfTime (DEFAULT_VALUE_OF_TIME);
00941 
00942     // Creation of the booking request structure
00943     BookingRequestStruct oBookingRequest (lOrigin, lDestination, lPOS,
00944                                           lPreferredDepartureDate,
00945                                           lRequestDateTime,
00946                                           lPreferredCabin,
00947                                           lPartySize, lChannel,
00948                                           lTripType, lStayDuration,
00949                                           lFrequentFlyerType,
00950                                           lPreferredDepartureTime,
00951                                           lWTP, lValueOfTime);
00952 
00953     return oBookingRequest;
00954   }
00955 
00956   // //////////////////////////////////////////////////////////////////////
00957   BookingRequestStruct CmdBomManager::buildSampleBookingRequestForCRS() {
00958     // Origin
00959     const AirportCode_T lOrigin (AIRPORT_SIN);
00960 
00961     // Destination
00962     const AirportCode_T lDestination (AIRPORT_BKK);
00963 
00964     // Point of Sale (POS)
00965     const CityCode_T lPOS (POS_SIN);
00966 
00967     // Preferred departure date (30-JAN-2010)
00968     const Date_T lPreferredDepartureDate (2010, boost::gregorian::Jan, 30);
00969 
00970     // Preferred departure time (10:00)
00971     const Duration_T lPreferredDepartureTime (10, 0, 0);
00972 
00973     // Date of the request (22-JAN-2010)
00974     const Date_T lRequestDate (2010, boost::gregorian::Jan, 22);
00975 
00976     // Time of the request (10:00)
00977     const Duration_T lRequestTime (10, 0, 0);
00978 
00979     // Date-time of the request (made of the date and time above)
00980     const DateTime_T lRequestDateTime (lRequestDate, lRequestTime);
00981 
00982     // Preferred cabin (also named class of service sometimes)
00983     const CabinCode_T lPreferredCabin (CABIN_ECO);
00984 
00985     // Number of persons in the party
00986     const PartySize_T lPartySize (3);
00987 
00988     // Channel (direct/indirect, on-line/off-line)
00989     const ChannelLabel_T lChannel (CHANNEL_IN);
00990 
00991     // Type of the trip (one-way, inbound/outbound of a return trip)
00992     const TripType_T lTripType (TRIP_TYPE_INBOUND);
00993 
00994     // Duration of the stay (expressed as a number of days)
00995     const DayDuration_T lStayDuration (DEFAULT_STAY_DURATION);
00996 
00997     // Frequent flyer tier (member, silver, gold, platinum, senator, etc)
00998     const FrequentFlyer_T lFrequentFlyerType (FREQUENT_FLYER_MEMBER);
00999 
01000     // Maximum willing-to-pay (WTP, expressed in monetary unit, e.g., EUR)
01001     const WTP_T lWTP (DEFAULT_WTP);
01002 
01003     // Value of time, for the customer (expressed in monetary unit per
01004     // unit of time, e.g., EUR/hour)
01005     const PriceValue_T lValueOfTime (DEFAULT_VALUE_OF_TIME);
01006 
01007     // Creation of the booking request structure
01008     BookingRequestStruct oBookingRequest (lOrigin,
01009                                           lDestination,
01010                                           lPOS,
01011                                           lPreferredDepartureDate,
01012                                           lRequestDateTime,
01013                                           lPreferredCabin,
01014                                           lPartySize, lChannel,
01015                                           lTripType, lStayDuration,
01016                                           lFrequentFlyerType,
01017                                           lPreferredDepartureTime,
01018                                           lWTP, lValueOfTime);
01019 
01020     return oBookingRequest;
01021   }
01022 
01023   // //////////////////////////////////////////////////////////////////////
01024   void CmdBomManager::buildPartnershipsSampleInventoryAndRM (BomRoot& ioBomRoot) {
01025 
01026     // Step 0.1: Inventory level
01027     // Create an Inventory for SQ
01028     const InventoryKey lSQKey ("SQ");
01029     Inventory& lSQInv = FacBom<Inventory>::instance().create (lSQKey);
01030     FacBomManager::addToListAndMap (ioBomRoot, lSQInv);
01031     FacBomManager::linkWithParent (ioBomRoot, lSQInv); 
01032     
01033     // Create an Inventory for CX
01034     const InventoryKey lCXKey ("CX");
01035     Inventory& lCXInv = FacBom<Inventory>::instance().create (lCXKey);
01036     FacBomManager::addToListAndMap (ioBomRoot, lCXInv);
01037     FacBomManager::linkWithParent (ioBomRoot, lCXInv);
01038 
01039     
01040     // ////// SQ ///////    
01041     // Step 0.2: Flight-date level
01042     // Create a FlightDate (SQ11/08-FEB-2010) for SQ's Inventory
01043     FlightNumber_T lFlightNumber = 11;
01044     Date_T lDate (2010, 2, 8);
01045     FlightDateKey lFlightDateKey (lFlightNumber, lDate);
01046 
01047     FlightDate& lSQ11_20100208_FD =
01048       FacBom<FlightDate>::instance().create (lFlightDateKey);
01049     FacBomManager::addToListAndMap (lSQInv, lSQ11_20100208_FD);
01050     FacBomManager::linkWithParent (lSQInv, lSQ11_20100208_FD);
01051 
01052     // Create a (mkt) FlightDate (SQ1200/08-FEB-2010) for SQ's Inventory
01053     FlightNumber_T lMktFlightNumber = 1200;
01054     //lDate = Date_T (2010, 2, 8);
01055     FlightDateKey lMktFlightDateKey (lMktFlightNumber, lDate);
01056 
01057     FlightDate& lSQ1200_20100208_FD =
01058       FacBom<FlightDate>::instance().create (lMktFlightDateKey);
01059     FacBomManager::addToListAndMap (lSQInv, lSQ1200_20100208_FD);
01060     FacBomManager::linkWithParent (lSQInv, lSQ1200_20100208_FD);
01061     
01062     // Display the flight-date
01063     // STDAIR_LOG_DEBUG ("FlightDate: " << lBA9_20110610_FD.toString());
01064     
01065     // Step 0.3: Segment-date level
01066     // Create a first SegmentDate (SIN-BKK) for SQ's Inventory
01067     const AirportCode_T lSIN ("SIN");
01068     const AirportCode_T lBKK ("BKK");
01069     const DateOffset_T l1Day (1);
01070     const DateOffset_T l2Days (2);
01071     const Duration_T l0820 (8, 20, 0);
01072     const Duration_T l1100 (11, 0, 0);
01073     const Duration_T l0340 (3, 40, 0);
01074     SegmentDateKey lSegmentDateKey (lSIN, lBKK);
01075 
01076     SegmentDate& lSINBKKSegment =
01077       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
01078     FacBomManager::addToListAndMap (lSQ11_20100208_FD, lSINBKKSegment);
01079     FacBomManager::linkWithParent (lSQ11_20100208_FD, lSINBKKSegment);
01080 
01081     // Fill the SegmentDate content
01082     lSINBKKSegment.setBoardingDate (lDate);
01083     lSINBKKSegment.setOffDate (lDate);
01084     lSINBKKSegment.setBoardingTime (l0820);
01085     lSINBKKSegment.setOffTime (l1100);
01086     lSINBKKSegment.setElapsedTime (l0340);
01087 
01088     // Create a second (mkt) SegmentDate (BKK-HKG) for SQ's Inventory
01089     const AirportCode_T lHKG ("HKG");
01090     const Duration_T l1200 (12, 0, 0);
01091     const Duration_T l1540 (15, 40, 0);
01092     const Duration_T l0240 (2, 40, 0);
01093     SegmentDateKey lMktSegmentDateKey (lBKK, lHKG);
01094 
01095     SegmentDate& lMktBKKHKGSegment =
01096       FacBom<SegmentDate>::instance().create (lMktSegmentDateKey);
01097     FacBomManager::addToListAndMap (lSQ1200_20100208_FD, lMktBKKHKGSegment);
01098     FacBomManager::linkWithParent (lSQ1200_20100208_FD, lMktBKKHKGSegment);
01099 
01100     // Fill the (mkt) SegmentDate content
01101     lMktBKKHKGSegment.setBoardingDate (lDate);
01102     lMktBKKHKGSegment.setOffDate (lDate);
01103     lMktBKKHKGSegment.setBoardingTime (l1200);
01104     lMktBKKHKGSegment.setOffTime (l1540);
01105     lMktBKKHKGSegment.setElapsedTime (l0240);
01106 
01107     // Step 0.4: Leg-date level
01108     // Create a first LegDate (SIN) for SQ's Inventory
01109     LegDateKey lLegDateKey (lSIN);
01110 
01111     LegDate& lSINLeg = FacBom<LegDate>::instance().create (lLegDateKey);
01112     FacBomManager::addToListAndMap (lSQ11_20100208_FD, lSINLeg);
01113     FacBomManager::linkWithParent (lSQ11_20100208_FD, lSINLeg);
01114 
01115     // Fill the LegDate content
01116     lSINLeg.setOffPoint (lBKK);
01117     lSINLeg.setBoardingDate (lDate);
01118     lSINLeg.setOffDate (lDate);
01119     lSINLeg.setBoardingTime (l0820);
01120     lSINLeg.setOffTime (l1100);
01121     lSINLeg.setElapsedTime (l0340);
01122 
01123     
01124     // Link the segment-dates with the leg-dates
01125     FacBomManager::addToListAndMap (lSINLeg, lSINBKKSegment);  
01126     FacBomManager::addToListAndMap (lSINBKKSegment, lSINLeg);
01127 
01128     // Step 0.5: segment-cabin level
01129     // Create a SegmentCabin (Y) for the Segment SIN-BKK of SQ's Inventory
01130     const CabinCode_T lY ("Y");
01131     SegmentCabinKey lYSegmentCabinKey (lY);
01132 
01133     SegmentCabin& lSINBKKSegmentYCabin =
01134       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
01135     FacBomManager::addToListAndMap (lSINBKKSegment, lSINBKKSegmentYCabin);
01136     FacBomManager::linkWithParent (lSINBKKSegment, lSINBKKSegmentYCabin);
01137 
01138     // Create a SegmentCabin (Y) for the (mkt) Segment BKK-HKG of SQ's Inventory
01139     SegmentCabin& lMktBKKHKGSegmentYCabin =
01140       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
01141     FacBomManager::addToListAndMap (lMktBKKHKGSegment, lMktBKKHKGSegmentYCabin);
01142     FacBomManager::linkWithParent (lMktBKKHKGSegment, lMktBKKHKGSegmentYCabin);
01143 
01144 
01145     // Step 0.6: leg-cabin level
01146     // Create a LegCabin (Y) for the Leg SIN-BKK on SQ's Inventory
01147     LegCabinKey lYLegCabinKey (lY);
01148 
01149     LegCabin& lSINLegYCabin =
01150       FacBom<LegCabin>::instance().create (lYLegCabinKey);
01151     FacBomManager::addToListAndMap (lSINLeg, lSINLegYCabin);
01152     FacBomManager::linkWithParent (lSINLeg, lSINLegYCabin);
01153 
01154     CabinCapacity_T lCapacity (100);
01155     lSINLegYCabin.setCapacities (lCapacity);
01156     lSINLegYCabin.setAvailabilityPool (lCapacity);
01157     
01169       FacBomManager::addToListAndMap (lSINLegYCabin, lSINBKKSegmentYCabin,
01170                                     lSINBKKSegmentYCabin.getFullerKey());
01171     
01182       FacBomManager::addToListAndMap (lSINBKKSegmentYCabin, lSINLegYCabin,
01183                                     lSINLegYCabin.getFullerKey());
01184 
01185 
01186     // Step 0.7: fare family level
01187     // Create a FareFamily (1) for the Segment SIN-BKK, cabin Y on SQ's Inv
01188     const FamilyCode_T l1 ("EcoSaver");
01189     FareFamilyKey l1FareFamilyKey (l1);
01190 
01191     FareFamily& lSINBKKSegmentYCabin1Family =
01192       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
01193     FacBomManager::addToListAndMap (lSINBKKSegmentYCabin,
01194                                     lSINBKKSegmentYCabin1Family);
01195     FacBomManager::linkWithParent (lSINBKKSegmentYCabin,
01196                                    lSINBKKSegmentYCabin1Family);
01197 
01198     // Create a FareFamily (1) for the (mkt) Segment BKK-HKG, cabin Y on SQ's Inv
01199     FareFamily& lMktBKKHKGSegmentYCabin1Family =
01200       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
01201     FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin,
01202                                     lMktBKKHKGSegmentYCabin1Family);
01203     FacBomManager::linkWithParent (lMktBKKHKGSegmentYCabin,
01204                                     lMktBKKHKGSegmentYCabin1Family);
01205     
01206     // Step 0.8: booking class level
01207     // Create a BookingClass (Y) for the Segment SIN-BKK, cabin Y,
01208     // fare family 1 on SQ's Inv
01209     BookingClassKey lYBookingClassKey (lY);
01210 
01211     BookingClass& lSINBKKSegmentYCabin1FamilyYClass =
01212       FacBom<BookingClass>::instance().create (lYBookingClassKey);
01213     FacBomManager::addToListAndMap (lSINBKKSegmentYCabin1Family,
01214                                     lSINBKKSegmentYCabin1FamilyYClass);
01215     FacBomManager::linkWithParent (lSINBKKSegmentYCabin1Family,
01216                                    lSINBKKSegmentYCabin1FamilyYClass);
01217 
01218     FacBomManager::addToListAndMap (lSINBKKSegmentYCabin,
01219                                     lSINBKKSegmentYCabin1FamilyYClass);
01220     FacBomManager::addToListAndMap (lSINBKKSegment,
01221                                     lSINBKKSegmentYCabin1FamilyYClass);
01222 
01223     lSINBKKSegmentYCabin1FamilyYClass.setYield(700);
01224 
01225     // Create a BookingClass (Y) for the (mkt) Segment BKK-HKG, cabin Y,
01226     // fare family 1 on SQ's Inv
01227     BookingClass& lMktBKKHKGSegmentYCabin1FamilyYClass =
01228       FacBom<BookingClass>::instance().create (lYBookingClassKey);
01229     FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin1Family,
01230                                     lMktBKKHKGSegmentYCabin1FamilyYClass);
01231     FacBomManager::linkWithParent (lMktBKKHKGSegmentYCabin1Family,
01232                                    lMktBKKHKGSegmentYCabin1FamilyYClass);
01233 
01234     FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin,
01235                                     lMktBKKHKGSegmentYCabin1FamilyYClass);
01236     FacBomManager::addToListAndMap (lMktBKKHKGSegment,
01237                                     lMktBKKHKGSegmentYCabin1FamilyYClass);
01238 
01239     lMktBKKHKGSegmentYCabin1FamilyYClass.setYield(700);
01240 
01241    
01242     // Create a BookingClass (M) for the Segment SIN-BKK, cabin Y,
01243     // fare family 1 on SQ's Inv
01244     const ClassCode_T lM ("M");
01245     BookingClassKey lMBookingClassKey (lM);
01246 
01247     BookingClass& lSINBKKSegmentYCabin1FamilyMClass =
01248       FacBom<BookingClass>::instance().create (lMBookingClassKey);
01249     FacBomManager::addToListAndMap (lSINBKKSegmentYCabin1Family,
01250                                     lSINBKKSegmentYCabin1FamilyMClass);
01251     FacBomManager::linkWithParent (lSINBKKSegmentYCabin1Family,
01252                                    lSINBKKSegmentYCabin1FamilyMClass);
01253 
01254     FacBomManager::addToListAndMap (lSINBKKSegmentYCabin,
01255                                     lSINBKKSegmentYCabin1FamilyMClass);
01256     FacBomManager::addToListAndMap (lSINBKKSegment,
01257                                     lSINBKKSegmentYCabin1FamilyMClass);
01258 
01259     lSINBKKSegmentYCabin1FamilyMClass.setYield(500);
01260 
01261     // Create a BookingClass (M) for the (mkt) Segment BKK-HKG, cabin Y,
01262     // fare family 1 on SQ's Inv
01263     BookingClass& lMktBKKHKGSegmentYCabin1FamilyMClass =
01264       FacBom<BookingClass>::instance().create (lMBookingClassKey);
01265     FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin1Family,
01266                                     lMktBKKHKGSegmentYCabin1FamilyMClass);
01267     FacBomManager::linkWithParent (lMktBKKHKGSegmentYCabin1Family,
01268                                    lMktBKKHKGSegmentYCabin1FamilyMClass);
01269 
01270     FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin,
01271                                     lMktBKKHKGSegmentYCabin1FamilyMClass);
01272     FacBomManager::addToListAndMap (lMktBKKHKGSegment,
01273                                     lMktBKKHKGSegmentYCabin1FamilyMClass);
01274 
01275     lMktBKKHKGSegmentYCabin1FamilyMClass.setYield(500);
01276 
01277     /* =================================================================================== */
01278     // Step 0.9: Partner Inventory
01279     // Create a partner Inventory CX for SQ    
01280     const InventoryKey lPartnerCXKey ("CX");
01281     Inventory& lPartnerCXInv = FacBom<Inventory>::instance().create (lPartnerCXKey);
01282     FacBomManager::addToListAndMap (lSQInv, lPartnerCXInv);
01283     FacBomManager::linkWithParent (lSQInv, lPartnerCXInv);
01284 
01285     // Step 0.9.2 : Flight-date level
01286     lFlightNumber = 12;
01287     lFlightDateKey = FlightDateKey (lFlightNumber, lDate);
01288 
01289     FlightDate& lPartnerCX12_20100208_FD =
01290       FacBom<FlightDate>::instance().create (lFlightDateKey);
01291     FacBomManager::addToListAndMap (lPartnerCXInv, lPartnerCX12_20100208_FD);
01292     FacBomManager::linkWithParent (lPartnerCXInv, lPartnerCX12_20100208_FD);
01293 
01294     lFlightNumber = 1100;
01295     lMktFlightDateKey = FlightDateKey (lFlightNumber, lDate);
01296 
01297     FlightDate& lPartnerCX1100_20100208_FD =
01298       FacBom<FlightDate>::instance().create (lMktFlightDateKey);
01299     FacBomManager::addToListAndMap (lPartnerCXInv, lPartnerCX1100_20100208_FD);
01300     FacBomManager::linkWithParent (lPartnerCXInv, lPartnerCX1100_20100208_FD);
01301 
01302     // Step 0.9.3: Segment-date level
01303     lSegmentDateKey = SegmentDateKey (lBKK, lHKG);
01304 
01305     SegmentDate& lPartnerBKKHKGSegment =
01306       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
01307     FacBomManager::addToListAndMap (lPartnerCX12_20100208_FD, lPartnerBKKHKGSegment);
01308     FacBomManager::linkWithParent (lPartnerCX12_20100208_FD, lPartnerBKKHKGSegment);
01309 
01310     lPartnerBKKHKGSegment.setBoardingDate (lDate);
01311     lPartnerBKKHKGSegment.setOffDate (lDate);
01312     lPartnerBKKHKGSegment.setBoardingTime (l1200);
01313     lPartnerBKKHKGSegment.setOffTime (l1540);
01314     lPartnerBKKHKGSegment.setElapsedTime (l0240);
01315 
01316     lMktSegmentDateKey = SegmentDateKey (lSIN, lBKK);
01317 
01318     SegmentDate& lPartnerMktSINBKKSegment =
01319       FacBom<SegmentDate>::instance().create (lMktSegmentDateKey);
01320     FacBomManager::addToListAndMap (lPartnerCX1100_20100208_FD, lPartnerMktSINBKKSegment);
01321     FacBomManager::linkWithParent (lPartnerCX1100_20100208_FD, lPartnerMktSINBKKSegment);
01322 
01323     lPartnerMktSINBKKSegment.setBoardingDate (lDate);
01324     lPartnerMktSINBKKSegment.setOffDate (lDate);
01325     lPartnerMktSINBKKSegment.setBoardingTime (l0820);
01326     lPartnerMktSINBKKSegment.setOffTime (l1100);
01327     lPartnerMktSINBKKSegment.setElapsedTime (l0340);
01328 
01329     // Step 0.9.4: Leg-date level
01330     lLegDateKey = LegDateKey (lBKK);
01331 
01332     LegDate& lPartnerBKKLeg = FacBom<LegDate>::instance().create (lLegDateKey);
01333     FacBomManager::addToListAndMap (lPartnerCX12_20100208_FD, lPartnerBKKLeg);
01334     FacBomManager::linkWithParent (lPartnerCX12_20100208_FD, lPartnerBKKLeg);
01335 
01336     lPartnerBKKLeg.setOffPoint (lHKG);
01337     lPartnerBKKLeg.setBoardingDate (lDate);
01338     lPartnerBKKLeg.setOffDate (lDate);
01339     lPartnerBKKLeg.setBoardingTime (l1200);
01340     lPartnerBKKLeg.setOffTime (l1540);
01341     lPartnerBKKLeg.setElapsedTime (l0240);
01342 
01343     FacBomManager::addToListAndMap (lPartnerBKKLeg, lPartnerBKKHKGSegment);
01344     FacBomManager::addToListAndMap (lPartnerBKKHKGSegment, lPartnerBKKLeg);
01345 
01346     // Step 9.0.5: segment-cabin level
01347     
01348     SegmentCabin& lPartnerBKKHKGSegmentYCabin =
01349       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
01350     FacBomManager::addToListAndMap (lPartnerBKKHKGSegment, lPartnerBKKHKGSegmentYCabin);
01351     FacBomManager::linkWithParent (lPartnerBKKHKGSegment, lPartnerBKKHKGSegmentYCabin);
01352 
01353     SegmentCabin& lPartnerMktSINBKKSegmentYCabin =
01354       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
01355     FacBomManager::addToListAndMap (lPartnerMktSINBKKSegment, lPartnerMktSINBKKSegmentYCabin);
01356     FacBomManager::linkWithParent (lPartnerMktSINBKKSegment, lPartnerMktSINBKKSegmentYCabin);
01357 
01358     // Step 9.0.6: leg-cabin level
01359     
01360     LegCabin& lPartnerBKKLegYCabin =
01361       FacBom<LegCabin>::instance().create (lYLegCabinKey);
01362     FacBomManager::addToListAndMap (lPartnerBKKLeg, lPartnerBKKLegYCabin);
01363     FacBomManager::linkWithParent (lPartnerBKKLeg, lPartnerBKKLegYCabin);
01364 
01365     lCapacity = CabinCapacity_T(999);
01366     lPartnerBKKLegYCabin.setCapacities (lCapacity);
01367     lPartnerBKKLegYCabin.setAvailabilityPool (lCapacity);
01368 
01369     FacBomManager::addToListAndMap (lPartnerBKKLegYCabin, lPartnerBKKHKGSegmentYCabin,
01370                                     lPartnerBKKHKGSegmentYCabin.getFullerKey());
01371     FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin, lPartnerBKKLegYCabin,
01372                                     lPartnerBKKLegYCabin.getFullerKey());
01373 
01374     // Step 9.0.7: fare family level
01375     
01376     FareFamily& lPartnerBKKHKGSegmentYCabin1Family =
01377       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
01378     FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin,
01379                                     lPartnerBKKHKGSegmentYCabin1Family);
01380     FacBomManager::linkWithParent (lPartnerBKKHKGSegmentYCabin,
01381                                    lPartnerBKKHKGSegmentYCabin1Family);
01382 
01383     FareFamily& lPartnerMktSINBKKSegmentYCabin1Family =
01384       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
01385     FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin,
01386                                     lPartnerMktSINBKKSegmentYCabin1Family);
01387     FacBomManager::linkWithParent (lPartnerMktSINBKKSegmentYCabin,
01388                                    lPartnerMktSINBKKSegmentYCabin1Family);
01389 
01390     // Step 9.0.8: booking class level
01391 
01392     BookingClass& lPartnerBKKHKGSegmentYCabin1FamilyYClass =
01393       FacBom<BookingClass>::instance().create (lYBookingClassKey);
01394     FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin1Family,
01395                                     lPartnerBKKHKGSegmentYCabin1FamilyYClass);
01396     FacBomManager::linkWithParent (lPartnerBKKHKGSegmentYCabin1Family,
01397                                    lPartnerBKKHKGSegmentYCabin1FamilyYClass);
01398 
01399     FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin,
01400                                     lPartnerBKKHKGSegmentYCabin1FamilyYClass);
01401     FacBomManager::addToListAndMap (lPartnerBKKHKGSegment,
01402                                     lPartnerBKKHKGSegmentYCabin1FamilyYClass);
01403 
01404     BookingClass& lPartnerMktSINBKKSegmentYCabin1FamilyYClass =
01405       FacBom<BookingClass>::instance().create (lYBookingClassKey);
01406     FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin1Family,
01407                                     lPartnerMktSINBKKSegmentYCabin1FamilyYClass);
01408     FacBomManager::linkWithParent (lPartnerMktSINBKKSegmentYCabin1Family,
01409                                    lPartnerMktSINBKKSegmentYCabin1FamilyYClass);
01410 
01411     FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin,
01412                                     lPartnerMktSINBKKSegmentYCabin1FamilyYClass);
01413     FacBomManager::addToListAndMap (lPartnerMktSINBKKSegment,
01414                                     lPartnerMktSINBKKSegmentYCabin1FamilyYClass);
01415     
01416     BookingClass& lPartnerBKKHKGSegmentYCabin1FamilyMClass =
01417       FacBom<BookingClass>::instance().create (lMBookingClassKey);
01418     FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin1Family,
01419                                     lPartnerBKKHKGSegmentYCabin1FamilyMClass);
01420     FacBomManager::linkWithParent (lPartnerBKKHKGSegmentYCabin1Family,
01421                                    lPartnerBKKHKGSegmentYCabin1FamilyMClass);
01422 
01423     FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin,
01424                                     lPartnerBKKHKGSegmentYCabin1FamilyMClass);
01425     FacBomManager::addToListAndMap (lPartnerBKKHKGSegment,
01426                                     lPartnerBKKHKGSegmentYCabin1FamilyMClass);
01427 
01428     BookingClass& lPartnerMktSINBKKSegmentYCabin1FamilyMClass =
01429       FacBom<BookingClass>::instance().create (lMBookingClassKey);
01430     FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin1Family,
01431                                     lPartnerMktSINBKKSegmentYCabin1FamilyMClass);
01432     FacBomManager::linkWithParent (lPartnerMktSINBKKSegmentYCabin1Family,
01433                                    lPartnerMktSINBKKSegmentYCabin1FamilyMClass);
01434 
01435     FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin,
01436                                     lPartnerMktSINBKKSegmentYCabin1FamilyMClass);
01437     FacBomManager::addToListAndMap (lPartnerMktSINBKKSegment,
01438                                     lPartnerMktSINBKKSegmentYCabin1FamilyMClass);    
01439 
01440     // Step 9.0.9: link SQ inventory objects to Partner CX inventory objects
01441 
01442     FacBomManager::addToListAndMap (lSINBKKSegment, lPartnerMktSINBKKSegment);
01443     lMktBKKHKGSegment.setIsOtherAirlineOperating(true);
01444     FacBomManager::addToListAndMap (lMktBKKHKGSegment, lPartnerBKKHKGSegment);
01445 
01446     /* =================================================================================== */
01447 
01448     // Step 1.0: O&D level
01449     // Create an O&D Date (SQ11/08-FEB-2010/SIN-BKK-SQ1200/08-FEB-2010/BKK-HKG) for SQ's Inventory
01450     OnDString_T lSQSINBKKOnDStr = "SQ;11,2010-Feb-08;SIN,BKK";
01451     OnDString_T lMktSQBKKHKGOnDStr = "SQ;1200,2010-Feb-08;BKK,HKG";
01452     OnDStringList_T lOnDStringList;
01453     lOnDStringList.push_back (lSQSINBKKOnDStr);
01454     lOnDStringList.push_back (lMktSQBKKHKGOnDStr);
01455 
01456     OnDDateKey lOnDDateKey (lOnDStringList);
01457     OnDDate& lSQ_SINHKG_OnDDate =
01458       FacBom<OnDDate>::instance().create (lOnDDateKey);
01459     // Link to the inventory
01460     FacBomManager::addToListAndMap (lSQInv, lSQ_SINHKG_OnDDate);
01461     FacBomManager::linkWithParent (lSQInv, lSQ_SINHKG_OnDDate);
01462 
01463     // Add the segments
01464     FacBomManager::addToListAndMap (lSQ_SINHKG_OnDDate, lSINBKKSegment);
01465     FacBomManager::addToListAndMap (lSQ_SINHKG_OnDDate, lMktBKKHKGSegment);
01466 
01467     // Add total forecast info for cabin Y.
01468     const MeanStdDevPair_T lMean60StdDev6 (60.0, 6.0);
01469     const WTP_T lWTP750 = 750.0;
01470     const WTPDemandPair_T lWTP750Mean60StdDev6 (lWTP750, lMean60StdDev6);
01471     lSQ_SINHKG_OnDDate.setTotalForecast (lY, lWTP750Mean60StdDev6);
01472 
01473     // Add demand info (optional).
01474     CabinClassPair_T lCC_YM1 (lY,lM);
01475     CabinClassPair_T lCC_YM2 (lY,lM);
01476     CabinClassPairList_T lCabinClassPairList;
01477     lCabinClassPairList.push_back(lCC_YM1);
01478     lCabinClassPairList.push_back(lCC_YM2);
01479     const MeanStdDevPair_T lMean20StdDev2 (20.0, 2.0);
01480     const Yield_T lYield850 = 850.0;
01481     const YieldDemandPair_T lYield850Mean20StdDev2 (lYield850, lMean20StdDev2);
01482     lSQ_SINHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield850Mean20StdDev2);
01483     
01484     CabinClassPair_T lCC_YY1 (lY,lY);
01485     CabinClassPair_T lCC_YY2 (lY,lY);
01486     lCabinClassPairList.clear();
01487     lCabinClassPairList.push_back(lCC_YY1);
01488     lCabinClassPairList.push_back(lCC_YY2);
01489     const MeanStdDevPair_T lMean10StdDev1 (10.0, 1.0);
01490     const Yield_T lYield1200 = 1200.0;
01491     const YieldDemandPair_T lYield1200Mean10StdDev1 (lYield1200, lMean10StdDev1);
01492     lSQ_SINHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield1200Mean10StdDev1);
01493 
01494     // Create an O&D Date (SQ11/08-FEB-2010/SIN-BKK) for SQ's Inventory
01495     lOnDStringList.clear();
01496     lOnDStringList.push_back (lSQSINBKKOnDStr);
01497 
01498     lOnDDateKey = OnDDateKey(lOnDStringList);
01499     OnDDate& lSQ_SINBKK_OnDDate =
01500       FacBom<OnDDate>::instance().create (lOnDDateKey);
01501     // Link to the inventory
01502     FacBomManager::addToListAndMap (lSQInv, lSQ_SINBKK_OnDDate);
01503     FacBomManager::linkWithParent (lSQInv, lSQ_SINBKK_OnDDate);
01504 
01505     // Add the segments
01506     FacBomManager::addToListAndMap (lSQ_SINBKK_OnDDate, lSINBKKSegment);
01507 
01508     // Add total forecast info for cabin Y.
01509     const WTP_T lWTP400 = 400.0;
01510     const WTPDemandPair_T lWTP400Mean60StdDev6 (lWTP400, lMean60StdDev6);
01511     lSQ_SINBKK_OnDDate.setTotalForecast (lY, lWTP400Mean60StdDev6);
01512 
01513     // Add demand info (optional).
01514     lCabinClassPairList.clear();
01515     lCabinClassPairList.push_back(lCC_YM1);
01516     const MeanStdDevPair_T lMean20StdDev1 (20.0, 1.0);
01517     const Yield_T lYield500 = 500.0;
01518     const YieldDemandPair_T lYield500Mean20StdDev1 (lYield500, lMean20StdDev1);
01519     lSQ_SINBKK_OnDDate.setDemandInformation (lCabinClassPairList, lYield500Mean20StdDev1);
01520 
01521     lCabinClassPairList.clear();
01522     lCabinClassPairList.push_back(lCC_YY1);
01523     const Yield_T lYield700 = 700.0;
01524     const YieldDemandPair_T lYield700Mean20StdDev1 (lYield700, lMean10StdDev1 );
01525     lSQ_SINBKK_OnDDate.setDemandInformation (lCabinClassPairList, lYield700Mean20StdDev1);
01526 
01527     /*******************************************************************************
01528     // Create an O&D Date (SQ1200/08-FEB-2010/BKK-HKG) for SQ's Inventory
01529     lFullKeyList.clear();
01530     lFullKeyList.push_back (lMktSQBKKHKGFullKeyStr);
01531 
01532     lOnDDateKey = OnDDateKey(lFullKeyList);
01533     OnDDate& lMktSQ_BKKHKG_OnDDate =
01534       FacBom<OnDDate>::instance().create (lOnDDateKey);
01535     // Link to the inventory
01536     FacBomManager::addToListAndMap (lSQInv, lMktSQ_BKKHKG_OnDDate);
01537     FacBomManager::linkWithParent (lSQInv, lMktSQ_BKKHKG_OnDDate);
01538 
01539     // Add the segments
01540     FacBomManager::addToListAndMap (lMktSQ_BKKHKG_OnDDate, lMktBKKHKGSegment);
01541 
01542     // Demand info is not added for purely marketed O&Ds
01543     // Add demand info
01544     // lCabinClassPairList.clear();
01545     // lCabinClassPairList.push_back(lCC_YM2);
01546     // lMktSQ_BKKHKG_OnDDate.setDemandInformation (lCabinClassPairList, 500.0, 20.0, 1.0);
01547     ***********************************************************************************/
01548     
01549             
01550     // ////// CX ///////    
01551     // Step 0.2: Flight-date level
01552     // Create a FlightDate (CX12/08-FEB-2010) for CX's Inventory
01553     lFlightNumber = 12;
01554     //lDate = Date_T (2010, 2, 8);
01555     lFlightDateKey = FlightDateKey (lFlightNumber, lDate);
01556 
01557     FlightDate& lCX12_20100208_FD =
01558       FacBom<FlightDate>::instance().create (lFlightDateKey);
01559     FacBomManager::addToListAndMap (lCXInv, lCX12_20100208_FD);
01560     FacBomManager::linkWithParent (lCXInv, lCX12_20100208_FD);
01561 
01562     // Create a (mkt) FlightDate (CX1100/08-FEB-2010) for CX's Inventory
01563     lFlightNumber = 1100;
01564     //lDate = Date_T (2010, 2, 8);
01565     lMktFlightDateKey = FlightDateKey (lFlightNumber, lDate);
01566 
01567     FlightDate& lCX1100_20100208_FD =
01568       FacBom<FlightDate>::instance().create (lMktFlightDateKey);
01569     FacBomManager::addToListAndMap (lCXInv, lCX1100_20100208_FD);
01570     FacBomManager::linkWithParent (lCXInv, lCX1100_20100208_FD);
01571     
01572     // Display the flight-date
01573     // STDAIR_LOG_DEBUG ("FlightDate: " << lAF084_20110320_FD.toString());
01574 
01575     // Step 0.3: Segment-date level
01576     // Create a SegmentDate BKK-HKG for CX's Inventory
01577     
01578     lSegmentDateKey = SegmentDateKey (lBKK, lHKG);
01579 
01580     SegmentDate& lBKKHKGSegment =
01581       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
01582     FacBomManager::addToListAndMap (lCX12_20100208_FD, lBKKHKGSegment);
01583     FacBomManager::linkWithParent (lCX12_20100208_FD, lBKKHKGSegment);  
01584 
01585     // Fill the SegmentDate content
01586     lBKKHKGSegment.setBoardingDate (lDate);
01587     lBKKHKGSegment.setOffDate (lDate);
01588     lBKKHKGSegment.setBoardingTime (l1200);
01589     lBKKHKGSegment.setOffTime (l1540);
01590     lBKKHKGSegment.setElapsedTime (l0240);
01591 
01592     // Create a second (mkt) SegmentDate (SIN-BKK) for CX's Inventory
01593     lMktSegmentDateKey = SegmentDateKey (lSIN, lBKK);
01594 
01595     SegmentDate& lMktSINBKKSegment =
01596       FacBom<SegmentDate>::instance().create (lMktSegmentDateKey);
01597     FacBomManager::addToListAndMap (lCX1100_20100208_FD, lMktSINBKKSegment);
01598     FacBomManager::linkWithParent (lCX1100_20100208_FD, lMktSINBKKSegment);
01599 
01600     // Fill the (mkt) SegmentDate content
01601     lMktSINBKKSegment.setBoardingDate (lDate);
01602     lMktSINBKKSegment.setOffDate (lDate);
01603     lMktSINBKKSegment.setBoardingTime (l0820);
01604     lMktSINBKKSegment.setOffTime (l1100);
01605     lMktSINBKKSegment.setElapsedTime (l0340);
01606 
01607     // Step 0.4: Leg-date level
01608     // Create a LegDate (BKK) for CX's Inventory
01609     lLegDateKey = LegDateKey (lBKK);
01610 
01611     LegDate& lBKKLeg = FacBom<LegDate>::instance().create (lLegDateKey);
01612     FacBomManager::addToListAndMap (lCX12_20100208_FD, lBKKLeg);
01613     FacBomManager::linkWithParent (lCX12_20100208_FD, lBKKLeg);
01614 
01615     // Fill the LegDate content
01616     lBKKLeg.setOffPoint (lHKG);
01617     lBKKLeg.setBoardingDate (lDate);
01618     lBKKLeg.setOffDate (lDate);
01619     lBKKLeg.setBoardingTime (l1200);
01620     lBKKLeg.setOffTime (l1540);
01621     lBKKLeg.setElapsedTime (l0240);
01622 
01623     // Display the leg-date
01624     // STDAIR_LOG_DEBUG ("LegDate: " << lCDGLeg.toString());
01625 
01626     // Link the segment-dates with the leg-dates
01627     FacBomManager::addToListAndMap (lBKKLeg, lBKKHKGSegment);
01628     FacBomManager::addToListAndMap (lBKKHKGSegment, lBKKLeg);
01629 
01630     // Step 0.5: segment-cabin level
01631     // Create a SegmentCabin (Y) for the Segment BKK-HKG of CX's Inventory
01632     SegmentCabin& lBKKHKGSegmentYCabin =
01633       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
01634     FacBomManager::addToListAndMap (lBKKHKGSegment, lBKKHKGSegmentYCabin);
01635     FacBomManager::linkWithParent (lBKKHKGSegment, lBKKHKGSegmentYCabin);
01636 
01637     // Create a SegmentCabin (Y) for the (mkt) Segment SIN-BKK of CX's Inventory
01638     SegmentCabin& lMktSINBKKSegmentYCabin =
01639       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
01640     FacBomManager::addToListAndMap (lMktSINBKKSegment, lMktSINBKKSegmentYCabin);
01641     FacBomManager::linkWithParent (lMktSINBKKSegment, lMktSINBKKSegmentYCabin);
01642 
01643     // Step 0.6: leg-cabin level
01644     // Create a LegCabin (Y) for the Leg BKK-HKG on CX's Inventory
01645     LegCabin& lBKKLegYCabin =
01646       FacBom<LegCabin>::instance().create (lYLegCabinKey);
01647     FacBomManager::addToListAndMap (lBKKLeg, lBKKLegYCabin);
01648     FacBomManager::linkWithParent (lBKKLeg, lBKKLegYCabin);
01649 
01650     lCapacity = CabinCapacity_T(100);
01651     lBKKLegYCabin.setCapacities (lCapacity);
01652     lBKKLegYCabin.setAvailabilityPool (lCapacity);
01653 
01654     // Link the segment-dates with the leg-dates
01655     FacBomManager::addToListAndMap (lBKKLegYCabin, lBKKHKGSegmentYCabin,
01656                                     lBKKHKGSegmentYCabin.getFullerKey());
01657     FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin, lBKKLegYCabin,
01658                                     lBKKLegYCabin.getFullerKey());
01659    
01660     // Step 0.7: fare family level
01661     // Create a fareFamily (1) for the Segment BKK-HKG, cabin Y on CX's Inv
01662     FareFamily& lBKKHKGSegmentYCabin1Family =
01663       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
01664     FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin,
01665                                     lBKKHKGSegmentYCabin1Family);
01666     FacBomManager::linkWithParent (lBKKHKGSegmentYCabin,
01667                                    lBKKHKGSegmentYCabin1Family);
01668 
01669     // Create a FareFamily (1) for the (mkt) Segment SIN-BKK, cabin Y on CX's Inv
01670     FareFamily& lMktSINBKKSegmentYCabin1Family =
01671       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
01672     FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin,
01673                                     lMktSINBKKSegmentYCabin1Family);
01674     FacBomManager::linkWithParent (lMktSINBKKSegmentYCabin,
01675                                    lMktSINBKKSegmentYCabin1Family);
01676 
01677     
01678     // Step 0.8: booking class level
01679     // Create a BookingClass (Y) for the
01680     // Segment BKK-HKG, cabin Y, fare family 1 on CX's Inv
01681     BookingClass& lBKKHKGSegmentYCabin1FamilyYClass =
01682       FacBom<BookingClass>::instance().create (lYBookingClassKey);
01683     FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin1Family,
01684                                     lBKKHKGSegmentYCabin1FamilyYClass);
01685     FacBomManager::linkWithParent (lBKKHKGSegmentYCabin1Family,
01686                                    lBKKHKGSegmentYCabin1FamilyYClass);
01687 
01688     FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin,
01689                                     lBKKHKGSegmentYCabin1FamilyYClass);
01690     FacBomManager::addToListAndMap (lBKKHKGSegment,
01691                                     lBKKHKGSegmentYCabin1FamilyYClass);
01692 
01693     lBKKHKGSegmentYCabin1FamilyYClass.setYield(700);
01694 
01695     // Create a BookingClass (Y) for the (mkt) Segment SIN-BKK, cabin Y,
01696     // fare family 1 on CX's Inv
01697     BookingClass& lMktSINBKKSegmentYCabin1FamilyYClass =
01698       FacBom<BookingClass>::instance().create (lYBookingClassKey);
01699     FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin1Family,
01700                                     lMktSINBKKSegmentYCabin1FamilyYClass);
01701     FacBomManager::linkWithParent (lMktSINBKKSegmentYCabin1Family,
01702                                    lMktSINBKKSegmentYCabin1FamilyYClass);
01703 
01704     FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin,
01705                                     lMktSINBKKSegmentYCabin1FamilyYClass);
01706     FacBomManager::addToListAndMap (lMktSINBKKSegment,
01707                                     lMktSINBKKSegmentYCabin1FamilyYClass);
01708 
01709     lMktSINBKKSegmentYCabin1FamilyYClass.setYield(700);
01710     
01711     //Create a BookingClass (M) for the
01712     // Segment BKK-HKG, cabin Y, fare family 1 on CX's Inv
01713     BookingClass& lBKKHKGSegmentYCabin1FamilyMClass =
01714       FacBom<BookingClass>::instance().create (lMBookingClassKey);
01715     FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin1Family,
01716                                     lBKKHKGSegmentYCabin1FamilyMClass);
01717     FacBomManager::linkWithParent (lBKKHKGSegmentYCabin1Family,
01718                                    lBKKHKGSegmentYCabin1FamilyMClass);
01719 
01720     FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin,
01721                                     lBKKHKGSegmentYCabin1FamilyMClass);
01722     FacBomManager::addToListAndMap (lBKKHKGSegment,
01723                                     lBKKHKGSegmentYCabin1FamilyMClass);
01724 
01725     lBKKHKGSegmentYCabin1FamilyMClass.setYield(500);
01726 
01727     // Create a BookingClass (M) for the (mkt) Segment SIN-BKK, cabin Y,
01728     // fare family 1 on CX's Inv
01729     BookingClass& lMktSINBKKSegmentYCabin1FamilyMClass =
01730       FacBom<BookingClass>::instance().create (lMBookingClassKey);
01731     FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin1Family,
01732                                     lMktSINBKKSegmentYCabin1FamilyMClass);
01733     FacBomManager::linkWithParent (lMktSINBKKSegmentYCabin1Family,
01734                                    lMktSINBKKSegmentYCabin1FamilyMClass);
01735 
01736     FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin,
01737                                     lMktSINBKKSegmentYCabin1FamilyMClass);
01738     FacBomManager::addToListAndMap (lMktSINBKKSegment,
01739                                     lMktSINBKKSegmentYCabin1FamilyMClass);
01740 
01741     lMktSINBKKSegmentYCabin1FamilyMClass.setYield(500);
01742 
01743     /* =================================================================================== */
01744     // Step 0.9: Partner Inventory
01745     // Create a partner Inventory SQ for CX   
01746     const InventoryKey lPartnerSQKey ("SQ");
01747     Inventory& lPartnerSQInv = FacBom<Inventory>::instance().create (lPartnerSQKey);
01748     FacBomManager::addToListAndMap (lCXInv, lPartnerSQInv);
01749     FacBomManager::linkWithParent (lCXInv, lPartnerSQInv);
01750 
01751     // Step 0.9.2 : Flight-date level
01752     lFlightNumber = 11;
01753     lFlightDateKey = FlightDateKey (lFlightNumber, lDate);
01754 
01755     FlightDate& lPartnerSQ11_20100208_FD =
01756       FacBom<FlightDate>::instance().create (lFlightDateKey);
01757     FacBomManager::addToListAndMap (lPartnerSQInv, lPartnerSQ11_20100208_FD);
01758     FacBomManager::linkWithParent (lPartnerSQInv, lPartnerSQ11_20100208_FD);
01759 
01760     lFlightNumber = 1200;
01761     lMktFlightDateKey = FlightDateKey (lFlightNumber, lDate);
01762 
01763     FlightDate& lPartnerSQ1200_20100208_FD =
01764       FacBom<FlightDate>::instance().create (lMktFlightDateKey);
01765     FacBomManager::addToListAndMap (lPartnerSQInv, lPartnerSQ1200_20100208_FD);
01766     FacBomManager::linkWithParent (lPartnerSQInv, lPartnerSQ1200_20100208_FD);
01767 
01768     // Step 0.9.3: Segment-date level
01769     lSegmentDateKey = SegmentDateKey (lSIN, lBKK);
01770 
01771     SegmentDate& lPartnerSINBKKSegment =
01772       FacBom<SegmentDate>::instance().create (lSegmentDateKey);
01773     FacBomManager::addToListAndMap (lPartnerSQ11_20100208_FD, lPartnerSINBKKSegment);
01774     FacBomManager::linkWithParent (lPartnerSQ11_20100208_FD, lPartnerSINBKKSegment);
01775     
01776     lPartnerSINBKKSegment.setBoardingDate (lDate);
01777     lPartnerSINBKKSegment.setOffDate (lDate);
01778     lPartnerSINBKKSegment.setBoardingTime (l0820);
01779     lPartnerSINBKKSegment.setOffTime (l1100);
01780     lPartnerSINBKKSegment.setElapsedTime (l0340);
01781     
01782     lMktSegmentDateKey = SegmentDateKey (lBKK, lHKG);
01783 
01784     SegmentDate& lPartnerMktBKKHKGSegment =
01785       FacBom<SegmentDate>::instance().create (lMktSegmentDateKey);
01786     FacBomManager::addToListAndMap (lPartnerSQ1200_20100208_FD, lPartnerMktBKKHKGSegment);
01787     FacBomManager::linkWithParent (lPartnerSQ1200_20100208_FD, lPartnerMktBKKHKGSegment);
01788 
01789     lPartnerMktBKKHKGSegment.setBoardingDate (lDate);
01790     lPartnerMktBKKHKGSegment.setOffDate (lDate);
01791     lPartnerMktBKKHKGSegment.setBoardingTime (l1200);
01792     lPartnerMktBKKHKGSegment.setOffTime (l1540);
01793     lPartnerMktBKKHKGSegment.setElapsedTime (l0240);
01794   
01795     // Step 0.9.4: Leg-date level
01796     lLegDateKey = LegDateKey (lSIN);
01797 
01798     LegDate& lPartnerSINLeg = FacBom<LegDate>::instance().create (lLegDateKey);
01799     FacBomManager::addToListAndMap (lPartnerSQ11_20100208_FD, lPartnerSINLeg);
01800     FacBomManager::linkWithParent (lPartnerSQ11_20100208_FD, lPartnerSINLeg);
01801 
01802     lPartnerSINLeg.setOffPoint (lBKK);
01803     lPartnerSINLeg.setBoardingDate (lDate);
01804     lPartnerSINLeg.setOffDate (lDate);
01805     lPartnerSINLeg.setBoardingTime (l0820);
01806     lPartnerSINLeg.setOffTime (l1100);
01807     lPartnerSINLeg.setElapsedTime (l0340);
01808 
01809     FacBomManager::addToListAndMap (lPartnerSINLeg, lPartnerSINBKKSegment);
01810     FacBomManager::addToListAndMap (lPartnerSINBKKSegment, lPartnerSINLeg);
01811 
01812     // Step 9.0.5: segment-cabin level
01813 
01814     SegmentCabin& lPartnerSINBKKSegmentYCabin =
01815       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
01816     FacBomManager::addToListAndMap (lPartnerSINBKKSegment, lPartnerSINBKKSegmentYCabin);
01817     FacBomManager::linkWithParent (lPartnerSINBKKSegment, lPartnerSINBKKSegmentYCabin);
01818     
01819     SegmentCabin& lPartnerMktBKKHKGSegmentYCabin =
01820       FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
01821     FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegment, lPartnerMktBKKHKGSegmentYCabin);
01822     FacBomManager::linkWithParent (lPartnerMktBKKHKGSegment, lPartnerMktBKKHKGSegmentYCabin);
01823     
01824     // Step 9.0.6: leg-cabin level
01825     
01826     LegCabin& lPartnerSINLegYCabin =
01827       FacBom<LegCabin>::instance().create (lYLegCabinKey);
01828     FacBomManager::addToListAndMap (lPartnerSINLeg, lPartnerSINLegYCabin);
01829     FacBomManager::linkWithParent (lPartnerSINLeg, lPartnerSINLegYCabin);
01830 
01831     lCapacity = CabinCapacity_T(999);
01832     lPartnerSINLegYCabin.setCapacities (lCapacity);
01833     lPartnerSINLegYCabin.setAvailabilityPool (lCapacity);
01834 
01835     FacBomManager::addToListAndMap (lPartnerSINLegYCabin, lPartnerSINBKKSegmentYCabin,
01836                                     lPartnerSINBKKSegmentYCabin.getFullerKey());
01837     FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin, lPartnerSINLegYCabin,
01838                                     lPartnerSINLegYCabin.getFullerKey());
01839 
01840     // Step 9.0.7: fare family level
01841 
01842     FareFamily& lPartnerSINBKKSegmentYCabin1Family =
01843       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
01844     FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin,
01845                                     lPartnerSINBKKSegmentYCabin1Family);
01846     FacBomManager::linkWithParent (lPartnerSINBKKSegmentYCabin,
01847                                    lPartnerSINBKKSegmentYCabin1Family);
01848     
01849     FareFamily& lPartnerMktBKKHKGSegmentYCabin1Family =
01850       FacBom<FareFamily>::instance().create (l1FareFamilyKey);
01851     FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin,
01852                                     lPartnerMktBKKHKGSegmentYCabin1Family);
01853     FacBomManager::linkWithParent (lPartnerMktBKKHKGSegmentYCabin,
01854                                    lPartnerMktBKKHKGSegmentYCabin1Family);
01855 
01856     
01857     // Step 9.0.8: booking class level
01858 
01859     BookingClass& lPartnerSINBKKSegmentYCabin1FamilyYClass =
01860       FacBom<BookingClass>::instance().create (lYBookingClassKey);
01861     FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin1Family,
01862                                     lPartnerSINBKKSegmentYCabin1FamilyYClass);
01863     FacBomManager::linkWithParent (lPartnerSINBKKSegmentYCabin1Family,
01864                                    lPartnerSINBKKSegmentYCabin1FamilyYClass);
01865 
01866     FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin,
01867                                     lPartnerSINBKKSegmentYCabin1FamilyYClass);
01868     FacBomManager::addToListAndMap (lPartnerSINBKKSegment,
01869                                     lPartnerSINBKKSegmentYCabin1FamilyYClass);
01870 
01871     BookingClass& lPartnerMktBKKHKGSegmentYCabin1FamilyYClass =
01872       FacBom<BookingClass>::instance().create (lYBookingClassKey);
01873     FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin1Family,
01874                                     lPartnerMktBKKHKGSegmentYCabin1FamilyYClass);
01875     FacBomManager::linkWithParent (lPartnerMktBKKHKGSegmentYCabin1Family,
01876                                    lPartnerMktBKKHKGSegmentYCabin1FamilyYClass);
01877 
01878     FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin,
01879                                     lPartnerMktBKKHKGSegmentYCabin1FamilyYClass);
01880     FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegment,
01881                                     lPartnerMktBKKHKGSegmentYCabin1FamilyYClass);    
01882     
01883     BookingClass& lPartnerSINBKKSegmentYCabin1FamilyMClass =
01884       FacBom<BookingClass>::instance().create (lMBookingClassKey);
01885     FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin1Family,
01886                                     lPartnerSINBKKSegmentYCabin1FamilyMClass);
01887     FacBomManager::linkWithParent (lPartnerSINBKKSegmentYCabin1Family,
01888                                    lPartnerSINBKKSegmentYCabin1FamilyMClass);
01889 
01890     FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin,
01891                                     lPartnerSINBKKSegmentYCabin1FamilyMClass);
01892     FacBomManager::addToListAndMap (lPartnerSINBKKSegment,
01893                                     lPartnerSINBKKSegmentYCabin1FamilyMClass);
01894 
01895     BookingClass& lPartnerMktBKKHKGSegmentYCabin1FamilyMClass =
01896       FacBom<BookingClass>::instance().create (lMBookingClassKey);
01897     FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin1Family,
01898                                     lPartnerMktBKKHKGSegmentYCabin1FamilyMClass);
01899     FacBomManager::linkWithParent (lPartnerMktBKKHKGSegmentYCabin1Family,
01900                                    lPartnerMktBKKHKGSegmentYCabin1FamilyMClass);
01901 
01902     FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin,
01903                                     lPartnerMktBKKHKGSegmentYCabin1FamilyMClass);
01904     FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegment,
01905                                     lPartnerMktBKKHKGSegmentYCabin1FamilyMClass);
01906 
01907     // Step 9.0.9: link CX inventory objects to Partner SQ inventory objects
01908     FacBomManager::addToListAndMap (lBKKHKGSegment, lPartnerMktBKKHKGSegment);
01909     lMktSINBKKSegment.setIsOtherAirlineOperating(true);
01910     FacBomManager::addToListAndMap (lMktSINBKKSegment, lPartnerSINBKKSegment);
01911 
01912     /* =================================================================================== */
01913 
01914     // Step 1.0: O&D level
01915     // Create an O&D Date (CX1100/08-FEB-2010/SIN-BKK-CX12/08-FEB-2010/BKK-HKG) for CX's Inventory
01916     OnDString_T lMktCXSINBKKOnDStr = "CX;1100,2010-Feb-08;SIN,BKK";
01917     OnDString_T lCXBKKHKGOnDStr = "CX;12,2010-Feb-08;BKK,HKG";
01918     lOnDStringList.clear();
01919     lOnDStringList.push_back (lMktCXSINBKKOnDStr);
01920     lOnDStringList.push_back (lCXBKKHKGOnDStr);
01921 
01922     lOnDDateKey = OnDDateKey(lOnDStringList);
01923     OnDDate& lCX_SINHKG_OnDDate =
01924       FacBom<OnDDate>::instance().create (lOnDDateKey);
01925     // Link to the inventory
01926     FacBomManager::addToListAndMap (lCXInv, lCX_SINHKG_OnDDate);
01927     FacBomManager::linkWithParent (lCXInv, lCX_SINHKG_OnDDate);
01928 
01929     // Add the segments
01930     FacBomManager::addToListAndMap (lCX_SINHKG_OnDDate, lMktSINBKKSegment);
01931     FacBomManager::addToListAndMap (lCX_SINHKG_OnDDate, lBKKHKGSegment);
01932 
01933     // Add total forecast info for cabin Y.
01934     lCX_SINHKG_OnDDate.setTotalForecast (lY, lWTP750Mean60StdDev6);
01935     
01936     // Add demand info
01937     lCabinClassPairList.clear();
01938     lCabinClassPairList.push_back(lCC_YM1);
01939     lCabinClassPairList.push_back(lCC_YM2);
01940     lCX_SINHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield850Mean20StdDev2);
01941 
01942     lCabinClassPairList.clear();
01943     lCabinClassPairList.push_back(lCC_YY1);
01944     lCabinClassPairList.push_back(lCC_YY2);
01945     lCX_SINHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield1200Mean10StdDev1);
01946 
01947     /***********************************************************************************
01948     // Create an O&D Date (CX1100/08-FEB-2010/SIN-BKK) for CX's Inventory
01949     lFullKeyList.clear();
01950     lFullKeyList.push_back (lMktCXSINBKKFullKeyStr);
01951 
01952     lOnDDateKey = OnDDateKey(lFullKeyList);
01953     OnDDate& lMktCX_SINBKK_OnDDate =
01954       FacBom<OnDDate>::instance().create (lOnDDateKey);
01955     // Link to the inventory
01956     FacBomManager::addToListAndMap (lCXInv, lMktCX_SINBKK_OnDDate);
01957     FacBomManager::linkWithParent (lCXInv, lMktCX_SINBKK_OnDDate);
01958 
01959     // Add the segments
01960     FacBomManager::addToListAndMap (lMktCX_SINBKK_OnDDate, lMktSINBKKSegment);
01961 
01962     // Demand info is not added for purely marketed O&Ds
01963     // Add demand info
01964     // lCabinClassPairList.clear();
01965     // lCabinClassPairList.push_back(lCC_YM1);
01966     // lMktCX_SINBKK_OnDDate.setDemandInformation (lCabinClassPairList, 500.0, 20.0, 1.0);
01967     *************************************************************************************/
01968     
01969     // Create an O&D Date (CX12/08-FEB-2010/BKK-HKG) for CX's Inventory
01970     lOnDStringList.clear();
01971     lOnDStringList.push_back (lCXBKKHKGOnDStr);
01972 
01973     lOnDDateKey = OnDDateKey(lOnDStringList);
01974     OnDDate& lCX_BKKHKG_OnDDate =
01975       FacBom<OnDDate>::instance().create (lOnDDateKey);
01976     // Link to the inventory
01977     FacBomManager::addToListAndMap (lCXInv, lCX_BKKHKG_OnDDate);
01978     FacBomManager::linkWithParent (lCXInv, lCX_BKKHKG_OnDDate);
01979 
01980     // Add the segments
01981     FacBomManager::addToListAndMap (lCX_BKKHKG_OnDDate, lBKKHKGSegment);
01982 
01983     // Add total forecast info for cabin Y.
01984     lCX_BKKHKG_OnDDate.setTotalForecast (lY, lWTP400Mean60StdDev6);
01985 
01986     // Add demand info
01987     lCabinClassPairList.clear();
01988     lCabinClassPairList.push_back(lCC_YM2);
01989     lCX_BKKHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield500Mean20StdDev1);
01990 
01991     lCabinClassPairList.clear();
01992     lCabinClassPairList.push_back(lCC_YY2);
01993     const YieldDemandPair_T lYield700Mean10StdDev1 (lYield700, lMean10StdDev1 );
01994     lCX_BKKHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield700Mean10StdDev1);
01995 
01996     /*================================================================================
01997       ================================================================================
01998       ================================================================================*/
01999     // Schedule:
02000     // SQ:
02001     // Step 1: flight period level
02002     // Create a flight period for SQ11:
02003     const DoWStruct lDoWSrtuct ("1111111");
02004     const Date_T lDateRangeStart (2010, boost::gregorian::Feb, 8);
02005     const Date_T lDateRangeEnd (2010, boost::gregorian::Feb, 9);
02006     const DatePeriod_T lDatePeriod (lDateRangeStart, lDateRangeEnd);
02007     const PeriodStruct lPeriodStruct (lDatePeriod,lDoWSrtuct);
02008 
02009     lFlightNumber = FlightNumber_T (11);
02010 
02011     FlightPeriodKey lFlightPeriodKey (lFlightNumber, lPeriodStruct);
02012 
02013     FlightPeriod& lSQ11FlightPeriod =
02014       FacBom<FlightPeriod>::instance().create (lFlightPeriodKey);
02015     FacBomManager::addToListAndMap (lSQInv, lSQ11FlightPeriod);
02016     FacBomManager::linkWithParent (lSQInv, lSQ11FlightPeriod);
02017 
02018     // Step 2: segment period level
02019     // Create a segment period for SIN-BKK:
02020 
02021     SegmentPeriodKey lSegmentPeriodKey (lSIN, lBKK);
02022 
02023     SegmentPeriod& lSINBKKSegmentPeriod =
02024       FacBom<SegmentPeriod>::instance().create (lSegmentPeriodKey);
02025     FacBomManager::addToListAndMap (lSQ11FlightPeriod, lSINBKKSegmentPeriod);
02026     FacBomManager::linkWithParent (lSQ11FlightPeriod, lSINBKKSegmentPeriod);
02027 
02028     lSINBKKSegmentPeriod.setBoardingTime (l0820);
02029     lSINBKKSegmentPeriod.setOffTime (l1100);
02030     lSINBKKSegmentPeriod.setElapsedTime (l0340);
02031     ClassList_String_T lYM ("YM");
02032     lSINBKKSegmentPeriod.addCabinBookingClassList (lY,lYM);
02033 
02034     // CX:
02035     // Step 1: flight period level
02036     // Create a flight period for CX12:  
02037     lFlightNumber = FlightNumber_T (12);
02038 
02039     lFlightPeriodKey = FlightPeriodKey(lFlightNumber, lPeriodStruct);
02040 
02041     FlightPeriod& lCX12FlightPeriod =
02042       FacBom<FlightPeriod>::instance().create (lFlightPeriodKey);
02043     FacBomManager::addToListAndMap (lCXInv, lCX12FlightPeriod);
02044     FacBomManager::linkWithParent (lCXInv, lCX12FlightPeriod);
02045 
02046     // Step 2: segment period level
02047     // Create a segment period for BKK-HKG:
02048 
02049     lSegmentPeriodKey = SegmentPeriodKey (lBKK, lHKG);
02050 
02051     SegmentPeriod& lBKKHKGSegmentPeriod =
02052       FacBom<SegmentPeriod>::instance().create (lSegmentPeriodKey);
02053     FacBomManager::addToListAndMap (lCX12FlightPeriod, lBKKHKGSegmentPeriod);
02054     FacBomManager::linkWithParent (lCX12FlightPeriod, lBKKHKGSegmentPeriod);
02055 
02056     lBKKHKGSegmentPeriod.setBoardingTime (l1200);
02057     lBKKHKGSegmentPeriod.setOffTime (l1540);
02058     lBKKHKGSegmentPeriod.setElapsedTime (l0240);
02059     lBKKHKGSegmentPeriod.addCabinBookingClassList (lY,lYM);
02060     
02061   }
02062 
02063   // //////////////////////////////////////////////////////////////////////
02064   void CmdBomManager::buildPartnershipsSamplePricing (BomRoot& ioBomRoot) {
02065 
02067 
02068     /*===================================================================================*/
02069     // First airport pair SIN-BKK.
02070     // Set the airport-pair primary key.
02071     AirportPairKey lAirportPairKey ("SIN", "BKK");
02072     
02073     // Create the AirportPairKey object and link it to the ioBomRoot object.
02074     AirportPair& lSINBKKAirportPair =
02075       FacBom<AirportPair>::instance().create (lAirportPairKey);
02076     FacBomManager::addToListAndMap (ioBomRoot, lSINBKKAirportPair);
02077     FacBomManager::linkWithParent (ioBomRoot, lSINBKKAirportPair);
02078 
02079     // Set the fare date-period primary key.
02080     const Date_T lDateRangeStart (2010, boost::gregorian::Jan, 15);
02081     const Date_T lDateRangeEnd (2010, boost::gregorian::Dec, 31);
02082     const DatePeriod_T lDateRange (lDateRangeStart, lDateRangeEnd);
02083     const DatePeriodKey lDatePeriodKey (lDateRange);
02084 
02085     // Create the DatePeriodKey object and link it to the PosChannel object.
02086     DatePeriod& lSINBKKDatePeriod =
02087       FacBom<DatePeriod>::instance().create (lDatePeriodKey);
02088     FacBomManager::addToListAndMap (lSINBKKAirportPair, lSINBKKDatePeriod);
02089     FacBomManager::linkWithParent (lSINBKKAirportPair, lSINBKKDatePeriod);    
02090 
02091     // Set the point-of-sale-channel primary key.
02092     PosChannelKey lPosChannelKey ("SIN","IN");  
02093     
02094     // Create the PositionKey object and link it to the AirportPair object.
02095     PosChannel& lSINPosChannel =
02096       FacBom<PosChannel>::instance().create (lPosChannelKey);
02097     FacBomManager::addToListAndMap (lSINBKKDatePeriod, lSINPosChannel);
02098     FacBomManager::linkWithParent (lSINBKKDatePeriod, lSINPosChannel);
02099    
02100     // Set the fare time-period primary key.
02101     const Time_T lTimeRangeStart (0, 0, 0);
02102     const Time_T lTimeRangeEnd (23, 0, 0);
02103     const TimePeriodKey lFareTimePeriodKey (lTimeRangeStart,
02104                                             lTimeRangeEnd);
02105 
02106     // Create the TimePeriodKey and link it to the DatePeriod object.
02107     TimePeriod& lSINBKKFareTimePeriod =
02108       FacBom<TimePeriod>::instance().create (lFareTimePeriodKey);
02109     FacBomManager::addToListAndMap (lSINPosChannel, lSINBKKFareTimePeriod);
02110     FacBomManager::linkWithParent (lSINPosChannel, lSINBKKFareTimePeriod);        
02111 
02112     // Generate the FareRule
02113     const FareFeaturesKey lFareFeaturesKey (TRIP_TYPE_ONE_WAY,
02114                                             NO_ADVANCE_PURCHASE,
02115                                             SATURDAY_STAY,
02116                                             CHANGE_FEES,
02117                                             NON_REFUNDABLE,
02118                                             NO_STAY_DURATION);
02119 
02120     // Create the FareFeaturesKey and link it to the TimePeriod object.
02121     FareFeatures& lSINBKKFareFeatures =
02122       FacBom<FareFeatures>::instance().create (lFareFeaturesKey);
02123     FacBomManager::addToListAndMap (lSINBKKFareTimePeriod, lSINBKKFareFeatures);
02124     FacBomManager::linkWithParent (lSINBKKFareTimePeriod, lSINBKKFareFeatures);        
02125 
02126     // Generate Segment Features and link them to their FareRule.
02127     AirlineCodeList_T lSQAirlineCodeList;
02128     lSQAirlineCodeList.push_back ("SQ");
02129     
02130     ClassList_StringList_T lYClassCodeList;
02131     lYClassCodeList.push_back ("Y");    
02132     const AirlineClassListKey lSQAirlineYClassListKey (lSQAirlineCodeList,
02133                                                        lYClassCodeList);
02134 
02135     ClassList_StringList_T lMClassCodeList;
02136     lMClassCodeList.push_back ("M");
02137     const AirlineClassListKey lSQAirlineMClassListKey (lSQAirlineCodeList,
02138                                                        lMClassCodeList);
02139 
02140     // Create the AirlineClassListKey and link it to the FareFeatures object.
02141     AirlineClassList& lSQAirlineYClassList =
02142       stdair::FacBom<AirlineClassList>::instance().create (lSQAirlineYClassListKey);
02143     lSQAirlineYClassList.setFare(700);
02144     FacBomManager::addToListAndMap (lSINBKKFareFeatures, lSQAirlineYClassList);
02145     FacBomManager::linkWithParent (lSINBKKFareFeatures, lSQAirlineYClassList);
02146 
02147     AirlineClassList& lSQAirlineMClassList =
02148       stdair::FacBom<AirlineClassList>::instance().create (lSQAirlineMClassListKey);
02149     lSQAirlineMClassList.setFare(500);
02150     FacBomManager::addToListAndMap (lSINBKKFareFeatures, lSQAirlineMClassList);
02151     FacBomManager::linkWithParent (lSINBKKFareFeatures, lSQAirlineMClassList);
02152 
02153     /*===================================================================================*/
02154     // Second airport pair BKK-HKG.
02155     // Set the airport-pair primary key.
02156     lAirportPairKey = AirportPairKey ("BKK", "HKG");
02157     
02158     // Create the AirportPairKey object and link it to the ioBomRoot object.
02159     AirportPair& lBKKHKGAirportPair =
02160       FacBom<AirportPair>::instance().create (lAirportPairKey);
02161     FacBomManager::addToListAndMap (ioBomRoot, lBKKHKGAirportPair);
02162     FacBomManager::linkWithParent (ioBomRoot, lBKKHKGAirportPair);
02163 
02164     // Set the fare date-period primary key.
02165     // Use the same as previously.
02166 
02167     // Create the DatePeriodKey object and link it to the PosChannel object.
02168     DatePeriod& lBKKHKGDatePeriod =
02169       FacBom<DatePeriod>::instance().create (lDatePeriodKey);
02170     FacBomManager::addToListAndMap (lBKKHKGAirportPair, lBKKHKGDatePeriod);
02171     FacBomManager::linkWithParent (lBKKHKGAirportPair, lBKKHKGDatePeriod);    
02172 
02173     // Set the point-of-sale-channel primary key.
02174     lPosChannelKey  = PosChannelKey("BKK","IN");  
02175     
02176     // Create the PositionKey object and link it to the AirportPair object.
02177     PosChannel& lBKKPosChannel =
02178       FacBom<PosChannel>::instance().create (lPosChannelKey);
02179     FacBomManager::addToListAndMap (lBKKHKGDatePeriod, lBKKPosChannel);
02180     FacBomManager::linkWithParent (lBKKHKGDatePeriod, lBKKPosChannel);
02181    
02182     // Set the fare time-period primary key.
02183     // Use the same as previously.
02184 
02185     // Create the TimePeriodKey and link it to the DatePeriod object.
02186     TimePeriod& lBKKHKGFareTimePeriod =
02187       FacBom<TimePeriod>::instance().create (lFareTimePeriodKey);
02188     FacBomManager::addToListAndMap (lBKKPosChannel, lBKKHKGFareTimePeriod);
02189     FacBomManager::linkWithParent (lBKKPosChannel, lBKKHKGFareTimePeriod);        
02190 
02191     // Generate the FareRule
02192     // Use the same key as previously.
02193 
02194     // Create the FareFeaturesKey and link it to the TimePeriod object.
02195     FareFeatures& lBKKHKGFareFeatures =
02196       FacBom<FareFeatures>::instance().create (lFareFeaturesKey);
02197     FacBomManager::addToListAndMap (lBKKHKGFareTimePeriod, lBKKHKGFareFeatures);
02198     FacBomManager::linkWithParent (lBKKHKGFareTimePeriod, lBKKHKGFareFeatures);        
02199 
02200     // Generate Segment Features and link them to their FareRule.
02201     AirlineCodeList_T lCXAirlineCodeList;
02202     lCXAirlineCodeList.push_back ("CX");
02203     
02204     const AirlineClassListKey lCXAirlineYClassListKey (lCXAirlineCodeList,
02205                                                        lYClassCodeList);
02206 
02207     const AirlineClassListKey lCXAirlineMClassListKey (lCXAirlineCodeList,
02208                                                        lMClassCodeList);
02209 
02210     // Create the AirlineClassListKey and link it to the FareFeatures object.
02211     AirlineClassList& lCXAirlineYClassList =
02212       stdair::FacBom<AirlineClassList>::instance().create (lCXAirlineYClassListKey);
02213     lCXAirlineYClassList.setFare(700);
02214     FacBomManager::addToListAndMap (lBKKHKGFareFeatures, lCXAirlineYClassList);
02215     FacBomManager::linkWithParent (lBKKHKGFareFeatures, lCXAirlineYClassList);
02216     
02217     AirlineClassList& lCXAirlineMClassList =
02218       stdair::FacBom<AirlineClassList>::instance().create (lCXAirlineMClassListKey);
02219     lCXAirlineMClassList.setFare(500);
02220     FacBomManager::addToListAndMap (lBKKHKGFareFeatures, lCXAirlineMClassList);
02221     FacBomManager::linkWithParent (lBKKHKGFareFeatures, lCXAirlineMClassList);
02222 
02223     /*===================================================================================*/
02224     // Third airport pair SIN-HKG.
02225     // Set the airport-pair primary key.
02226     lAirportPairKey = AirportPairKey ("SIN", "HKG");
02227     
02228     // Create the AirportPairKey object and link it to the ioBomRoot object.
02229     AirportPair& lSINHKGAirportPair =
02230       FacBom<AirportPair>::instance().create (lAirportPairKey);
02231     FacBomManager::addToListAndMap (ioBomRoot, lSINHKGAirportPair);
02232     FacBomManager::linkWithParent (ioBomRoot, lSINHKGAirportPair);
02233 
02234     // Set the fare date-period primary key.
02235     // Use the same as previously.
02236 
02237     // Create the DatePeriodKey object and link it to the PosChannel object.
02238     DatePeriod& lSINHKGDatePeriod =
02239       FacBom<DatePeriod>::instance().create (lDatePeriodKey);
02240     FacBomManager::addToListAndMap (lSINHKGAirportPair, lSINHKGDatePeriod);
02241     FacBomManager::linkWithParent (lSINHKGAirportPair, lSINHKGDatePeriod);    
02242 
02243     // Set the point-of-sale-channel primary key.
02244     lPosChannelKey = PosChannelKey("SIN","IN");  
02245     
02246     // Create the PositionKey object and link it to the AirportPair object.
02247     PosChannel& lOnDSINPosChannel =
02248       FacBom<PosChannel>::instance().create (lPosChannelKey);
02249     FacBomManager::addToListAndMap (lSINHKGDatePeriod, lOnDSINPosChannel);
02250     FacBomManager::linkWithParent (lSINHKGDatePeriod, lOnDSINPosChannel);
02251    
02252     // Set the fare time-period primary key.
02253     // Use the same as previously.
02254 
02255     // Create the TimePeriodKey and link it to the DatePeriod object.
02256     TimePeriod& lSINHKGFareTimePeriod =
02257       FacBom<TimePeriod>::instance().create (lFareTimePeriodKey);
02258     FacBomManager::addToListAndMap (lOnDSINPosChannel, lSINHKGFareTimePeriod);
02259     FacBomManager::linkWithParent (lOnDSINPosChannel, lSINHKGFareTimePeriod);        
02260 
02261     // Generate the FareRule
02262     // Use the same key as previously.
02263 
02264     // Create the FareFeaturesKey and link it to the TimePeriod object.
02265     FareFeatures& lSINHKGFareFeatures =
02266       FacBom<FareFeatures>::instance().create (lFareFeaturesKey);
02267     FacBomManager::addToListAndMap (lSINHKGFareTimePeriod, lSINHKGFareFeatures);
02268     FacBomManager::linkWithParent (lSINHKGFareTimePeriod, lSINHKGFareFeatures);        
02269 
02270     // Generate Segment Features and link them to their FareRule.
02271     AirlineCodeList_T lSQ_CXAirlineCodeList;
02272     lSQ_CXAirlineCodeList.push_back ("SQ");
02273     lSQ_CXAirlineCodeList.push_back ("CX");
02274 
02275     ClassList_StringList_T lY_YClassCodeList;
02276     lY_YClassCodeList.push_back ("Y");
02277     lY_YClassCodeList.push_back ("Y");
02278     const AirlineClassListKey lSQ_CXAirlineYClassListKey (lSQ_CXAirlineCodeList,
02279                                                           lY_YClassCodeList);
02280 
02281     ClassList_StringList_T lM_MClassCodeList;
02282     lM_MClassCodeList.push_back ("M");
02283     lM_MClassCodeList.push_back ("M");
02284     const AirlineClassListKey lSQ_CXAirlineMClassListKey (lSQ_CXAirlineCodeList,
02285                                                           lM_MClassCodeList);
02286 
02287     // Create the AirlineClassListKey and link it to the FareFeatures object.
02288     AirlineClassList& lSQ_CXAirlineYClassList =
02289       stdair::FacBom<AirlineClassList>::instance().create (lSQ_CXAirlineYClassListKey);
02290     lSQ_CXAirlineYClassList.setFare(1200);
02291     FacBomManager::addToListAndMap (lSINHKGFareFeatures, lSQ_CXAirlineYClassList);
02292     FacBomManager::linkWithParent (lSINHKGFareFeatures, lSQ_CXAirlineYClassList);
02293     
02294     AirlineClassList& lSQ_CXAirlineMClassList =
02295       stdair::FacBom<AirlineClassList>::instance().create (lSQ_CXAirlineMClassListKey);
02296     lSQ_CXAirlineMClassList.setFare(850);
02297     FacBomManager::addToListAndMap (lSINHKGFareFeatures, lSQ_CXAirlineMClassList);
02298     FacBomManager::linkWithParent (lSINHKGFareFeatures, lSQ_CXAirlineMClassList);
02299 
02300 
02302 
02303     /*===================================================================================*/
02304 
02305     // Use the same airport pair, and date period for adding SQ SIN-BKK yields.
02306     
02307     // Set the point-of-sale-channel primary key.
02308     lPosChannelKey = PosChannelKey(DEFAULT_POS, DEFAULT_CHANNEL);  
02309     
02310     // Create the PositionKey object and link it to the AirportPair object.
02311     PosChannel& lRAC_SINBKKPosChannel =
02312       FacBom<PosChannel>::instance().create (lPosChannelKey);
02313     FacBomManager::addToListAndMap (lSINBKKDatePeriod, lRAC_SINBKKPosChannel);
02314     FacBomManager::linkWithParent (lSINBKKDatePeriod, lRAC_SINBKKPosChannel);
02315    
02316     // Set the yield time-period primary key.
02317     const TimePeriodKey lYieldTimePeriodKey (lTimeRangeStart,
02318                                             lTimeRangeEnd);
02319 
02320     // Create the TimePeriodKey and link it to the DatePeriod object.
02321     TimePeriod& lSINBKKYieldTimePeriod =
02322       FacBom<TimePeriod>::instance().create (lYieldTimePeriodKey);
02323     FacBomManager::addToListAndMap (lRAC_SINBKKPosChannel, lSINBKKYieldTimePeriod);
02324     FacBomManager::linkWithParent (lRAC_SINBKKPosChannel, lSINBKKYieldTimePeriod);        
02325 
02326     // Generate the YieldRule
02327     const YieldFeaturesKey lYieldFeaturesKey (TRIP_TYPE_ONE_WAY,
02328                                               CABIN_Y);
02329 
02330     // Create the YieldFeaturesKey and link it to the TimePeriod object.
02331     YieldFeatures& lSINBKKYieldFeatures =
02332       FacBom<YieldFeatures>::instance().create (lYieldFeaturesKey);
02333     FacBomManager::addToListAndMap (lSINBKKYieldTimePeriod, lSINBKKYieldFeatures);
02334     FacBomManager::linkWithParent (lSINBKKYieldTimePeriod, lSINBKKYieldFeatures);        
02335 
02336     // Generate Segment Features and link them to their YieldRule.
02337     // Use the same key as previously.
02338 
02339     // Create the AirlineClassListKey and link it to the YieldFeatures object.
02340     AirlineClassList& lRAC_SQAirlineYClassList =
02341       stdair::FacBom<AirlineClassList>::instance().create (lSQAirlineYClassListKey);
02342     lRAC_SQAirlineYClassList.setYield(700);
02343     FacBomManager::addToListAndMap (lSINBKKYieldFeatures, lRAC_SQAirlineYClassList);
02344     FacBomManager::linkWithParent (lSINBKKYieldFeatures, lRAC_SQAirlineYClassList);
02345 
02346     AirlineClassList& lRAC_SQAirlineMClassList =
02347       stdair::FacBom<AirlineClassList>::instance().create (lSQAirlineMClassListKey);
02348     lRAC_SQAirlineMClassList.setYield(500);
02349     FacBomManager::addToListAndMap (lSINBKKYieldFeatures, lRAC_SQAirlineMClassList);
02350     FacBomManager::linkWithParent (lSINBKKYieldFeatures, lRAC_SQAirlineMClassList);
02351 
02352     /*===================================================================================*/
02353 
02354     // Use the same airport pair, and date period for adding CX BKK-HKG yields. 
02355     
02356     // Set the point-of-sale-channel primary key.
02357     // Use the same as previously.
02358     
02359     // Create the PositionKey object and link it to the AirportPair object.
02360     PosChannel& lRAC_BKKHKGPosChannel =
02361       FacBom<PosChannel>::instance().create (lPosChannelKey);
02362     FacBomManager::addToListAndMap (lBKKHKGDatePeriod, lRAC_BKKHKGPosChannel);
02363     FacBomManager::linkWithParent (lBKKHKGDatePeriod, lRAC_BKKHKGPosChannel);
02364    
02365     // Set the yield time-period primary key.
02366     // Use the same as previously.
02367 
02368     // Create the TimePeriodKey and link it to the DatePeriod object.
02369     TimePeriod& lBKKHKGYieldTimePeriod =
02370       FacBom<TimePeriod>::instance().create (lYieldTimePeriodKey);
02371     FacBomManager::addToListAndMap (lRAC_BKKHKGPosChannel, lBKKHKGYieldTimePeriod);
02372     FacBomManager::linkWithParent (lRAC_BKKHKGPosChannel, lBKKHKGYieldTimePeriod);        
02373 
02374     // Generate the YieldRule
02375     // Use the same key as previously.
02376 
02377     // Create the YieldFeaturesKey and link it to the TimePeriod object.
02378     YieldFeatures& lBKKHKGYieldFeatures =
02379       FacBom<YieldFeatures>::instance().create (lYieldFeaturesKey);
02380     FacBomManager::addToListAndMap (lBKKHKGYieldTimePeriod, lBKKHKGYieldFeatures);
02381     FacBomManager::linkWithParent (lBKKHKGYieldTimePeriod, lBKKHKGYieldFeatures);        
02382 
02383     // Generate Segment Features and link them to their YieldRule.
02384     // Use the same key as previously.
02385 
02386     // Create the AirlineClassListKey and link it to the YieldFeatures object.
02387     AirlineClassList& lRAC_CXAirlineYClassList =
02388       stdair::FacBom<AirlineClassList>::instance().create (lCXAirlineYClassListKey);
02389     lRAC_CXAirlineYClassList.setYield(700);
02390     FacBomManager::addToListAndMap (lBKKHKGYieldFeatures, lRAC_CXAirlineYClassList);
02391     FacBomManager::linkWithParent (lBKKHKGYieldFeatures, lRAC_CXAirlineYClassList);
02392     
02393     AirlineClassList& lRAC_CXAirlineMClassList =
02394       stdair::FacBom<AirlineClassList>::instance().create (lCXAirlineMClassListKey);
02395     lRAC_CXAirlineMClassList.setYield(500);
02396     FacBomManager::addToListAndMap (lBKKHKGYieldFeatures, lRAC_CXAirlineMClassList);
02397     FacBomManager::linkWithParent (lBKKHKGYieldFeatures, lRAC_CXAirlineMClassList);
02398 
02399     /*===================================================================================*/
02400 
02401     // Use the same airport pair, and date period for SQ-CX SIN-HKG
02402 
02403     // Set the point-of-sale-channel primary key.
02404     // Use the same as previously.
02405     
02406     // Create the PositionKey object and link it to the AirportPair object.
02407     PosChannel& lRAC_SINHKGChannel =
02408       FacBom<PosChannel>::instance().create (lPosChannelKey);
02409     FacBomManager::addToListAndMap (lSINHKGDatePeriod, lRAC_SINHKGChannel);
02410     FacBomManager::linkWithParent (lSINHKGDatePeriod, lRAC_SINHKGChannel);
02411    
02412     // Set the yield time-period primary key.
02413     // Use the same as previously.
02414 
02415     // Create the TimePeriodKey and link it to the DatePeriod object.
02416     TimePeriod& lSINHKGYieldTimePeriod =
02417       FacBom<TimePeriod>::instance().create (lYieldTimePeriodKey);
02418     FacBomManager::addToListAndMap (lRAC_SINHKGChannel, lSINHKGYieldTimePeriod);
02419     FacBomManager::linkWithParent (lRAC_SINHKGChannel, lSINHKGYieldTimePeriod);        
02420 
02421     // Generate the YieldRule
02422     // Use the same key as previously.
02423 
02424     // Create the YieldFeaturesKey and link it to the TimePeriod object.
02425     YieldFeatures& lSINHKGYieldFeatures =
02426       FacBom<YieldFeatures>::instance().create (lYieldFeaturesKey);
02427     FacBomManager::addToListAndMap (lSINHKGYieldTimePeriod, lSINHKGYieldFeatures);
02428     FacBomManager::linkWithParent (lSINHKGYieldTimePeriod, lSINHKGYieldFeatures);        
02429 
02430     // Generate Segment Features and link them to their YieldRule.
02431     // Use the same key as previously
02432     
02433     // Create the AirlineClassListKey and link it to the YieldFeatures object.
02434     AirlineClassList& lRAC_SQ_CXAirlineYClassList =
02435       stdair::FacBom<AirlineClassList>::instance().create (lSQ_CXAirlineYClassListKey);
02436     lRAC_SQ_CXAirlineYClassList.setYield(1200);
02437     FacBomManager::addToListAndMap (lSINHKGYieldFeatures, lRAC_SQ_CXAirlineYClassList);
02438     FacBomManager::linkWithParent (lSINHKGYieldFeatures, lRAC_SQ_CXAirlineYClassList);
02439     
02440     AirlineClassList& lRAC_SQ_CXAirlineMClassList =
02441       stdair::FacBom<AirlineClassList>::instance().create (lSQ_CXAirlineMClassListKey);
02442     lRAC_SQ_CXAirlineMClassList.setYield(850);
02443     FacBomManager::addToListAndMap (lSINHKGYieldFeatures, lRAC_SQ_CXAirlineMClassList);
02444     FacBomManager::linkWithParent (lSINHKGYieldFeatures, lRAC_SQ_CXAirlineMClassList);
02445     
02446   }
02447 
02448 }
02449