summaryrefslogtreecommitdiffstats
path: root/parameter/DomainConfiguration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parameter/DomainConfiguration.cpp')
-rw-r--r--parameter/DomainConfiguration.cpp75
1 files changed, 69 insertions, 6 deletions
diff --git a/parameter/DomainConfiguration.cpp b/parameter/DomainConfiguration.cpp
index b30c8e3..f746be9 100644
--- a/parameter/DomainConfiguration.cpp
+++ b/parameter/DomainConfiguration.cpp
@@ -36,6 +36,7 @@
#include "XmlDomainSerializingContext.h"
#include "ConfigurationAccessContext.h"
#include <assert.h>
+#include "RuleParser.h"
#define base CBinarySerializableElement
@@ -282,6 +283,47 @@ void CDomainConfiguration::getElementSequence(string& strResult) const
}
}
+// Application rule
+bool CDomainConfiguration::setApplicationRule(const string& strApplicationRule, const CSelectionCriteriaDefinition* pSelectionCriteriaDefinition, string& strError)
+{
+ // Parser
+ CRuleParser ruleParser(strApplicationRule, pSelectionCriteriaDefinition);
+
+ // Attempt to parse it
+ if (!ruleParser.parse(NULL, strError)) {
+
+ return false;
+ }
+ // Replace compound rule
+ setRule(ruleParser.grabRootRule());
+
+ return true;
+}
+
+void CDomainConfiguration::clearApplicationRule()
+{
+ // Replace compound rule
+ setRule(NULL);
+}
+
+void CDomainConfiguration::getApplicationRule(string& strResult) const
+{
+ // Rule
+ const CCompoundRule* pRule = getRule();
+
+ if (pRule) {
+ // Start clear
+ strResult.clear();
+
+ // Dump rule
+ pRule->dump(strResult);
+
+ } else {
+
+ strResult = "<none>";
+ }
+}
+
// Save data from current
void CDomainConfiguration::save(const CParameterBlackboard* pMainBlackboard)
{
@@ -518,12 +560,6 @@ CAreaConfiguration* CDomainConfiguration::getAreaConfiguration(uint32_t uiAreaCo
return NULL;
}
-// Presence of application condition
-bool CDomainConfiguration::hasRule() const
-{
- return !!getRule();
-}
-
// Rule
const CCompoundRule* CDomainConfiguration::getRule() const
{
@@ -534,6 +570,33 @@ const CCompoundRule* CDomainConfiguration::getRule() const
return NULL;
}
+CCompoundRule* CDomainConfiguration::getRule()
+{
+ if (getNbChildren()) {
+ // Rule created
+ return static_cast<CCompoundRule*>(getChild(ECompoundRule));
+ }
+ return NULL;
+}
+
+void CDomainConfiguration::setRule(CCompoundRule* pRule)
+{
+ CCompoundRule* pOldRule = getRule();
+
+ if (pOldRule) {
+ // Remove previous rule
+ removeChild(pOldRule);
+
+ delete pOldRule;
+ }
+
+ // Set new one
+ if (pRule) {
+ // Chain
+ addChild(pRule);
+ }
+}
+
// Serialization
void CDomainConfiguration::binarySerialize(CBinaryStream& binaryStream)
{