Skip to content

v0.2.54..v0.2.55 changeset OsmXmlChangesetFileWriter.cpp

Garret Voltz edited this page Aug 14, 2020 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/io/OsmXmlChangesetFileWriter.cpp b/hoot-core/src/main/cpp/hoot/core/io/OsmXmlChangesetFileWriter.cpp
index 6dfc4b4..4fdac34 100644
--- a/hoot-core/src/main/cpp/hoot/core/io/OsmXmlChangesetFileWriter.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/io/OsmXmlChangesetFileWriter.cpp
@@ -30,7 +30,7 @@
 #include <hoot/core/io/OsmXmlWriter.h>
 #include <hoot/core/util/ConfigOptions.h>
 #include <hoot/core/schema/MetadataTags.h>
-#include <hoot/core/elements/OsmUtils.h>
+#include <hoot/core/util/DateTimeUtils.h>
 #include <hoot/core/util/Log.h>
 #include <hoot/core/util/Factory.h>
 
@@ -52,6 +52,11 @@ _addTimestamp(ConfigOptions().getChangesetXmlWriterAddTimestamp()),
 _includeDebugTags(ConfigOptions().getWriterIncludeDebugTags()),
 _includeCircularErrorTags(ConfigOptions().getWriterIncludeCircularErrorTags())
 {
+}
+
+void OsmXmlChangesetFileWriter::_initStats()
+{
+  _stats.clear();
   _stats.resize(Change::Unknown, ElementType::Unknown);
   vector<QString> rows({"Create", "Modify", "Delete"});
   vector<QString> columns({"Node", "Way", "Relation"});
@@ -87,6 +92,7 @@ void OsmXmlChangesetFileWriter::write(const QString& path,
   QString filepath = path;
 
   _initIdCounters();
+  _initStats();
   _parsedChanges.clear();
 
   long changesetProgress = 1;
@@ -209,7 +215,8 @@ void OsmXmlChangesetFileWriter::write(const QString& path,
   LOG_DEBUG("Changeset written to: " << path << "...");
 }
 
-void OsmXmlChangesetFileWriter::_writeNode(QXmlStreamWriter& writer, ConstElementPtr node, ConstElementPtr previous)
+void OsmXmlChangesetFileWriter::_writeNode(QXmlStreamWriter& writer, ConstElementPtr node,
+                                           ConstElementPtr previous)
 {
   ConstNodePtr n = dynamic_pointer_cast<const Node>(node);
   ConstNodePtr pn = dynamic_pointer_cast<const Node>(previous);
@@ -255,7 +262,7 @@ void OsmXmlChangesetFileWriter::_writeNode(QXmlStreamWriter& writer, ConstElemen
   if (_addTimestamp)
   {
     if (n->getTimestamp() != 0)
-      writer.writeAttribute("timestamp", OsmUtils::toTimeString(n->getTimestamp()));
+      writer.writeAttribute("timestamp", DateTimeUtils::toTimeString(n->getTimestamp()));
     else
       writer.writeAttribute("timestamp", "");
   }
@@ -266,7 +273,8 @@ void OsmXmlChangesetFileWriter::_writeNode(QXmlStreamWriter& writer, ConstElemen
   writer.writeEndElement();
 }
 
-void OsmXmlChangesetFileWriter::_writeWay(QXmlStreamWriter& writer, ConstElementPtr way, ConstElementPtr previous)
+void OsmXmlChangesetFileWriter::_writeWay(QXmlStreamWriter& writer, ConstElementPtr way,
+                                          ConstElementPtr previous)
 {
   ConstWayPtr w = dynamic_pointer_cast<const Way>(way);
   ConstWayPtr pw = dynamic_pointer_cast<const Way>(previous);
@@ -307,7 +315,7 @@ void OsmXmlChangesetFileWriter::_writeWay(QXmlStreamWriter& writer, ConstElement
   if (_addTimestamp)
   {
     if (w->getTimestamp() != 0)
-      writer.writeAttribute("timestamp", OsmUtils::toTimeString(w->getTimestamp()));
+      writer.writeAttribute("timestamp", DateTimeUtils::toTimeString(w->getTimestamp()));
     else
       writer.writeAttribute("timestamp", "");
   }
@@ -334,7 +342,8 @@ void OsmXmlChangesetFileWriter::_writeWay(QXmlStreamWriter& writer, ConstElement
   writer.writeEndElement();
 }
 
-void OsmXmlChangesetFileWriter::_writeRelation(QXmlStreamWriter& writer, ConstElementPtr relation, ConstElementPtr previous)
+void OsmXmlChangesetFileWriter::_writeRelation(QXmlStreamWriter& writer, ConstElementPtr relation,
+                                               ConstElementPtr previous)
 {
   ConstRelationPtr r = dynamic_pointer_cast<const Relation>(relation);
   ConstRelationPtr pr = dynamic_pointer_cast<const Relation>(previous);
@@ -375,7 +384,7 @@ void OsmXmlChangesetFileWriter::_writeRelation(QXmlStreamWriter& writer, ConstEl
   if (_addTimestamp)
   {
     if (r->getTimestamp() != 0)
-      writer.writeAttribute("timestamp", OsmUtils::toTimeString(r->getTimestamp()));
+      writer.writeAttribute("timestamp", DateTimeUtils::toTimeString(r->getTimestamp()));
     else
       writer.writeAttribute("timestamp", "");
   }
@@ -448,8 +457,8 @@ void OsmXmlChangesetFileWriter::_writeTags(QXmlStreamWriter& writer, Tags& tags,
     const QString val = it.value();
     if (key.isEmpty() == false && val.isEmpty() == false)
     {
-      //  Ignore 'hoot:hash' for nodes
-      if (key == MetadataTags::HootHash() && element->getElementType() == ElementType::Node)
+      // always ignore 'hoot:hash'
+      if (key == MetadataTags::HootHash())
         continue;
       else if (!_includeDebugTags && key.toLower().startsWith("hoot:"))
         continue;
@@ -476,4 +485,18 @@ void OsmXmlChangesetFileWriter::_writeTags(QXmlStreamWriter& writer, Tags& tags,
   }
 }
 
+QString OsmXmlChangesetFileWriter::getStatsTable(const ChangesetStatsFormat& format) const
+{
+  switch (format.getEnum())
+  {
+    case ChangesetStatsFormat::Text:
+      return _stats.toTableString();
+    case ChangesetStatsFormat::Json:
+      return _stats.toJsonString();
+      break;
+    default:
+      return "";
+  }
+}
+
 }
Clone this wiki locally