OpenTREP Logo  0.07.18
C++ Open Travel Request Parsing Library
Loading...
Searching...
No Matches
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>
13
14namespace 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.
const IATACode_T & getIataCode() const
const GeonamesID_T & getGeonamesID() const
const CityUTFName_T & getUtfName() const
const CityASCIIName_T & getAsciiName() const
Structure modelling a (geographical) location.
Definition Location.hpp:25
const Latitude_T & getGeonameLatitude() const
Definition Location.hpp:375
const FeatureCode_T & getFeatureCode() const
Definition Location.hpp:270
const LocationList_T & getExtraLocationList() const
Definition Location.hpp:446
const IATACode_T & getIataCode() const
Definition Location.hpp:38
const Longitude_T & getGeonameLongitude() const
Definition Location.hpp:382
const CurrencyCode_T & getCurrencyCode() const
Definition Location.hpp:200
const TvlPORListString_T & getTvlPORListString() const
Definition Location.hpp:116
const CommonName_T & getCommonName() const
Definition Location.hpp:95
const Longitude_T & getLongitude() const
Definition Location.hpp:256
const RawOffset_T & getRawOffset() const
Definition Location.hpp:242
const std::string & getCorrectedKeywords() const
Definition Location.hpp:417
const ContinentName_T & getContinentName() const
Definition Location.hpp:214
const Date_T & getDateFrom() const
Definition Location.hpp:130
const MatchingPercentage_T & getPercentage() const
Definition Location.hpp:424
const Admin3Code_T & getAdmin3Code() const
Definition Location.hpp:319
const GMTOffset_T & getGMTOffset() const
Definition Location.hpp:228
const NbOfErrors_T & getAllowableEditDistance() const
Definition Location.hpp:439
const Admin2Code_T & getAdmin2Code() const
Definition Location.hpp:298
const Elevation_T & getElevation() const
Definition Location.hpp:340
const NameMatrix & getNameMatrix() const
Definition Location.hpp:389
const WAC_T & getWAC() const
Definition Location.hpp:186
const Admin4Code_T & getAdmin4Code() const
Definition Location.hpp:326
const Latitude_T & getLatitude() const
Definition Location.hpp:249
const FeatureClass_T & getFeatureClass() const
Definition Location.hpp:263
const EnvelopeID_T & getEnvelopeID() const
Definition Location.hpp:123
const WACName_T & getWACName() const
Definition Location.hpp:193
const CountryCode_T & getCountryCode() const
Definition Location.hpp:165
const Admin1Code_T & getAdmin1Code() const
Definition Location.hpp:277
const ASCIIName_T & getAsciiName() const
Definition Location.hpp:102
const CityDetailsList_T & getCityList() const
Definition Location.hpp:151
const Admin1ASCIIName_T & getAdmin1AsciiName() const
Definition Location.hpp:291
const std::string & getOriginalKeywords() const
Definition Location.hpp:410
const AltCountryCode_T & getAltCountryCode() const
Definition Location.hpp:172
const FAACode_T & getFaaCode() const
Definition Location.hpp:73
const ContinentCode_T & getContinentCode() const
Definition Location.hpp:207
const Admin1UTFName_T & getAdmin1UtfName() const
Definition Location.hpp:284
const PageRank_T & getPageRank() const
Definition Location.hpp:354
const LocationList_T & getAlternateLocationList() const
Definition Location.hpp:453
const DSTOffset_T & getDSTOffset() const
Definition Location.hpp:235
const CountryName_T & getCountryName() const
Definition Location.hpp:179
const UNLOCodeList_T & getUNLOCodeList() const
Definition Location.hpp:80
const Date_T & getDateEnd() const
Definition Location.hpp:137
const Admin2UTFName_T & getAdmin2UtfName() const
Definition Location.hpp:305
const TimeZone_T & getTimeZone() const
Definition Location.hpp:221
const GTopo30_T & getGTopo30() const
Definition Location.hpp:347
const NbOfErrors_T & getEditDistance() const
Definition Location.hpp:431
const StateCode_T & getStateCode() const
Definition Location.hpp:158
const Population_T & getPopulation() const
Definition Location.hpp:333
const WikiLink_T & getWikiLink() const
Definition Location.hpp:368
const Date_T & getModificationDate() const
Definition Location.hpp:361
const Admin2ASCIIName_T & getAdmin2AsciiName() const
Definition Location.hpp:312
const ICAOCode_T & getIcaoCode() const
Definition Location.hpp:66
const GeonamesID_T & getGeonamesID() const
Definition Location.hpp:52
const NameMatrix_T & getNameMatrix() const
const NameList_T & getNameList() const
Definition Names.hpp:60