-
Notifications
You must be signed in to change notification settings - Fork 74
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]);
}
}