1 #include "dynamicloader.hxx"
3 FGAirportDynamicsXMLLoader::FGAirportDynamicsXMLLoader(FGAirportDynamics* dyn):
4 XMLVisitor(), _dynamics(dyn) {}
6 void FGAirportDynamicsXMLLoader::startXML () {
7 //cout << "Start XML" << endl;
10 void FGAirportDynamicsXMLLoader::endXML () {
11 //cout << "End XML" << endl;
14 void FGAirportDynamicsXMLLoader::startElement (const char * name, const XMLAttributes &atts) {
15 // const char *attval;
18 FGTaxiSegment taxiSegment;
20 taxiSegment.setIndex(index);
21 //cout << "Start element " << name << endl;
28 if (name == string("Parking"))
30 for (int i = 0; i < atts.size(); i++)
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()));
55 else if (attname == string("airlineCodes"))
56 park.setCodes(atts.getValue(i));
58 park.setName((gateName+gateNumber));
59 _dynamics->addParking(park);
61 if (name == string("node"))
63 for (int i = 0; i < atts.size() ; i++)
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));
73 _dynamics->getGroundNetwork()->addNode(taxiNode);
75 if (name == string("arc"))
77 taxiSegment.setIndex(++index);
78 for (int i = 0; i < atts.size() ; i++)
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)));
86 _dynamics->getGroundNetwork()->addSegment(taxiSegment);
88 // sort by radius, in asending order, so that smaller gates are first in the list
91 void FGAirportDynamicsXMLLoader::endElement (const char * name) {
92 //cout << "End element " << name << endl;
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))
102 //value = string("");
105 void FGAirportDynamicsXMLLoader::pi (const char * target, const char * data) {
106 //cout << "Processing instruction " << target << ' ' << data << endl;
109 void FGAirportDynamicsXMLLoader::warning (const char * message, int line, int column) {
110 SG_LOG(SG_IO, SG_WARN, "Warning: " << message << " (" << line << ',' << column << ')');
113 void FGAirportDynamicsXMLLoader::error (const char * message, int line, int column) {
114 SG_LOG(SG_IO, SG_ALERT, "Error: " << message << " (" << line << ',' << column << ')');