Skip to content

v0.2.48..v0.2.49 changeset TagContainsCriterion.cpp

Garret Voltz edited this page Oct 2, 2019 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/criterion/TagContainsCriterion.cpp b/hoot-core/src/main/cpp/hoot/core/criterion/TagContainsCriterion.cpp
index 2c899d2..f60faab 100644
--- a/hoot-core/src/main/cpp/hoot/core/criterion/TagContainsCriterion.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/criterion/TagContainsCriterion.cpp
@@ -22,7 +22,7 @@
  * This will properly maintain the copyright information. DigitalGlobe
  * copyrights will be updated automatically.
  *
- * @copyright Copyright (C) 2018 DigitalGlobe (http://www.digitalglobe.com/)
+ * @copyright Copyright (C) 2018, 2019 DigitalGlobe (http://www.digitalglobe.com/)
  */
 
 #include "TagContainsCriterion.h"
@@ -39,34 +39,72 @@ HOOT_FACTORY_REGISTER(ElementCriterion, TagContainsCriterion)
 
 TagContainsCriterion::TagContainsCriterion(QString key, QString valueSubstring)
 {
-  _key.append(key);
-  _valueSubstring.append(valueSubstring);
+  _keys.append(key);
+  _valueSubstrings.append(valueSubstring);
 }
 
 TagContainsCriterion::TagContainsCriterion(QStringList keys, QStringList valueSubstrings) :
-_key(keys),
-_valueSubstring(valueSubstrings)
+_keys(keys),
+_valueSubstrings(valueSubstrings)
 {
 }
 
+void TagContainsCriterion::setConfiguration(const Settings &s)
+{
+  ConfigOptions config = ConfigOptions(s);
+  setKvps(config.getTagContainsCriterionKvps());
+}
+
+void TagContainsCriterion::setKvps(const QStringList kvps)
+{
+  for (int i = 0; i < kvps.size(); i++)
+  {
+    const QString kvp = kvps.at(i);
+    const QStringList kvpParts = kvp.split("=");
+    if (kvpParts.size() != 2)
+    {
+      throw IllegalArgumentException("Invalid TagCriterion KVP: " + kvp);
+    }
+    addPair(kvpParts.at(0), kvpParts.at(1));
+  }
+}
+
 bool TagContainsCriterion::isSatisfied(const ConstElementPtr& e) const
 {
+  if (_keys.size() == 0 || _valueSubstrings.size() == 0)
+  {
+    throw IllegalArgumentException(
+      "No tag keys or values specified for: " + QString::fromStdString(className()));
+  }
+
+  LOG_VART(e);
   bool matches = false;
-  for (int i = 0; i < _key.size(); i++)
+  for (int i = 0; i < _keys.size(); i++)
   {
-    if (e->getTags().contains(_key[i]) && e->getTags()[_key[i]].contains(_valueSubstring[i]))
+    if (e->getTags().contains(_keys[i]) && e->getTags()[_keys[i]].contains(_valueSubstrings[i]))
     {
       matches = true;
       break;  //  Only one match is required
     }
   }
+  if (matches)
+  {
+    LOG_TRACE("crit satisfied");
+  }
   return matches;
 }
 
 void TagContainsCriterion::addPair(QString key, QString valueSubstring)
 {
-  _key.append(key);
-  _valueSubstring.append(valueSubstring);
+  _keys.append(key);
+  _valueSubstrings.append(valueSubstring);
+}
+
+QString TagContainsCriterion::toString() const
+{
+  return
+    QString::fromStdString(className()).remove("hoot::") + ":keys:" + _keys.join(",") + ":vals:" +
+    _valueSubstrings.join(",");
 }
 
 }
Clone this wiki locally