7 #include <boost/date_time/date_iterator.hpp>
9 #include <stdair/basic/BasConst_BookingClass.hpp>
10 #include <stdair/basic/BasConst_Yield.hpp>
11 #include <stdair/basic/BasConst_Inventory.hpp>
12 #include <stdair/bom/BomManager.hpp>
13 #include <stdair/bom/BomRoot.hpp>
14 #include <stdair/bom/Inventory.hpp>
15 #include <stdair/bom/FlightDate.hpp>
16 #include <stdair/bom/SegmentDate.hpp>
17 #include <stdair/bom/SegmentCabin.hpp>
18 #include <stdair/bom/FareFamily.hpp>
19 #include <stdair/bom/BookingClass.hpp>
20 #include <stdair/bom/LegDate.hpp>
21 #include <stdair/bom/LegCabin.hpp>
22 #include <stdair/bom/Bucket.hpp>
23 #include <stdair/factory/FacBom.hpp>
24 #include <stdair/factory/FacBomManager.hpp>
25 #include <stdair/service/Logger.hpp>
33 void InventoryBuilder::
34 buildInventory (stdair::BomRoot& ioBomRoot,
35 const FlightDateStruct& iFlightDateStruct) {
36 const stdair::AirlineCode_T& lAirlineCode = iFlightDateStruct._airlineCode;
40 stdair::Inventory* lInventory_ptr = stdair::BomManager::
41 getObjectPtr<stdair::Inventory> (ioBomRoot, lAirlineCode);
42 if (lInventory_ptr == NULL) {
43 stdair::InventoryKey lKey (lAirlineCode);
45 &stdair::FacBom<stdair::Inventory>::instance().create (lKey);
46 stdair::FacBomManager::addToListAndMap (ioBomRoot, *lInventory_ptr);
47 stdair::FacBomManager::linkWithParent (ioBomRoot, *lInventory_ptr);
49 assert (lInventory_ptr != NULL);
52 buildFlightDate (*lInventory_ptr, iFlightDateStruct);
56 void InventoryBuilder::
57 buildFlightDate (stdair::Inventory& ioInventory,
58 const FlightDateStruct& iFlightDateStruct) {
60 const stdair::FlightDateKey lFlightDateKey (iFlightDateStruct._flightNumber,
61 iFlightDateStruct._flightDate);
66 stdair::FlightDate* lFlightDate_ptr = stdair::BomManager::
67 getObjectPtr<stdair::FlightDate> (ioInventory, lFlightDateKey.toString());
68 if (lFlightDate_ptr == NULL) {
72 &stdair::FacBom<stdair::FlightDate>::instance().create (lFlightDateKey);
73 stdair::FacBomManager::addToListAndMap (ioInventory, *lFlightDate_ptr);
74 stdair::FacBomManager::linkWithParent (ioInventory, *lFlightDate_ptr);
76 assert (lFlightDate_ptr != NULL);
82 for (LegStructList_T::const_iterator itLegDate =
83 iFlightDateStruct._legList.begin();
84 itLegDate != iFlightDateStruct._legList.end(); ++itLegDate) {
85 const LegStruct& lCurrentLegDateStruct = *itLegDate;
86 buildLegDate (*lFlightDate_ptr, lCurrentLegDateStruct);
89 for (SegmentStructList_T::const_iterator itSegmentDate =
90 iFlightDateStruct._segmentList.begin();
91 itSegmentDate != iFlightDateStruct._segmentList.end();
93 const SegmentStruct& lCurrentSegmentDateStruct = *itSegmentDate;
94 buildSegmentDate (*lFlightDate_ptr, lCurrentSegmentDateStruct);
99 void InventoryBuilder::
100 buildLegDate (stdair::FlightDate& ioFlightDate,
101 const LegStruct& iLegDateStruct) {
105 stdair::LegDate* lLegDate_ptr = stdair::BomManager::
106 getObjectPtr<stdair::LegDate>(ioFlightDate, iLegDateStruct._boardingPoint);
108 if (lLegDate_ptr == NULL) {
110 stdair::LegDateKey lKey (iLegDateStruct._boardingPoint);
111 lLegDate_ptr = &stdair::FacBom<stdair::LegDate>::instance().create (lKey);
112 stdair::FacBomManager::addToListAndMap (ioFlightDate, *lLegDate_ptr);
113 stdair::FacBomManager::linkWithParent (ioFlightDate, *lLegDate_ptr);
115 assert (lLegDate_ptr != NULL);
118 iLegDateStruct.fill (*lLegDate_ptr);
121 for (LegCabinStructList_T::const_iterator itLegCabin =
122 iLegDateStruct._cabinList.begin();
123 itLegCabin != iLegDateStruct._cabinList.end(); ++itLegCabin) {
124 const LegCabinStruct& lCurrentLegCabinStruct = *itLegCabin;
125 buildLegCabin (*lLegDate_ptr, lCurrentLegCabinStruct);
130 void InventoryBuilder::
131 buildLegCabin (stdair::LegDate& ioLegDate,
132 const LegCabinStruct& iLegCabinStruct) {
136 stdair::LegCabin* lLegCabin_ptr = stdair::BomManager::
137 getObjectPtr<stdair::LegCabin> (ioLegDate, iLegCabinStruct._cabinCode);
138 if (lLegCabin_ptr == NULL) {
140 stdair::LegCabinKey lKey (iLegCabinStruct._cabinCode);
141 lLegCabin_ptr = &stdair::FacBom<stdair::LegCabin>::instance().create(lKey);
142 stdair::FacBomManager::addToListAndMap (ioLegDate, *lLegCabin_ptr);
143 stdair::FacBomManager::linkWithParent (ioLegDate, *lLegCabin_ptr);
145 assert (lLegCabin_ptr != NULL);
149 iLegCabinStruct.fill (*lLegCabin_ptr);
152 for (BucketStructList_T::const_iterator itBucket =
153 iLegCabinStruct._bucketList.begin();
154 itBucket != iLegCabinStruct._bucketList.end(); ++itBucket) {
155 const BucketStruct& lCurrentBucketStruct = *itBucket;
156 buildBucket (*lLegCabin_ptr, lCurrentBucketStruct);
161 void InventoryBuilder::buildBucket (stdair::LegCabin& ioLegCabin,
162 const BucketStruct& iBucketStruct) {
164 const stdair::BucketKey lBucketKey (iBucketStruct._seatIndex);
169 stdair::Bucket* lBucket_ptr = stdair::BomManager::
170 getObjectPtr<stdair::Bucket> (ioLegCabin, lBucketKey.toString());
171 if (lBucket_ptr == NULL) {
173 stdair::BucketKey lKey (iBucketStruct._seatIndex);
174 lBucket_ptr = &stdair::FacBom<stdair::Bucket>::instance().create (lKey);
175 stdair::FacBomManager::addToListAndMap (ioLegCabin, *lBucket_ptr);
176 stdair::FacBomManager::linkWithParent (ioLegCabin, *lBucket_ptr);
178 assert (lBucket_ptr != NULL);
181 iBucketStruct.fill (*lBucket_ptr);
185 void InventoryBuilder::
186 buildSegmentDate (stdair::FlightDate& ioFlightDate,
187 const SegmentStruct& iSegmentDateStruct) {
191 const stdair::SegmentDateKey
192 lSegmentDateKey (iSegmentDateStruct._boardingPoint,
193 iSegmentDateStruct._offPoint);
194 stdair::SegmentDate* lSegmentDate_ptr = stdair::BomManager::
195 getObjectPtr<stdair::SegmentDate>(ioFlightDate,lSegmentDateKey.toString());
196 if (lSegmentDate_ptr == NULL) {
199 lSegmentDate_ptr = &stdair::FacBom<stdair::SegmentDate>::
200 instance().create (lSegmentDateKey);
201 stdair::FacBomManager::addToListAndMap (ioFlightDate, *lSegmentDate_ptr);
202 stdair::FacBomManager::linkWithParent (ioFlightDate, *lSegmentDate_ptr);
204 assert (lSegmentDate_ptr != NULL);
208 iSegmentDateStruct.fill (*lSegmentDate_ptr);
211 for (SegmentCabinStructList_T::const_iterator itSegmentCabin =
212 iSegmentDateStruct._cabinList.begin();
213 itSegmentCabin != iSegmentDateStruct._cabinList.end();
215 const SegmentCabinStruct& lCurrentSegmentCabinStruct = *itSegmentCabin;
216 buildSegmentCabin (*lSegmentDate_ptr, lCurrentSegmentCabinStruct);
221 void InventoryBuilder::
222 buildSegmentCabin (stdair::SegmentDate& ioSegmentDate,
223 const SegmentCabinStruct& iSegmentCabinStruct) {
227 stdair::SegmentCabin* lSegmentCabin_ptr = stdair::BomManager::
228 getObjectPtr<stdair::SegmentCabin> (ioSegmentDate,
229 iSegmentCabinStruct._cabinCode);
230 if (lSegmentCabin_ptr == NULL) {
232 stdair::SegmentCabinKey lKey (iSegmentCabinStruct._cabinCode);
234 &stdair::FacBom<stdair::SegmentCabin>::instance().create (lKey);
237 stdair::FacBomManager::addToListAndMap (ioSegmentDate, *lSegmentCabin_ptr);
238 stdair::FacBomManager::linkWithParent (ioSegmentDate, *lSegmentCabin_ptr);
240 assert (lSegmentCabin_ptr != NULL);
244 iSegmentCabinStruct.fill (*lSegmentCabin_ptr);
247 for (FareFamilyStructList_T::const_iterator itFareFamily =
248 iSegmentCabinStruct._fareFamilies.begin();
249 itFareFamily != iSegmentCabinStruct._fareFamilies.end();
251 const FareFamilyStruct& lCurrentFareFamilyStruct = *itFareFamily;
252 buildFareFamily (*lSegmentCabin_ptr, lCurrentFareFamilyStruct);
257 void InventoryBuilder::
258 buildFareFamily (stdair::SegmentCabin& ioSegmentCabin,
259 const FareFamilyStruct& iFareFamilyStruct) {
264 stdair::FareFamily* lFareFamily_ptr = stdair::BomManager::
265 getObjectPtr<stdair::FareFamily> (ioSegmentCabin,
266 iFareFamilyStruct._familyCode);
267 if (lFareFamily_ptr == NULL) {
269 const stdair::FareFamilyKey lFFKey (iFareFamilyStruct._familyCode);
271 &stdair::FacBom<stdair::FareFamily>::instance().create (lFFKey);
274 stdair::FacBomManager::addToListAndMap (ioSegmentCabin, *lFareFamily_ptr);
275 stdair::FacBomManager::linkWithParent (ioSegmentCabin, *lFareFamily_ptr);
277 assert (lFareFamily_ptr != NULL);
281 iFareFamilyStruct.fill (*lFareFamily_ptr);
284 for (BookingClassStructList_T::const_iterator itBookingClass =
285 iFareFamilyStruct._classList.begin();
286 itBookingClass != iFareFamilyStruct._classList.end();
288 const BookingClassStruct& lCurrentBookingClassStruct = *itBookingClass;
289 buildBookingClass (*lFareFamily_ptr, lCurrentBookingClassStruct);
294 void InventoryBuilder::
295 buildBookingClass (stdair::FareFamily& ioFareFamily,
296 const BookingClassStruct& iBookingClassStruct) {
301 stdair::BookingClass* lBookingClass_ptr = stdair::BomManager::
302 getObjectPtr<stdair::BookingClass> (ioFareFamily,
303 iBookingClassStruct._classCode);
304 if (lBookingClass_ptr == NULL) {
306 const stdair::BookingClassKey lClassKey (iBookingClassStruct._classCode);
308 &stdair::FacBom<stdair::BookingClass>::instance().create (lClassKey);
311 stdair::FacBomManager::addToListAndMap (ioFareFamily, *lBookingClass_ptr);
312 stdair::FacBomManager::linkWithParent (ioFareFamily, *lBookingClass_ptr);
315 stdair::SegmentCabin& lSegmentCabin =
316 stdair::BomManager::getParent<stdair::SegmentCabin> (ioFareFamily);
317 stdair::FacBomManager::addToListAndMap (lSegmentCabin, *lBookingClass_ptr);
320 stdair::SegmentDate& lSegmentDate =
321 stdair::BomManager::getParent<stdair::SegmentDate> (lSegmentCabin);
322 stdair::FacBomManager::addToListAndMap (lSegmentDate, *lBookingClass_ptr);
324 assert (lBookingClass_ptr != NULL);
328 iBookingClassStruct.fill (*lBookingClass_ptr);