Skip to content

v0.2.48..v0.2.49 changeset SetTagValueVisitor.cpp

Garret Voltz edited this page Oct 2, 2019 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/visitors/SetTagValueVisitor.cpp b/hoot-core/src/main/cpp/hoot/core/visitors/SetTagValueVisitor.cpp
index 291319c..1b37efd 100644
--- a/hoot-core/src/main/cpp/hoot/core/visitors/SetTagValueVisitor.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/visitors/SetTagValueVisitor.cpp
@@ -32,26 +32,27 @@
 #include <hoot/core/util/ConfigOptions.h>
 #include <hoot/core/util/Log.h>
 #include <hoot/core/schema/MetadataTags.h>
-#include <hoot/core/criterion/NotCriterion.h>
 
 namespace hoot
 {
 
 HOOT_FACTORY_REGISTER(ElementVisitor, SetTagValueVisitor)
 
-SetTagValueVisitor::SetTagValueVisitor()
+SetTagValueVisitor::SetTagValueVisitor() :
+_appendToExistingValue(false),
+_overwriteExistingTag(false)
 {
   setConfiguration(conf());
 }
 
-SetTagValueVisitor::SetTagValueVisitor(const QStringList& keys, const QStringList& values,
-                                       bool appendToExistingValue, const QString& criterionName,
-                                       const bool overwriteExistingTag, const bool negateCriterion) :
+SetTagValueVisitor::SetTagValueVisitor(
+  const QStringList& keys, const QStringList& values, bool appendToExistingValue,
+  const QStringList& criteriaClassNames, const bool overwriteExistingTag,
+  const bool negateCriteria) :
 _keys(keys),
 _vals(values),
 _appendToExistingValue(appendToExistingValue),
-_overwriteExistingTag(overwriteExistingTag),
-_negateCriterion(negateCriterion)
+_overwriteExistingTag(overwriteExistingTag)
 {
   if (_keys.size() != _vals.size())
   {
@@ -60,24 +61,30 @@ _negateCriterion(negateCriterion)
       QString::number(_keys.size()) + ", values size: " + QString::number(_vals.size()));
   }
 
-  _setCriterion(criterionName);
+  _negateCriteria = negateCriteria;
+  _chainCriteria = false;
+  _addCriteria(criteriaClassNames);
 }
 
-SetTagValueVisitor::SetTagValueVisitor(const QString& key, const QString& value,
-                                       bool appendToExistingValue, const QString& criterionName,
-                                       const bool overwriteExistingTag, const bool negateCriterion) :
+SetTagValueVisitor::SetTagValueVisitor(
+  const QString& key, const QString& value, bool appendToExistingValue,
+  const QStringList& criteriaClassNames, const bool overwriteExistingTag,
+  const bool negateCriteria) :
 _appendToExistingValue(appendToExistingValue),
-_overwriteExistingTag(overwriteExistingTag),
-_negateCriterion(negateCriterion)
+_overwriteExistingTag(overwriteExistingTag)
 {
   _keys.append(key);
   _vals.append(value);
-  _setCriterion(criterionName);
+
+  _negateCriteria = negateCriteria;
+  _chainCriteria = false;
+  _addCriteria(criteriaClassNames);
 }
 
 void SetTagValueVisitor::setConfiguration(const Settings& conf)
 {
   ConfigOptions configOptions(conf);
+
   _keys = configOptions.getSetTagValueVisitorKeys();
   _vals = configOptions.getSetTagValueVisitorValues();
   if (_keys.size() != _vals.size())
@@ -88,34 +95,28 @@ void SetTagValueVisitor::setConfiguration(const Settings& conf)
   }
   _appendToExistingValue = configOptions.getSetTagValueVisitorAppendToExistingValue();
   _overwriteExistingTag = configOptions.getSetTagValueVisitorOverwrite();
-  _negateCriterion = configOptions.getElementCriterionNegate();
-  _setCriterion(configOptions.getSetTagValueVisitorElementCriterion());
-}
-
-void SetTagValueVisitor::addCriterion(const ElementCriterionPtr& e)
-{
-  if (!_negateCriterion)
-  {
-    _criterion = e;
-  }
-  else
-  {
-    _criterion.reset(new NotCriterion(e));
-  }
-}
 
-void SetTagValueVisitor::_setCriterion(const QString& criterionName)
-{
-  if (!criterionName.trimmed().isEmpty())
+  _negateCriteria = configOptions.getElementCriterionNegate();
+  _chainCriteria = configOptions.getSetTagValueVisitorChainElementCriteria();
+  const QStringList critNames = configOptions.getSetTagValueVisitorElementCriteria();
+  LOG_VART(critNames);
+  _addCriteria(critNames);
+  if (_configureChildren)
   {
-    LOG_VART(criterionName);
-    addCriterion(
-      std::shared_ptr<ElementCriterion>(
-        Factory::getInstance().constructObject<ElementCriterion>(criterionName.trimmed())));
+    for (std::vector<ElementCriterionPtr>::const_iterator it = _criteria.begin();
+         it != _criteria.end(); ++it)
+    {
+      ElementCriterionPtr crit = *it;
+      Configurable* c = dynamic_cast<Configurable*>(crit.get());
+      if (c != 0)
+      {
+        c->setConfiguration(conf);
+      }
+    }
   }
 }
 
-void SetTagValueVisitor::setTag(const ElementPtr& e, const QString& k, const QString& v)
+void SetTagValueVisitor::_setTag(const ElementPtr& e, const QString& k, const QString& v)
 {
   if (_keys.isEmpty())
   {
@@ -128,7 +129,7 @@ void SetTagValueVisitor::setTag(const ElementPtr& e, const QString& k, const QSt
 
   LOG_VART(e->getElementId());
 
-  if (_criterion.get() && !_criterion->isSatisfied(e))
+  if (_criteria.size() > 0 && !_criteriaSatisfied(e))
   {
     return;
   }
@@ -170,7 +171,7 @@ void SetTagValueVisitor::visit(const std::shared_ptr<Element>& e)
 {
   for (int i = 0; i < _keys.size(); i++)
   {
-    setTag(e, _keys[i], _vals[i]);
+    _setTag(e, _keys[i], _vals[i]);
   }
 }
 
Clone this wiki locally