Table of Contents
Introduction
This page contains some tutorial examples that will help you getting started using StdAir. Most examples show how to construct some simple business objects, i.e., instances of the so-named Business Object Model (BOM).
Preparing the StdAir Project for Development
The source code for these examples can be found in the batches and test/stdair directories. They are compiled along with the rest of the StdAir
project. See the User Guide (Users Guide) for more details on how to build the StdAir
project.
Build a Predefined BOM Tree
A few steps:
Instanciate the BOM Root Object
First, a BOM root object (i.e., a root for all the classes in the project) is instantiated by the stdair::STDAIR_ServiceContext context object, when the stdair::STDAIR_Service is itself instantiated. The corresponding StdAir
type (class) is stdair::BomRoot.
In the following sample, that object is named ioBomRoot
, and is given as input/output parameter of the stdair::CmdBomManager::buildSampleBom() method:
Instanciate the (Airline) Inventory Object
An airline inventory object can then be instantiated. Let us give it the "BA" airline code (corresponding to British Airways) as the object key. That is, an object (let us name it lBAKey
) of type (class) stdair::InventoryKey has first to be instantiated.
Thanks to that key, an airline inventory object, i.e. of type (class) stdair::Inventory, can be instantiated. Let us name that airline inventory object lBAInv
.
Link the Inventory Object with the BOM Root
Then, both objects have to be linked: the airline inventory object (stdair::Inventory) has to be linked with the root of the BOM tree (stdair::BomRoot). That operation is as simple as using the stdair::FacBomManager::addToListAndMap() method:
Build Another Airline Inventory
Another airline inventory object, corresponding to the Air France (Air France) company, is instantiated the same way:
See the corresponding full program (C++ Class Building Sample StdAir BOM Trees) for more details.
Dump The BOM Tree Content
From the BomRoot
(of type stdair::BomRoot) object instance, the list of airline inventories (of type stdair::Inventory) can then be retrieved...
... and browsed:
oStream << iInventoryIndex << ". " << lAirlineCode << std::endl;
unsigned short lCurrentFlightNumber = 0;
unsigned short flightNumberIdx = 0;
unsigned short departureDateIdx = 1;
BomManager::getMap<FlightDate> (iInventory);
for (FlightDateMap_T::const_iterator itFD = lFlightDateList.begin();
itFD != lFlightDateList.end(); ++itFD, ++departureDateIdx) {
const FlightDate* lFD_ptr = itFD->second;
assert (lFD_ptr != NULL);
const Date_T& lFlightDateDate = lFD_ptr->getDepartureDate();
if (iFlightNumber == 0 || iFlightNumber == lFlightNumber) {
if (lCurrentFlightNumber != lFlightNumber) {
lCurrentFlightNumber = lFlightNumber;
++flightNumberIdx; departureDateIdx = 1;
oStream << " " << iInventoryIndex << "." << flightNumberIdx << ". "
<< lAirlineCode << lFlightNumber << std::endl;
}
oStream << " " << iInventoryIndex << "." << flightNumberIdx
<< "." << departureDateIdx << ". "
<< lAirlineCode << lFlightNumber << " / " << lFlightDateDate
<< std::endl;
}
}
}
void BomDisplay::listAirportPairDateRange (std::ostream& oStream,
const BomRoot& iBomRoot) {
FlagSaver flagSaver (oStream);
if (BomManager::hasList<AirportPair> (iBomRoot) == false) {
return;
}
BomManager::getList<AirportPair> (iBomRoot);
for (AirportPairList_T::const_iterator itAir = lAirportPairList.begin();
itAir != lAirportPairList.end(); ++itAir ) {
const AirportPair* lAir_ptr = *itAir;
assert (lAir_ptr != NULL);
assert (BomManager::hasList<DatePeriod> (*lAir_ptr) == true);
BomManager::getList<DatePeriod> (*lAir_ptr);
for (DatePeriodList_T::const_iterator itDP = lDatePeriodList.begin();
itDP != lDatePeriodList.end(); ++itDP) {
const DatePeriod* lDP_ptr = *itDP;
assert (lDP_ptr != NULL);
oStream << lAir_ptr->describeKey()
<<" / " << lDP_ptr->describeKey() << std::endl;
}
}
}
void BomDisplay::csvDisplay (std::ostream& oStream,
boost::gregorian::date Date_T
std::list< DatePeriod * > DatePeriodList_T
std::map< const MapKey_T, FlightDate * > FlightDateMap_T
std::list< AirportPair * > AirportPairList_T
unsigned short FlightNumber_T
std::string AirlineCode_T
[D]../../batches/stdair.cpp:243: Welcome to stdair
[D]../../../stdair/command/CmdBomManager.cpp:41: StdAir will build the BOM tree from built-in specifications.
[D]../../batches/stdair.cpp:286:
===============================================================
BomRoot: -- ROOT --
===============================================================
+++++++++++++++++++++++++++++++++++++++++++++++++
Inventory: BA
+++++++++++++++++++++++++++++++++++++++++++++++++
******************************************
FlightDate: BA9, 2011-Jun-10
******************************************
******************************************
Leg-Dates:
----------
Flight, Leg, BoardDate, BoardTime, OffDate, OffTime, Date Offset, Time Offset, Elapsed, Distance, Capacity,
BA9 2011-Jun-10, LHR-BKK, 2011-Jun-10, 21:45:00, 2011-Jun-11, 15:40:00, 11:05:00, 1, 06:50:00, 9900, 0,
BA9 2011-Jun-10, BKK-SYD, 2011-Jun-11, 17:05:00, 2011-Jun-12, 15:40:00, 09:05:00, 1, 13:30:00, 8100, 0,
******************************************
******************************************
LegCabins:
----------
Flight, Leg, Cabin, OffedCAP, PhyCAP, RgdADJ, AU, UPR, SS, Staff, WL, Group, CommSpace, AvPool, Avl, NAV, GAV, ACP, ETB, BidPrice,
BA9 2011-Jun-10, LHR-BKK 2011-Jun-10, Y, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 3.52965e-319, 0, 0,
BA9 2011-Jun-10, BKK-SYD 2011-Jun-11, Y, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
******************************************
******************************************
Buckets:
--------
Flight, Leg, Cabin, Yield, AU/SI, SS, AV,
******************************************
******************************************
SegmentCabins:
--------------
Flight, Segment, Cabin, FF, Bkgs, MIN, UPR, CommSpace, AvPool, BP,
BA9 2011-Jun-10, LHR-SYD 2011-Jun-10, Y, EcoSaver, 0, 0, 0, 0, 9, 0,
BA9 2011-Jun-10, LHR-BKK 2011-Jun-10, Y, EcoSaver, 0, 0, 0, 0, 9, 0,
BA9 2011-Jun-10, BKK-SYD 2011-Jun-11, Y, EcoSaver, 0, 0, 0, 0, 9, 0,
******************************************
******************************************
Subclasses:
-----------
Flight, Segment, Cabin, FF, Subclass, MIN/AU (Prot), Nego, NS%, OB%, Bkgs, GrpBks (pdg), StfBkgs, WLBkgs, ETB, ClassAvl, RevAvl, SegAvl,
BA9 2011-Jun-10, LHR-SYD 2011-Jun-10, Y, EcoSaver, Q, 0 (0), 0, 0, 0, 0, 0 (0), 0, 0, 0, 0, 0, 0,
+++++++++++++++++++++++++++++++++++++++++++++++++
Inventory: AF
+++++++++++++++++++++++++++++++++++++++++++++++++
******************************************
FlightDate: AF84, 2011-Mar-20
******************************************
******************************************
Leg-Dates:
----------
Flight, Leg, BoardDate, BoardTime, OffDate, OffTime, Date Offset, Time Offset, Elapsed, Distance, Capacity,
AF84 2011-Mar-20, CDG-SFO, 2011-Mar-20, 10:40:00, 2011-Mar-20, 12:50:00, 11:10:00, 0, -09:00:00, 9900, 0,
******************************************
******************************************
LegCabins:
----------
Flight, Leg, Cabin, OffedCAP, PhyCAP, RgdADJ, AU, UPR, SS, Staff, WL, Group, CommSpace, AvPool, Avl, NAV, GAV, ACP, ETB, BidPrice,
AF84 2011-Mar-20, CDG-SFO 2011-Mar-20, Y, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
******************************************
******************************************
Buckets:
--------
Flight, Leg, Cabin, Yield, AU/SI, SS, AV,
******************************************
******************************************
SegmentCabins:
--------------
Flight, Segment, Cabin, FF, Bkgs, MIN, UPR, CommSpace, AvPool, BP,
AF84 2011-Mar-20, CDG-SFO 2011-Mar-20, Y, EcoSaver, 0, 0, 0, 0, 9, 0,
******************************************
******************************************
Subclasses:
-----------
Flight, Segment, Cabin, FF, Subclass, MIN/AU (Prot), Nego, NS%, OB%, Bkgs, GrpBks (pdg), StfBkgs, WLBkgs, ETB, ClassAvl, RevAvl, SegAvl,
AF84 2011-Mar-20, CDG-SFO 2011-Mar-20, Y, EcoSaver, Q, 0 (0), 0, 0, 0, 0, 0 (0), 0, 0, 0, 0, 0, 0,
Now that we master how to instantiate the pre-defined StdAir classes, let us see how to extend that BOM.
For instance, let us assume that some (IT) provider (e.g., you) would like to have a specific implementation of the Inventory
object. The corresponding class has just to extend the stdair::Inventory class:
... and browsed: