Go to the documentation of this file.00001
00002
00003
00004
00005 #include <cassert>
00006
00007 #include <stdair/bom/BomManager.hpp>
00008 #include <stdair/bom/BomRoot.hpp>
00009 #include <stdair/factory/FacBomManager.hpp>
00010 #include <stdair/service/Logger.hpp>
00011 #include <stdair/bom/AirportPair.hpp>
00012 #include <stdair/bom/PosChannel.hpp>
00013 #include <stdair/bom/DatePeriod.hpp>
00014 #include <stdair/bom/TimePeriod.hpp>
00015 #include <stdair/bom/FareFeatures.hpp>
00016 #include <stdair/bom/AirlineClassList.hpp>
00017
00018 #include <simfqt/bom/FareRuleStruct.hpp>
00019 #include <simfqt/command/FareRuleGenerator.hpp>
00020
00021 namespace SIMFQT {
00022
00023
00024 void FareRuleGenerator::
00025 createAirportPair (stdair::BomRoot& ioBomRoot,
00026 const FareRuleStruct& iFareRuleStruct) {
00027
00028
00029 const stdair::AirportCode_T& lBoardPoint = iFareRuleStruct.getOrigin ();
00030 const stdair::AirportCode_T& lOffPoint =
00031 iFareRuleStruct.getDestination ();
00032 const stdair::AirportPairKey lAirportPairKey (lBoardPoint, lOffPoint);
00033
00034
00035
00036
00037 stdair::AirportPair* lAirportPair_ptr = stdair::BomManager::
00038 getObjectPtr<stdair::AirportPair> (ioBomRoot, lAirportPairKey.toString());
00039 if (lAirportPair_ptr == NULL) {
00040 lAirportPair_ptr =
00041 &stdair::FacBom<stdair::AirportPair>::instance().
00042 create (lAirportPairKey);
00043 stdair::FacBomManager::addToListAndMap (ioBomRoot, *lAirportPair_ptr);
00044 stdair::FacBomManager::linkWithParent (ioBomRoot, *lAirportPair_ptr);
00045 }
00046
00047 assert (lAirportPair_ptr != NULL);
00048
00049 stdair::AirportPair& lAirportPair = *lAirportPair_ptr;
00050
00051
00052 createDateRange (lAirportPair, iFareRuleStruct);
00053
00054 }
00055
00056
00057 void FareRuleGenerator::
00058 createDateRange (stdair::AirportPair& iAirportPair,
00059 const FareRuleStruct& iFareRuleStruct) {
00060
00061
00062 const stdair::Date_T& lDateRangeStart =
00063 iFareRuleStruct.getDateRangeStart ();
00064 const stdair::Date_T& lDateRangeEnd =
00065 iFareRuleStruct.getDateRangeEnd ();
00066 const stdair::DatePeriod_T lDatePeriod (lDateRangeStart, lDateRangeEnd);
00067 const stdair::DatePeriodKey lFareDatePeriodKey (lDatePeriod);
00068
00069
00070
00071
00072 stdair::DatePeriod* lFareDatePeriod_ptr = stdair::BomManager::
00073 getObjectPtr<stdair::DatePeriod> (iAirportPair,
00074 lFareDatePeriodKey.toString());
00075 if (lFareDatePeriod_ptr == NULL) {
00076 lFareDatePeriod_ptr = &stdair::FacBom<stdair::DatePeriod>::instance().
00077 create (lFareDatePeriodKey);
00078 stdair::FacBomManager::addToListAndMap (iAirportPair,
00079 *lFareDatePeriod_ptr);
00080 stdair::FacBomManager::linkWithParent (iAirportPair,
00081 *lFareDatePeriod_ptr);
00082 }
00083
00084 assert (lFareDatePeriod_ptr != NULL);
00085
00086 stdair::DatePeriod& lDateRange = *lFareDatePeriod_ptr;
00087
00088
00089 createPOSChannel (lDateRange, iFareRuleStruct);
00090
00091 }
00092
00093
00094 void FareRuleGenerator::
00095 createPOSChannel (stdair::DatePeriod& iDatePeriod,
00096 const FareRuleStruct& iFareRuleStruct) {
00097
00098
00099 const stdair::CityCode_T& lPosition = iFareRuleStruct.getPOS ();
00100 const stdair::ChannelLabel_T& lChannel =
00101 iFareRuleStruct.getChannel ();
00102 const stdair::PosChannelKey lFarePosChannelKey (lPosition, lChannel);
00103
00104
00105
00106
00107 stdair::PosChannel* lFarePosChannel_ptr = stdair::BomManager::
00108 getObjectPtr<stdair::PosChannel> (iDatePeriod,
00109 lFarePosChannelKey.toString());
00110 if (lFarePosChannel_ptr == NULL) {
00111 lFarePosChannel_ptr = &stdair::FacBom<stdair::PosChannel>::instance().
00112 create (lFarePosChannelKey);
00113 stdair::FacBomManager::addToListAndMap (iDatePeriod,
00114 *lFarePosChannel_ptr);
00115 stdair::FacBomManager::linkWithParent (iDatePeriod,
00116 *lFarePosChannel_ptr);
00117 }
00118
00119 assert (lFarePosChannel_ptr != NULL);
00120
00121 stdair::PosChannel& lPosChannel = *lFarePosChannel_ptr;
00122
00123
00124 createTimeRange (lPosChannel, iFareRuleStruct);
00125
00126 }
00127
00128
00129
00130 void FareRuleGenerator::
00131 createTimeRange (stdair::PosChannel& iPosChannel,
00132 const FareRuleStruct& iFareRuleStruct) {
00133
00134
00135 const stdair::Time_T& lTimeRangeStart =
00136 iFareRuleStruct.getTimeRangeStart ();
00137 const stdair::Time_T& lTimeRangeEnd =
00138 iFareRuleStruct.getTimeRangeEnd ();
00139 const stdair::TimePeriodKey lFareTimePeriodKey (lTimeRangeStart,
00140 lTimeRangeEnd);
00141
00142
00143
00144
00145 stdair::TimePeriod* lFareTimePeriod_ptr = stdair::BomManager::
00146 getObjectPtr<stdair::TimePeriod> (iPosChannel,
00147 lFareTimePeriodKey.toString());
00148 if (lFareTimePeriod_ptr == NULL) {
00149 lFareTimePeriod_ptr = &stdair::FacBom<stdair::TimePeriod>::instance().
00150 create (lFareTimePeriodKey);
00151 stdair::FacBomManager::addToListAndMap (iPosChannel,
00152 *lFareTimePeriod_ptr);
00153 stdair::FacBomManager::linkWithParent (iPosChannel,
00154 *lFareTimePeriod_ptr);
00155 }
00156
00157 assert (lFareTimePeriod_ptr != NULL);
00158
00159 stdair::TimePeriod& lTimeRange = *lFareTimePeriod_ptr;
00160
00161
00162 createFareFeatures (lTimeRange, iFareRuleStruct);
00163
00164 }
00165
00166
00167 void FareRuleGenerator::
00168 createFareFeatures (stdair::TimePeriod& iTimePeriod,
00169 const FareRuleStruct& iFareRuleStruct) {
00170
00171
00172 const stdair::TripType_T& lTripType =
00173 iFareRuleStruct.getTripType ();
00174 const stdair::DayDuration_T& lAdvancePurchase =
00175 iFareRuleStruct.getAdvancePurchase ();
00176 const stdair::SaturdayStay_T& lSaturdayStay =
00177 iFareRuleStruct.getSaturdayStay ();
00178 const stdair::ChangeFees_T& lChangeFees =
00179 iFareRuleStruct.getChangeFees ();
00180 const stdair::NonRefundable_T& lNonRefundable =
00181 iFareRuleStruct.getNonRefundable ();
00182 const stdair::DayDuration_T& lMinimumStay =
00183 iFareRuleStruct.getMinimumStay ();
00184 const stdair::FareFeaturesKey
00185 lFareFeaturesKey (lTripType, lAdvancePurchase, lSaturdayStay,
00186 lChangeFees, lNonRefundable, lMinimumStay);
00187
00188
00189
00190
00191 stdair::FareFeatures* lFareFeatures_ptr = stdair::BomManager::
00192 getObjectPtr<stdair::FareFeatures> (iTimePeriod,
00193 lFareFeaturesKey.toString());
00194 if (lFareFeatures_ptr == NULL) {
00195 lFareFeatures_ptr = &stdair::FacBom<stdair::FareFeatures>::instance().
00196 create (lFareFeaturesKey);
00197 assert(lFareFeatures_ptr != NULL);
00198 stdair::FacBomManager::addToListAndMap (iTimePeriod,
00199 *lFareFeatures_ptr);
00200 stdair::FacBomManager::linkWithParent (iTimePeriod,
00201 *lFareFeatures_ptr);
00202 }
00203
00204 assert(lFareFeatures_ptr != NULL);
00205
00206 stdair::FareFeatures& lFareFeatures = *lFareFeatures_ptr;
00207
00208
00209 createAirlineClassList (lFareFeatures, iFareRuleStruct);
00210
00211 }
00212
00213
00214 void FareRuleGenerator::
00215 createAirlineClassList (stdair::FareFeatures& iFareFeatures,
00216 const FareRuleStruct& iFareRuleStruct) {
00217
00218
00219 const unsigned int lAirlineListSize =
00220 iFareRuleStruct.getAirlineListSize();
00221 const unsigned int lClassCodeListSize =
00222 iFareRuleStruct.getClassCodeListSize();
00223 assert (lAirlineListSize == lClassCodeListSize);
00224 const stdair::AirlineClassListKey
00225 lAirlineClassListKey (iFareRuleStruct.getAirlineList(),
00226 iFareRuleStruct.getClassCodeList());
00227 const stdair::Fare_T& lFare = iFareRuleStruct.getFare ();
00228
00229
00230
00231 stdair::AirlineClassList* lAirlineClassList_ptr =
00232 &stdair::FacBom<stdair::AirlineClassList>::instance().
00233 create (lAirlineClassListKey);
00234 lAirlineClassList_ptr->setFare(lFare);
00235 stdair::FacBomManager::addToListAndMap (iFareFeatures,
00236 *lAirlineClassList_ptr);
00237 stdair::FacBomManager::linkWithParent(iFareFeatures,
00238 *lAirlineClassList_ptr);
00239 }
00240
00241 }
00242