StdAir Logo  0.45.1
C++ Standard Airline IT Object Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
PartnershipTechnique.cpp
Go to the documentation of this file.
00001 // //////////////////////////////////////////////////////////////////////
00002 // Import section
00003 // //////////////////////////////////////////////////////////////////////
00004 // STL
00005 #include <cassert>
00006 #include <sstream>
00007 // StdAir
00008 #include <stdair/stdair_exceptions.hpp>
00009 #include <stdair/basic/PartnershipTechnique.hpp>
00010 
00011 namespace stdair {
00012   
00013   // //////////////////////////////////////////////////////////////////////
00014   const std::string PartnershipTechnique::_labels[LAST_VALUE] =
00015     { "None",
00016       "RevenueAvailabilityExchangeDemandAggregation",
00017       "RevenueAvailabilityExchangeYieldProration",
00018       "InterlineBidPriceDemandAggregation",
00019       "InterlineBidPriceYieldProration",
00020       "NonProtectionistInterlineBidPriceYieldProration",
00021       "RevenueManagementCooperation",
00022       "AdvancedRevenueManagementCooperation"};
00023 
00024   // //////////////////////////////////////////////////////////////////////
00025   const char PartnershipTechnique::_techniqueLabels[LAST_VALUE] = { 'N',
00026                                                                     'r',
00027                                                                     'R',
00028                                                                     'i',
00029                                                                     'I',
00030                                                                     'U',
00031                                                                     'C',
00032                                                                     'A'};
00033 
00034   
00035   // //////////////////////////////////////////////////////////////////////
00036   PartnershipTechnique::PartnershipTechnique() : _technique (LAST_VALUE) {
00037     assert (false);
00038   }
00039 
00040   // //////////////////////////////////////////////////////////////////////
00041   PartnershipTechnique::
00042   PartnershipTechnique (const PartnershipTechnique& iPartnershipTechnique)
00043     : _technique (iPartnershipTechnique._technique) {
00044   }
00045 
00046   // //////////////////////////////////////////////////////////////////////
00047   PartnershipTechnique::
00048   PartnershipTechnique (const EN_PartnershipTechnique& iPartnershipTechnique)
00049     : _technique (iPartnershipTechnique) {
00050   }
00051 
00052   // //////////////////////////////////////////////////////////////////////
00053   PartnershipTechnique::EN_PartnershipTechnique
00054   PartnershipTechnique::getTechnique (const char iTechniqueChar) {
00055     EN_PartnershipTechnique oTechnique;
00056     switch (iTechniqueChar) {
00057     case 'N': oTechnique = NONE; break;
00058     case 'r': oTechnique = RAE_DA; break;
00059     case 'R': oTechnique = RAE_YP; break;
00060     case 'i': oTechnique = IBP_DA; break;
00061     case 'I': oTechnique = IBP_YP; break;
00062     case 'U': oTechnique = IBP_YP_U; break;
00063     case 'C': oTechnique = RMC; break;
00064     case 'A': oTechnique = A_RMC; break;
00065     default: oTechnique = LAST_VALUE; break;
00066     }
00067 
00068     if (oTechnique == LAST_VALUE) {
00069       const std::string& lLabels = describeLabels();
00070       std::ostringstream oMessage;
00071       oMessage << "The partnership technique '"
00072                << iTechniqueChar
00073                << "' is not known. Known partnership techniques: "
00074                << lLabels;
00075       throw CodeConversionException (oMessage.str());
00076     }
00077 
00078     return oTechnique;
00079   }
00080   
00081   // //////////////////////////////////////////////////////////////////////
00082   PartnershipTechnique::PartnershipTechnique (const char iTechniqueChar)
00083     : _technique (getTechnique (iTechniqueChar)) {
00084   }
00085   
00086   // //////////////////////////////////////////////////////////////////////
00087   PartnershipTechnique::
00088   PartnershipTechnique (const std::string& iTechniqueStr) {
00089     // 
00090     const size_t lSize = iTechniqueStr.size();
00091     assert (lSize == 1);
00092     const char lTechniqueChar = iTechniqueStr[0];
00093     _technique = getTechnique (lTechniqueChar);
00094   }
00095   
00096   // //////////////////////////////////////////////////////////////////////
00097   const std::string& PartnershipTechnique::
00098   getLabel (const EN_PartnershipTechnique& iTechnique) {
00099     return _labels[iTechnique];
00100   }
00101   
00102   // //////////////////////////////////////////////////////////////////////
00103   char PartnershipTechnique::
00104   getTechniqueLabel (const EN_PartnershipTechnique& iTechnique) {
00105     return _techniqueLabels[iTechnique];
00106   }
00107 
00108   // //////////////////////////////////////////////////////////////////////
00109   std::string PartnershipTechnique::
00110   getTechniqueLabelAsString (const EN_PartnershipTechnique& iTechnique) {
00111     std::ostringstream oStr;
00112     oStr << _techniqueLabels[iTechnique];
00113     return oStr.str();
00114   }
00115 
00116   // //////////////////////////////////////////////////////////////////////
00117   std::string PartnershipTechnique::describeLabels() {
00118     std::ostringstream ostr;
00119     for (unsigned short idx = 0; idx != LAST_VALUE; ++idx) {
00120       if (idx != 0) {
00121         ostr << ", ";
00122       }
00123       ostr << _labels[idx];
00124     }
00125     return ostr.str();
00126   }
00127 
00128   // //////////////////////////////////////////////////////////////////////
00129   PartnershipTechnique::EN_PartnershipTechnique
00130   PartnershipTechnique::getTechnique() const {
00131     return _technique;
00132   }
00133   
00134   // //////////////////////////////////////////////////////////////////////
00135   char PartnershipTechnique::getTechniqueAsChar() const {
00136     const char oTechniqueChar = _techniqueLabels[_technique];
00137     return oTechniqueChar;
00138   }
00139 
00140   // //////////////////////////////////////////////////////////////////////
00141   std::string PartnershipTechnique::getTechniqueAsString() const {
00142     std::ostringstream oStr;
00143     oStr << _techniqueLabels[_technique];
00144     return oStr.str();
00145   }
00146   
00147   // //////////////////////////////////////////////////////////////////////
00148   const std::string PartnershipTechnique::describe() const {
00149     std::ostringstream ostr;
00150     ostr << _labels[_technique];
00151     return ostr.str();
00152   }
00153 
00154   // //////////////////////////////////////////////////////////////////////
00155   bool PartnershipTechnique::
00156   operator== (const EN_PartnershipTechnique& iTechnique) const {
00157     return (_technique == iTechnique);
00158   }
00159   
00160 }