]> git.mxchange.org Git - flightgear.git/blob - src/Airports/dynamicloader.cxx
456acc83597288492d2837e51c510658709a7e49
[flightgear.git] / src / Airports / dynamicloader.cxx
1 #include "dynamicloader.hxx"
2
3 FGAirportDynamicsXMLLoader::FGAirportDynamicsXMLLoader(FGAirportDynamics* dyn):
4     XMLVisitor(), _dynamics(dyn) {}
5
6 void  FGAirportDynamicsXMLLoader::startXML () {
7   //cout << "Start XML" << endl;
8 }
9
10 void  FGAirportDynamicsXMLLoader::endXML () {
11   //cout << "End XML" << endl;
12 }
13
14 void  FGAirportDynamicsXMLLoader::startElement (const char * name, const XMLAttributes &atts) {
15   // const char *attval;
16   FGParking park;
17   FGTaxiNode taxiNode;
18   FGTaxiSegment taxiSegment;
19   int index = 0;
20   taxiSegment.setIndex(index);
21   //cout << "Start element " << name << endl;
22   string attname;
23   string value;
24   string gateName;
25   string gateNumber;
26   string lat;
27   string lon;
28   if (name == string("Parking"))
29     {
30       for (int i = 0; i < atts.size(); i++)
31         {
32           //cout << "  " << atts.getName(i) << '=' << atts.getValue(i) << endl; 
33           attname = atts.getName(i);
34           if (attname == string("index"))
35             park.setIndex(atoi(atts.getValue(i)));
36           else if (attname == string("type"))
37             park.setType(atts.getValue(i));
38          else if (attname == string("name"))
39            gateName = atts.getValue(i);
40           else if (attname == string("number"))
41             gateNumber = atts.getValue(i);
42           else if (attname == string("lat"))
43            park.setLatitude(atts.getValue(i));
44           else if (attname == string("lon"))
45             park.setLongitude(atts.getValue(i)); 
46           else if (attname == string("heading"))
47             park.setHeading(atof(atts.getValue(i)));
48           else if (attname == string("radius")) {
49             string radius = atts.getValue(i);
50             if (radius.find("M") != string::npos)
51               radius = radius.substr(0, radius.find("M",0));
52             //cerr << "Radius " << radius <<endl;
53             park.setRadius(atof(radius.c_str()));
54           }
55            else if (attname == string("airlineCodes"))
56              park.setCodes(atts.getValue(i));
57         }
58       park.setName((gateName+gateNumber));
59       _dynamics->addParking(park);
60     }
61   if (name == string("node")) 
62     {
63       for (int i = 0; i < atts.size() ; i++)
64         {
65           attname = atts.getName(i);
66           if (attname == string("index"))
67             taxiNode.setIndex(atoi(atts.getValue(i)));
68           if (attname == string("lat"))
69             taxiNode.setLatitude(atts.getValue(i));
70           if (attname == string("lon"))
71             taxiNode.setLongitude(atts.getValue(i));
72         }
73       _dynamics->getGroundNetwork()->addNode(taxiNode);
74     }
75   if (name == string("arc")) 
76     {
77       taxiSegment.setIndex(++index);
78       for (int i = 0; i < atts.size() ; i++)
79         {
80           attname = atts.getName(i);
81           if (attname == string("begin"))
82             taxiSegment.setStartNodeRef(atoi(atts.getValue(i)));
83           if (attname == string("end"))
84             taxiSegment.setEndNodeRef(atoi(atts.getValue(i)));
85         }
86       _dynamics->getGroundNetwork()->addSegment(taxiSegment);
87     }
88   // sort by radius, in asending order, so that smaller gates are first in the list
89 }
90
91 void  FGAirportDynamicsXMLLoader::endElement (const char * name) {
92   //cout << "End element " << name << endl;
93
94 }
95
96 void  FGAirportDynamicsXMLLoader::data (const char * s, int len) {
97   string token = string(s,len);
98   //cout << "Character data " << string(s,len) << endl;
99   //if ((token.find(" ") == string::npos && (token.find('\n')) == string::npos))
100     //value += token;
101   //else
102     //value = string("");
103 }
104
105 void  FGAirportDynamicsXMLLoader::pi (const char * target, const char * data) {
106   //cout << "Processing instruction " << target << ' ' << data << endl;
107 }
108
109 void  FGAirportDynamicsXMLLoader::warning (const char * message, int line, int column) {
110   SG_LOG(SG_IO, SG_WARN, "Warning: " << message << " (" << line << ',' << column << ')');
111 }
112
113 void  FGAirportDynamicsXMLLoader::error (const char * message, int line, int column) {
114   SG_LOG(SG_IO, SG_ALERT, "Error: " << message << " (" << line << ',' << column << ')');
115 }