Skip to content

v0.2.52..v0.2.53 changeset RemoveDuplicateReviewsOp.cpp

Garret Voltz edited this page Feb 12, 2020 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/ops/RemoveDuplicateReviewsOp.cpp b/hoot-core/src/main/cpp/hoot/core/ops/RemoveDuplicateReviewsOp.cpp
index 638f2a0..ec21852 100644
--- a/hoot-core/src/main/cpp/hoot/core/ops/RemoveDuplicateReviewsOp.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/ops/RemoveDuplicateReviewsOp.cpp
@@ -22,7 +22,7 @@
  * This will properly maintain the copyright information. DigitalGlobe
  * copyrights will be updated automatically.
  *
- * @copyright Copyright (C) 2015, 2017, 2018, 2019 DigitalGlobe (http://www.digitalglobe.com/)
+ * @copyright Copyright (C) 2015, 2017, 2018, 2019, 2020 DigitalGlobe (http://www.digitalglobe.com/)
  */
 #include "RemoveDuplicateReviewsOp.h"
 
@@ -34,6 +34,7 @@
 #include <hoot/core/ops/CopyMapSubsetOp.h>
 #include <hoot/core/util/Factory.h>
 #include <hoot/core/util/Log.h>
+#include <hoot/core/util/StringUtils.h>
 
 using namespace std;
 
@@ -42,7 +43,8 @@ namespace hoot
 
 HOOT_FACTORY_REGISTER(OsmMapOperation, RemoveDuplicateReviewsOp)
 
-RemoveDuplicateReviewsOp::RemoveDuplicateReviewsOp()
+RemoveDuplicateReviewsOp::RemoveDuplicateReviewsOp() :
+_taskStatusUpdateInterval(ConfigOptions().getTaskStatusUpdateInterval())
 {
 }
 
@@ -52,6 +54,9 @@ void RemoveDuplicateReviewsOp::apply(std::shared_ptr<OsmMap>& map)
   _map = map;
 
   // go through all the relations to get duplicate reviews
+  LOG_DEBUG("Retrieving duplicate reviews...");
+
+  int totalMembersToReview = 0;
   const RelationMap& relations = map->getRelations();
   QMap<set<ElementId>, QList<ReviewMarker::ReviewUid>> membersToReview;
   for (RelationMap::const_iterator it = relations.begin(); it != relations.end(); ++it)
@@ -60,24 +65,29 @@ void RemoveDuplicateReviewsOp::apply(std::shared_ptr<OsmMap>& map)
     if (ReviewMarker::isReviewUid(map, eid))
     {
       membersToReview[ReviewMarker::getReviewElements(map, eid)].append(eid);
+      totalMembersToReview++;
     }
   }
+  LOG_VARD(membersToReview.size());
+  LOG_VARD(totalMembersToReview);
   LOG_VART(membersToReview);
 
-  //loop through duplicate reviews
+  // loop through duplicate reviews
+  LOG_DEBUG("Removing duplicate reviews...");
+  LOG_VARD(MatchFactory::getInstance().getCreatorsStr());
+
   ReviewMarker reviewMarker;
   QMap<set<ElementId>, QList<ReviewMarker::ReviewUid>>::iterator it = membersToReview.begin();
   while (it != membersToReview.end())
   {
     set<ElementId> eids = it.key();
 
-    //remove duplicate reviews
     QList<ReviewMarker::ReviewUid> duplicateReviews = it.value();
 
     LOG_VART(eids.size());
     LOG_VART(duplicateReviews.size());
 
-    //Only remove reviews and process if there is more than one review
+    // Only remove reviews and process if there is more than one review
     // See discussion here: https://github.com/ngageoint/hootenanny/issues/81#issuecomment-162980656
     if (eids.size() == 2 && duplicateReviews.size() > 1)
     {
@@ -94,8 +104,13 @@ void RemoveDuplicateReviewsOp::apply(std::shared_ptr<OsmMap>& map)
       CopyMapSubsetOp(map, beid, eeid).apply(copy);
       copy->getElement(beid)->setStatus(Status::Unknown1);
       copy->getElement(eeid)->setStatus(Status::Unknown2);
+      LOG_VART(copy->size());
 
       MatchPtr match = MatchFactory::getInstance().createMatch(copy, beid, eeid);
+      if (match)
+      {
+        LOG_VART(match);
+      }
       if (match && match->getType() != MatchType::Miss)
       {
         QString explain = match->explain();
@@ -110,11 +125,21 @@ void RemoveDuplicateReviewsOp::apply(std::shared_ptr<OsmMap>& map)
             explain = "Multiple overlapping high confidence reviews: " + explain;
           }
         }
-        reviewMarker.mark(map, map->getElement(beid), map->getElement(eeid),
+        reviewMarker.mark(
+          map, map->getElement(beid), map->getElement(eeid),
           explain, match->getMatchName(), match->getClassification().getReviewP());
       }
     }
     ++it;
+    _numProcessed += duplicateReviews.size();
+
+    if (_numProcessed % (_taskStatusUpdateInterval /  10) == 0)
+    {
+      PROGRESS_INFO(
+        "Processed " << StringUtils::formatLargeNumber(_numProcessed) <<
+        " members with reviews / " << StringUtils::formatLargeNumber(totalMembersToReview) <<
+        " total members.");
+    }
   }
 }
 
Clone this wiki locally