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(",");
}
}