OpenTREP Logo  0.07.11
C++ Open Travel Request Parsing Library
BomJSONExport.cpp
Go to the documentation of this file.
1 // //////////////////////////////////////////////////////////////////////
2 // Import section
3 // //////////////////////////////////////////////////////////////////////
4 // STL
5 #include <cassert>
6 #include <ostream>
7 // Boost ForEach
8 //#include <boost/foreach.hpp>
9 // OpenTREP
10 #include <opentrep/Location.hpp>
11 #include <opentrep/CityDetails.hpp>
13 
14 namespace OPENTREP {
15 
16  // ////////////////////////////////////////////////////////////////////
18  jsonExportLocationList (std::ostream& oStream,
19  const LocationList_T& iLocationList) {
20 
21  // Create empty Boost.Property_Tree objects
22  bpt::ptree lPT;
23  bpt::ptree lPTLocationList;
24 
25  for (LocationList_T::const_iterator itLocation = iLocationList.begin();
26  itLocation != iLocationList.end(); ++itLocation) {
27  const Location& lLocation = *itLocation;
28  //
29  bpt::ptree lPTLocation;
30  jsonExportLocation (lPTLocation, lLocation);
31 
32  // List of extra matching locations (those with the same matching
33  // weight/percentage)
34  const LocationList_T& lExtraLocationList= lLocation.getExtraLocationList();
35  if (lExtraLocationList.empty() == false) {
36  //
37  bpt::ptree lPTExtraLocationList;
38 
39  NbOfMatches_T idxExtra = 0;
40  for (LocationList_T::const_iterator itLoc = lExtraLocationList.begin();
41  itLoc != lExtraLocationList.end(); ++itLoc, ++idxExtra) {
42  const Location& lExtraLocation = *itLoc;
43  //
44  bpt::ptree lPTExtraLocation;
45  jsonExportLocation (lPTExtraLocation, lExtraLocation);
46 
47  // Put the current location tree in the location list
48  lPTExtraLocationList.push_back (std::make_pair("", lPTExtraLocation));
49  }
50 
51  // Add the extra location list to the Boost.Property_Tree representing
52  // the current Location instance.
53  lPTLocation.add_child ("extras", lPTExtraLocationList);
54  }
55 
56  // List of alternate matching locations (those with a lower matching
57  // weight/percentage)
58  const LocationList_T& lAltLocationList =
59  lLocation.getAlternateLocationList();
60  if (lAltLocationList.empty() == false) {
61  //
62  bpt::ptree lPTAltLocationList;
63 
64  NbOfMatches_T idxAlter = 0;
65  for (LocationList_T::const_iterator itLoc = lAltLocationList.begin();
66  itLoc != lAltLocationList.end(); ++itLoc, ++idxAlter) {
67  const Location& lAltLocation = *itLoc;
68  //
69  bpt::ptree lPTAltLocation;
70  jsonExportLocation (lPTAltLocation, lAltLocation);
71 
72  // Put the current location tree in the location list
73  lPTAltLocationList.push_back (std::make_pair ("", lPTAltLocation));
74  }
75 
76  // Add the extra location list to the Boost.Property_Tree representing
77  // the current Location instance.
78  lPTLocation.add_child ("alternates", lPTAltLocationList);
79  }
80 
81  // Add the current location property tree to the location list
82  lPTLocationList.push_back (std::make_pair ("", lPTLocation));
83  }
84 
85  // Add the location list to the root of the Boost.Property_Tree
86  lPT.add_child ("locations", lPTLocationList);
87 
88  // Write the property tree into a JSON string
89  write_json (oStream, lPT);
90  }
91 
92  // ////////////////////////////////////////////////////////////////////
93  void BomJSONExport::jsonExportLocation (bpt::ptree& ioPTLocation,
94  const Location& iLocation) {
95  // Fill all the fields of the JSON instance
96  ioPTLocation.put ("iata_code", iLocation.getIataCode());
97  ioPTLocation.put ("icao_code", iLocation.getIcaoCode());
98  ioPTLocation.put ("geonames_id", iLocation.getGeonamesID());
99  ioPTLocation.put ("feature_class", iLocation.getFeatureClass());
100  ioPTLocation.put ("feature_code", iLocation.getFeatureCode());
101  ioPTLocation.put ("modification_date", iLocation.getModificationDate());
102  ioPTLocation.put ("faa_code", iLocation.getFaaCode());
103  ioPTLocation.put ("env_id", iLocation.getEnvelopeID());
104  ioPTLocation.put ("date_from", iLocation.getDateFrom());
105  ioPTLocation.put ("date_end", iLocation.getDateEnd());
106  ioPTLocation.put ("name_common", iLocation.getCommonName());
107  ioPTLocation.put ("name_ascii", iLocation.getAsciiName());
108  ioPTLocation.put ("state_code", iLocation.getStateCode());
109  ioPTLocation.put ("country_code", iLocation.getCountryCode());
110  ioPTLocation.put ("country_name", iLocation.getCountryName());
111  ioPTLocation.put ("alt_country_code", iLocation.getAltCountryCode());
112  ioPTLocation.put ("continent_code", iLocation.getContinentCode());
113  ioPTLocation.put ("continent_name", iLocation.getContinentName());
114  ioPTLocation.put ("adm1_code", iLocation.getAdmin1Code());
115  ioPTLocation.put ("adm1_name_utf", iLocation.getAdmin1UtfName());
116  ioPTLocation.put ("adm1_name_ascii", iLocation.getAdmin1AsciiName());
117  ioPTLocation.put ("adm2_code", iLocation.getAdmin2Code());
118  ioPTLocation.put ("adm2_name_utf", iLocation.getAdmin2UtfName());
119  ioPTLocation.put ("adm2_name_ascii", iLocation.getAdmin2AsciiName());
120  ioPTLocation.put ("adm3_code", iLocation.getAdmin3Code());
121  ioPTLocation.put ("adm4_code", iLocation.getAdmin4Code());
122  ioPTLocation.put ("tvl_por_list", iLocation.getTvlPORListString());
123  ioPTLocation.put ("time_zone", iLocation.getTimeZone());
124  ioPTLocation.put ("offset_gmt", iLocation.getGMTOffset());
125  ioPTLocation.put ("offset_dst", iLocation.getDSTOffset());
126  ioPTLocation.put ("offset_raw", iLocation.getRawOffset());
127  ioPTLocation.put ("lat", iLocation.getLatitude());
128  ioPTLocation.put ("lon", iLocation.getLongitude());
129  ioPTLocation.put ("geonames_lat", iLocation.getGeonameLatitude());
130  ioPTLocation.put ("geonames_lon", iLocation.getGeonameLongitude());
131  ioPTLocation.put ("population", iLocation.getPopulation());
132  ioPTLocation.put ("elevation", iLocation.getElevation());
133  ioPTLocation.put ("gtopo30", iLocation.getGTopo30());
134  ioPTLocation.put ("page_rank", iLocation.getPageRank());
135  ioPTLocation.put ("wac", iLocation.getWAC());
136  ioPTLocation.put ("wac_name", iLocation.getWACName());
137  ioPTLocation.put ("wiki_link", iLocation.getWikiLink());
138  ioPTLocation.put ("currency_code", iLocation.getCurrencyCode());
139  ioPTLocation.put ("original_keywords", iLocation.getOriginalKeywords());
140  ioPTLocation.put ("corrected_keywords", iLocation.getCorrectedKeywords());
141  ioPTLocation.put ("matching_percentage", iLocation.getPercentage());
142  ioPTLocation.put ("edit_distance", iLocation.getEditDistance());
143  ioPTLocation.put ("allowable_distance",iLocation.getAllowableEditDistance());
144 
148  bpt::ptree ptUNLOCodeList;
149  // Retrieve the list of UN/LOCODE codes
150  const UNLOCodeList_T& lUNCodeList = iLocation.getUNLOCodeList();
151  for (UNLOCodeList_T::const_iterator itUNLOCode = lUNCodeList.begin();
152  itUNLOCode != lUNCodeList.end(); ++itUNLOCode) {
153  // Retrieve the UN/LOCODE code
154  const UNLOCode_T& lUNLOCode = *itUNLOCode;
155 
156  // Add the item into the UN/LOCODE list Boost.Property_Tree
157  ptUNLOCodeList.put ("unlocode_code", lUNLOCode);
158  }
159 
160  // Add the UN/LOCODE Boost.Property_Tree to the main tree
161  ioPTLocation.add_child ("unlocode_codes", ptUNLOCodeList);
162 
166  bpt::ptree ptCityList;
167  // Retrieve the list of served cities
168  const CityDetailsList_T& lCityList = iLocation.getCityList();
169  for (CityDetailsList_T::const_iterator itCity = lCityList.begin();
170  itCity != lCityList.end(); ++itCity) {
171  // Retrieve the details, ie, IATA code, Geonames ID and names
172  const CityDetails& lCityDetails = *itCity;
173  bpt::ptree ptCityDetails;
174  ptCityDetails.put ("iata_code", lCityDetails.getIataCode());
175  ptCityDetails.put ("geonames_id", lCityDetails.getGeonamesID());
176  ptCityDetails.put ("name_utf", lCityDetails.getUtfName());
177  ptCityDetails.put ("name_ascii", lCityDetails.getAsciiName());
178 
179  // Add the item into the city list Boost.Property_Tree
180  ptCityList.push_back (std::make_pair ("city_details", ptCityDetails));
181  }
182 
183  // Add the city detail list to the location Boost.Property_Tree
184  ioPTLocation.add_child ("cities", ptCityList);
185 
189  bpt::ptree ptLocationNameList;
190  // Retrieve the place names in all the available languages
191  const NameMatrix& lNameMatrixFull = iLocation.getNameMatrix();
192  const NameMatrix_T& lNameMatrix = lNameMatrixFull.getNameMatrix();
193  for (NameMatrix_T::const_iterator itNameList = lNameMatrix.begin();
194  itNameList != lNameMatrix.end(); ++itNameList) {
195  // Retrieve the language code and locale
196  // const Language::EN_Language& lLanguage = itNameList->first;
197  const Names& lNames = itNameList->second;
198 
199  // For a given language, retrieve the list of place names
200  const NameList_T& lNameList = lNames.getNameList();
201 
202  for (NameList_T::const_iterator itName = lNameList.begin();
203  itName != lNameList.end(); ++itName) {
204  const std::string& lName = *itName;
205 
206  if (lName.empty() == false) {
207  bpt::ptree ptLocationName;
208  ptLocationName.put ("name", lName);
209  ptLocationNameList.push_back (std::make_pair ("", ptLocationName));
210  }
211  }
212  }
213 
214  // Add the name list to the Boost.Property_Tree representing the location
215  ioPTLocation.add_child ("names", ptLocationNameList);
216  }
217 
218 }
static void jsonExportLocationList(std::ostream &, const LocationList_T &)
static void jsonExportLocation(bpt::ptree &, const Location &)
std::map< LanguageCode_T, Names > NameMatrix_T
Definition: Names.hpp:149
std::list< std::string > NameList_T
Definition: Names.hpp:20
std::list< CityDetails > CityDetailsList_T
A list of cities, for instance the list of cities served by a travel-/transport-related POR (point of...
std::list< Location > LocationList_T
std::list< UNLOCode_T > UNLOCodeList_T
unsigned short NbOfMatches_T
Class modelling the elementary details of a city.
Definition: CityDetails.hpp:30
const IATACode_T & getIataCode() const
Definition: CityDetails.hpp:36
const CityASCIIName_T & getAsciiName() const
Definition: CityDetails.hpp:58
const CityUTFName_T & getUtfName() const
Definition: CityDetails.hpp:50
const GeonamesID_T & getGeonamesID() const
Definition: CityDetails.hpp:43
Structure modelling a (geographical) location.
Definition: Location.hpp:25
const Latitude_T & getGeonameLatitude() const
Definition: Location.hpp:375
const WikiLink_T & getWikiLink() const
Definition: Location.hpp:368
const GTopo30_T & getGTopo30() const
Definition: Location.hpp:347
const CommonName_T & getCommonName() const
Definition: Location.hpp:95
const ICAOCode_T & getIcaoCode() const
Definition: Location.hpp:66
const Admin1UTFName_T & getAdmin1UtfName() const
Definition: Location.hpp:284
const LocationList_T & getExtraLocationList() const
Definition: Location.hpp:446
const AltCountryCode_T & getAltCountryCode() const
Definition: Location.hpp:172
const std::string & getOriginalKeywords() const
Definition: Location.hpp:410
const IATACode_T & getIataCode() const
Definition: Location.hpp:38
const Admin2Code_T & getAdmin2Code() const
Definition: Location.hpp:298
const NameMatrix & getNameMatrix() const
Definition: Location.hpp:389
const RawOffset_T & getRawOffset() const
Definition: Location.hpp:242
const FeatureCode_T & getFeatureCode() const
Definition: Location.hpp:270
const ContinentName_T & getContinentName() const
Definition: Location.hpp:214
const Elevation_T & getElevation() const
Definition: Location.hpp:340
const Admin2UTFName_T & getAdmin2UtfName() const
Definition: Location.hpp:305
const TimeZone_T & getTimeZone() const
Definition: Location.hpp:221
const MatchingPercentage_T & getPercentage() const
Definition: Location.hpp:424
const Longitude_T & getGeonameLongitude() const
Definition: Location.hpp:382
const Admin3Code_T & getAdmin3Code() const
Definition: Location.hpp:319
const ASCIIName_T & getAsciiName() const
Definition: Location.hpp:102
const WAC_T & getWAC() const
Definition: Location.hpp:186
const EnvelopeID_T & getEnvelopeID() const
Definition: Location.hpp:123
const DSTOffset_T & getDSTOffset() const
Definition: Location.hpp:235
const Longitude_T & getLongitude() const
Definition: Location.hpp:256
const GeonamesID_T & getGeonamesID() const
Definition: Location.hpp:52
const std::string & getCorrectedKeywords() const
Definition: Location.hpp:417
const NbOfErrors_T & getEditDistance() const
Definition: Location.hpp:431
const UNLOCodeList_T & getUNLOCodeList() const
Definition: Location.hpp:80
const GMTOffset_T & getGMTOffset() const
Definition: Location.hpp:228
const CityDetailsList_T & getCityList() const
Definition: Location.hpp:151
const FeatureClass_T & getFeatureClass() const
Definition: Location.hpp:263
const Admin2ASCIIName_T & getAdmin2AsciiName() const
Definition: Location.hpp:312
const Date_T & getDateEnd() const
Definition: Location.hpp:137
const CurrencyCode_T & getCurrencyCode() const
Definition: Location.hpp:200
const Date_T & getModificationDate() const
Definition: Location.hpp:361
const WACName_T & getWACName() const
Definition: Location.hpp:193
const CountryName_T & getCountryName() const
Definition: Location.hpp:179
const ContinentCode_T & getContinentCode() const
Definition: Location.hpp:207
const LocationList_T & getAlternateLocationList() const
Definition: Location.hpp:453
const NbOfErrors_T & getAllowableEditDistance() const
Definition: Location.hpp:439
const Admin1Code_T & getAdmin1Code() const
Definition: Location.hpp:277
const FAACode_T & getFaaCode() const
Definition: Location.hpp:73
const CountryCode_T & getCountryCode() const
Definition: Location.hpp:165
const StateCode_T & getStateCode() const
Definition: Location.hpp:158
const PageRank_T & getPageRank() const
Definition: Location.hpp:354
const Admin4Code_T & getAdmin4Code() const
Definition: Location.hpp:326
const TvlPORListString_T & getTvlPORListString() const
Definition: Location.hpp:116
const Admin1ASCIIName_T & getAdmin1AsciiName() const
Definition: Location.hpp:291
const Latitude_T & getLatitude() const
Definition: Location.hpp:249
const Date_T & getDateFrom() const
Definition: Location.hpp:130
const Population_T & getPopulation() const
Definition: Location.hpp:333
const NameMatrix_T & getNameMatrix() const
Definition: NameMatrix.hpp:44
const NameList_T & getNameList() const
Definition: Names.hpp:60