Ground-net loading: collect which nets have problems
Log problem airports so we can fix them case-by-case.
This commit is contained in:
parent
cf75ba1fe9
commit
2614945b8f
3 changed files with 37 additions and 11 deletions
|
@ -67,14 +67,19 @@ void FGGroundNetXMLLoader::endXML ()
|
|||
for (it = _parkingPushbacks.begin(); it != _parkingPushbacks.end(); ++it) {
|
||||
NodeIndexMap::const_iterator j = _indexMap.find(it->second);
|
||||
if (j == _indexMap.end()) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, "bad groundnet, no node for index:" << it->first);
|
||||
continue;
|
||||
_hasErrors = true;
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, "bad groundnet, no node for index:" << it->first);
|
||||
continue;
|
||||
}
|
||||
|
||||
it->first->setPushBackPoint(j->second);
|
||||
|
||||
}
|
||||
|
||||
if (!_unreferencedNodes.empty()) {
|
||||
_hasErrors = true;
|
||||
}
|
||||
|
||||
for (const FGTaxiNodeRef& node: _unreferencedNodes) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN,
|
||||
"unreferenced groundnet node: " << node->getIndex());
|
||||
|
@ -132,6 +137,7 @@ void FGGroundNetXMLLoader::startParking(const XMLAttributes &atts)
|
|||
SG_LOG(SG_NAVAID, SG_DEV_WARN,
|
||||
getPath() << ":" << getLine() << ": " <<
|
||||
"invalid value for 'pushBackRoute': " << e.what());
|
||||
_hasErrors = true;
|
||||
pushBackRoute = -2;
|
||||
}
|
||||
}
|
||||
|
@ -187,6 +193,7 @@ void FGGroundNetXMLLoader::startNode(const XMLAttributes &atts)
|
|||
|
||||
if (_indexMap.find(index) != _indexMap.end()) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, "duplicate ground-net index:" << index);
|
||||
_hasErrors = true;
|
||||
}
|
||||
|
||||
SGGeod pos(SGGeod::fromDeg(processPosition(lon), processPosition(lat)));
|
||||
|
@ -214,6 +221,7 @@ void FGGroundNetXMLLoader::startArc(const XMLAttributes &atts)
|
|||
IntPair e(begin, end);
|
||||
if (_arcSet.find(e) != _arcSet.end()) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, _groundNetwork->airport()->ident() << " ground-net: skipping duplicate edge:" << begin << "->" << end);
|
||||
_hasErrors = true;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -222,6 +230,7 @@ void FGGroundNetXMLLoader::startArc(const XMLAttributes &atts)
|
|||
it = _indexMap.find(begin);
|
||||
if (it == _indexMap.end()) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, "ground-net: bad edge:" << begin << "->" << end << ", begin index unknown");
|
||||
_hasErrors = true;
|
||||
return;
|
||||
} else {
|
||||
_unreferencedNodes.erase(it->second);
|
||||
|
@ -231,6 +240,7 @@ void FGGroundNetXMLLoader::startArc(const XMLAttributes &atts)
|
|||
it = _indexMap.find(end);
|
||||
if (it == _indexMap.end()) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, "ground-net: bad edge:" << begin << "->" << end << ", end index unknown");
|
||||
_hasErrors = true;
|
||||
return;
|
||||
} else {
|
||||
_unreferencedNodes.erase(it->second);
|
||||
|
@ -289,9 +299,9 @@ void FGGroundNetXMLLoader::pi (const char * target, const char * data) {
|
|||
}
|
||||
|
||||
void FGGroundNetXMLLoader::warning (const char * message, int line, int column) {
|
||||
SG_LOG(SG_IO, SG_WARN, "Warning: " << message << " (" << line << ',' << column << ')');
|
||||
SG_LOG(SG_IO, SG_DEV_WARN, "Warning: " << message << " (" << line << ',' << column << ')');
|
||||
}
|
||||
|
||||
void FGGroundNetXMLLoader::error (const char * message, int line, int column) {
|
||||
SG_LOG(SG_IO, SG_ALERT, "Error: " << message << " (" << line << ',' << column << ')');
|
||||
SG_LOG(SG_IO, SG_DEV_ALERT, "Error: " << message << " (" << line << ',' << column << ')');
|
||||
}
|
||||
|
|
|
@ -27,6 +27,11 @@ class FGGroundNetXMLLoader : public XMLVisitor {
|
|||
public:
|
||||
FGGroundNetXMLLoader(FGGroundNetwork* gn);
|
||||
|
||||
bool hasErrors() const
|
||||
{
|
||||
return _hasErrors;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void startXML ();
|
||||
virtual void endXML ();
|
||||
|
@ -43,7 +48,10 @@ private:
|
|||
void startArc(const XMLAttributes &atts);
|
||||
|
||||
FGGroundNetwork* _groundNetwork;
|
||||
|
||||
|
||||
// we set this flag if the ground-network has any problems
|
||||
bool _hasErrors = false;
|
||||
|
||||
std::string value;
|
||||
|
||||
// map from local (groundnet.xml) ids to parking instances
|
||||
|
|
|
@ -54,39 +54,47 @@ void XMLLoader::load(FGGroundNetwork* net)
|
|||
SGTimeStamp t;
|
||||
t.stamp();
|
||||
try {
|
||||
flightgear::sentryThreadReportXMLErrors(false);
|
||||
flightgear::SentryXMLErrorSupression xs;
|
||||
FGGroundNetXMLLoader visitor(net);
|
||||
readXML(path, visitor);
|
||||
|
||||
if (visitor.hasErrors()) {
|
||||
flightgear::sentryReportException("Ground-net load error", path.utf8Str());
|
||||
}
|
||||
} catch (sg_exception& e) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, "parsing groundnet XML failed:" << e.getFormattedMessage());
|
||||
}
|
||||
|
||||
flightgear::sentryThreadReportXMLErrors(true);
|
||||
SG_LOG(SG_NAVAID, SG_DEBUG, "parsing groundnet XML took " << t.elapsedMSec());
|
||||
}
|
||||
|
||||
void XMLLoader::loadFromStream(FGGroundNetwork* net, std::istream& inData)
|
||||
{
|
||||
try {
|
||||
flightgear::sentryThreadReportXMLErrors(false);
|
||||
flightgear::SentryXMLErrorSupression xs;
|
||||
FGGroundNetXMLLoader visitor(net);
|
||||
readXML(inData, visitor);
|
||||
|
||||
if (visitor.hasErrors()) {
|
||||
flightgear::sentryReportException("Ground-net load error", {});
|
||||
}
|
||||
} catch (sg_exception& e) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, "parsing groundnet XML failed:" << e.getFormattedMessage());
|
||||
}
|
||||
flightgear::sentryThreadReportXMLErrors(true);
|
||||
}
|
||||
|
||||
void XMLLoader::loadFromPath(FGGroundNetwork* net, const SGPath& path)
|
||||
{
|
||||
try {
|
||||
flightgear::sentryThreadReportXMLErrors(false);
|
||||
flightgear::SentryXMLErrorSupression xs;
|
||||
FGGroundNetXMLLoader visitor(net);
|
||||
readXML(path, visitor);
|
||||
if (visitor.hasErrors()) {
|
||||
flightgear::sentryReportException("Ground-net load error", path.utf8Str());
|
||||
}
|
||||
} catch (sg_exception& e) {
|
||||
SG_LOG(SG_NAVAID, SG_DEV_WARN, "parsing groundnet XML failed:" << e.getFormattedMessage());
|
||||
}
|
||||
flightgear::sentryThreadReportXMLErrors(true);
|
||||
}
|
||||
|
||||
void XMLLoader::load(FGRunwayPreference* p) {
|
||||
|
|
Loading…
Add table
Reference in a new issue