Skip to content

v0.2.50..v0.2.51 changeset OsmXmlReader.cpp

Garret Voltz edited this page Jan 15, 2020 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp b/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp
index c6dd4ba..5b7f2ab 100644
--- a/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/io/OsmXmlReader.cpp
@@ -95,7 +95,8 @@ void OsmXmlReader::setConfiguration(const Settings& conf)
   setStatusUpdateInterval(configOptions.getTaskStatusUpdateInterval() * 10);
   setBounds(GeometryUtils::envelopeFromConfigString(configOptions.getConvertBoundingBox()));
   setKeepImmediatelyConnectedWaysOutsideBounds(
-    ConfigOptions().getConvertBoundingBoxKeepImmediatelyConnectedWaysOutsideBounds());
+    configOptions.getConvertBoundingBoxKeepImmediatelyConnectedWaysOutsideBounds());
+  setWarnOnVersionZeroElement(configOptions.getReaderWarnOnZeroVersionElement());
 }
 
 void OsmXmlReader::_parseTimeStamp(const QXmlAttributes &attributes)
@@ -169,6 +170,19 @@ void OsmXmlReader::_createNode(const QXmlAttributes& attributes)
   {
     uid = _parseDouble(attributes.value("uid"));
   }
+  LOG_VART(version);
+  if (_warnOnVersionZeroElement && version == 0)
+  {
+    if (logWarnCount < Log::getWarnMessageLimit())
+    {
+      LOG_WARN("Element with version = 0: " << ElementId(ElementType::Node, newId));
+    }
+    else if (logWarnCount == Log::getWarnMessageLimit())
+    {
+      LOG_WARN(className() << ": " << Log::LOG_WARN_LIMIT_REACHED_MESSAGE);
+    }
+    logWarnCount++;
+  }
 
   _element =
     Node::newSp(
@@ -238,6 +252,19 @@ void OsmXmlReader::_createWay(const QXmlAttributes& attributes)
   {
     uid = _parseDouble(attributes.value("uid"));
   }
+  LOG_VART(version);
+  if (_warnOnVersionZeroElement && version == 0)
+  {
+    if (logWarnCount < Log::getWarnMessageLimit())
+    {
+      LOG_WARN("Element with version = 0: " << ElementId(ElementType::Way, newId));
+    }
+    else if (logWarnCount == Log::getWarnMessageLimit())
+    {
+      LOG_WARN(className() << ": " << Log::LOG_WARN_LIMIT_REACHED_MESSAGE);
+    }
+    logWarnCount++;
+  }
 
   _element.reset(
     new Way(_status, newId, _defaultCircularError, changeset, version, timestamp, user, uid));
@@ -294,6 +321,19 @@ void OsmXmlReader::_createRelation(const QXmlAttributes& attributes)
   {
     uid = _parseDouble(attributes.value("uid"));
   }
+  LOG_VART(version);
+  if (_warnOnVersionZeroElement && version == 0)
+  {
+    if (logWarnCount < Log::getWarnMessageLimit())
+    {
+      LOG_WARN("Element with version = 0: " << ElementId(ElementType::Relation, newId));
+    }
+    else if (logWarnCount == Log::getWarnMessageLimit())
+    {
+      LOG_WARN(className() << ": " << Log::LOG_WARN_LIMIT_REACHED_MESSAGE);
+    }
+    logWarnCount++;
+  }
 
   _element.reset(
     new Relation(
@@ -407,6 +447,7 @@ void OsmXmlReader::read(const OsmMapPtr& map)
     LOG_VARD(StringUtils::formatLargeNumber(_map->getElementCount()));
   }
 
+  // Should we be using RemoveMissingElementsVisitor here instead?
   ReportMissingElementsVisitor visitor;
   LOG_INFO("\t" << visitor.getInitStatusMessage());
   _map->visitRw(visitor);
@@ -540,8 +581,8 @@ bool OsmXmlReader::startElement(const QString& /*namespaceURI*/, const QString&
           if (logWarnCount < Log::getWarnMessageLimit())
           {
             LOG_WARN(
-              "Missing " << ElementId(ElementType::Node, ref) << " in " <<
-              ElementId(ElementType::Way, _wayId) << ".");
+              "Skipping missing " << ElementId(ElementType::Node, ref) << " in " <<
+              ElementId(ElementType::Way, _wayId) << "...");
           }
           else if (logWarnCount == Log::getWarnMessageLimit())
           {
@@ -582,8 +623,8 @@ bool OsmXmlReader::startElement(const QString& /*namespaceURI*/, const QString&
             if (logWarnCount < Log::getWarnMessageLimit())
             {
               LOG_WARN(
-                "Missing " << ElementId(ElementType::Node, ref) << " in " <<
-                ElementId(ElementType::Relation, _relationId) << ".");
+                "Skipping missing " << ElementId(ElementType::Node, ref) << " in " <<
+                ElementId(ElementType::Relation, _relationId) << "...");
             }
             else if (logWarnCount == Log::getWarnMessageLimit())
             {
@@ -615,8 +656,8 @@ bool OsmXmlReader::startElement(const QString& /*namespaceURI*/, const QString&
             if (logWarnCount < Log::getWarnMessageLimit())
             {
               LOG_WARN(
-                "Missing " << ElementId(ElementType::Way, ref) << " in " <<
-                ElementId(ElementType::Relation, _relationId) << ".");
+                "Skipping missing " << ElementId(ElementType::Way, ref) << " in " <<
+                ElementId(ElementType::Relation, _relationId) << "...");
             }
             else if (logWarnCount == Log::getWarnMessageLimit())
             {
Clone this wiki locally