summaryrefslogtreecommitdiffstats
path: root/parameter/ConfigurableDomains.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parameter/ConfigurableDomains.cpp')
-rw-r--r--parameter/ConfigurableDomains.cpp115
1 files changed, 111 insertions, 4 deletions
diff --git a/parameter/ConfigurableDomains.cpp b/parameter/ConfigurableDomains.cpp
index fa794b3..c65bf3f 100644
--- a/parameter/ConfigurableDomains.cpp
+++ b/parameter/ConfigurableDomains.cpp
@@ -66,7 +66,7 @@ void CConfigurableDomains::validate(const CParameterBlackboard* pMainBlackboard)
}
// Configuration application if required
-bool CConfigurableDomains::apply(CParameterBlackboard* pParameterBlackboard, bool bForce, string& strError)
+bool CConfigurableDomains::apply(CParameterBlackboard* pParameterBlackboard, bool bForce, string& strError) const
{
CAutoLog autoLog(this, "Applying configurations");
@@ -74,17 +74,38 @@ bool CConfigurableDomains::apply(CParameterBlackboard* pParameterBlackboard, boo
CSyncerSet syncerSet;
// Delegate to domains
+
+ // Start with sequence unaware domains
uint32_t uiChild;
uint32_t uiNbConfigurableDomains = getNbChildren();
for (uiChild = 0; uiChild < uiNbConfigurableDomains; uiChild++) {
- CConfigurableDomain* pChildConfigurableDomain = static_cast<CConfigurableDomain*>(getChild(uiChild));
+ const CConfigurableDomain* pChildConfigurableDomain = static_cast<const CConfigurableDomain*>(getChild(uiChild));
- pChildConfigurableDomain->apply(pParameterBlackboard, syncerSet, bForce);
+ if (!pChildConfigurableDomain->getSequenceAwareness() && !pChildConfigurableDomain->apply(pParameterBlackboard, syncerSet, bForce, strError)) {
+
+ return false;
+ }
}
// Synchronize
- return syncerSet.sync(*pParameterBlackboard, false, strError);
+ if (!syncerSet.sync(*pParameterBlackboard, false, strError)) {
+
+ return false;
+ }
+
+ // Then deal with sequence aware domains
+ for (uiChild = 0; uiChild < uiNbConfigurableDomains; uiChild++) {
+
+ const CConfigurableDomain* pChildConfigurableDomain = static_cast<const CConfigurableDomain*>(getChild(uiChild));
+
+ if (pChildConfigurableDomain->getSequenceAwareness() && !pChildConfigurableDomain->apply(pParameterBlackboard, syncerSet, bForce, strError)) {
+
+ return false;
+ }
+ }
+
+ return true;
}
// From IXmlSource
@@ -163,6 +184,38 @@ bool CConfigurableDomains::renameDomain(const string& strName, const string& str
return pConfigurableDomain->rename(strNewName, strError);
}
+bool CConfigurableDomains::setSequenceAwareness(const string& strDomain, bool bSequenceAware, string& strError)
+{
+ CConfigurableDomain* pConfigurableDomain = static_cast<CConfigurableDomain*>(findChild(strDomain));
+
+ if (!pConfigurableDomain) {
+
+ strError = "Configurable domain not found";
+
+ return false;
+ }
+
+ pConfigurableDomain->setSequenceAwareness(bSequenceAware);
+
+ return true;
+}
+
+bool CConfigurableDomains::getSequenceAwareness(const string& strDomain, bool& bSequenceAware, string& strError) const
+{
+ const CConfigurableDomain* pConfigurableDomain = static_cast<const CConfigurableDomain*>(findChild(strDomain));
+
+ if (!pConfigurableDomain) {
+
+ strError = "Configurable domain not found";
+
+ return false;
+ }
+
+ bSequenceAware = pConfigurableDomain->getSequenceAwareness();
+
+ return true;
+}
+
/// Configurations
bool CConfigurableDomains::listConfigurations(const string& strDomain, string& strResult) const
{
@@ -310,6 +363,29 @@ void CConfigurableDomains::listConflictingElements(string& strResult) const
}
}
+void CConfigurableDomains::listDomains(string& strResult) const
+{
+ strResult = "\n";
+
+ // List domains
+ uint32_t uiChild;
+ uint32_t uiNbConfigurableDomains = getNbChildren();
+
+ for (uiChild = 0; uiChild < uiNbConfigurableDomains; uiChild++) {
+
+ const CConfigurableDomain* pChildConfigurableDomain = static_cast<const CConfigurableDomain*>(getChild(uiChild));
+
+ // Name
+ strResult += pChildConfigurableDomain->getName();
+
+ // Sequence awareness
+ if (pChildConfigurableDomain->getSequenceAwareness()) {
+
+ strResult += " [sequence aware]\n";
+ }
+ }
+}
+
// Gather configurable elements owned by any domain
void CConfigurableDomains::gatherAllOwnedConfigurableElements(set<const CConfigurableElement*>& configurableElementSet) const
{
@@ -357,6 +433,37 @@ bool CConfigurableDomains::saveConfiguration(const string& strDomain, const stri
return pConfigurableDomain->saveConfiguration(strConfiguration, pMainBlackboard, strError);
}
+bool CConfigurableDomains::setElementSequence(const string& strDomain, const string& strConfiguration, const vector<string>& astrNewElementSequence, string& strError)
+{
+ // Find domain
+ CConfigurableDomain* pConfigurableDomain = static_cast<CConfigurableDomain*>(findChild(strDomain));
+
+ if (!pConfigurableDomain) {
+
+ strError = "Configurable domain " + strDomain + " not found";
+
+ return false;
+ }
+
+ // Delegate to domain
+ return pConfigurableDomain->setElementSequence(strConfiguration, astrNewElementSequence, strError);
+}
+
+bool CConfigurableDomains::getElementSequence(const string& strDomain, const string& strConfiguration, string& strResult) const
+{
+ // Find domain
+ const CConfigurableDomain* pConfigurableDomain = static_cast<const CConfigurableDomain*>(findChild(strDomain));
+
+ if (!pConfigurableDomain) {
+
+ strResult = "Configurable domain " + strDomain + " not found";
+
+ return false;
+ }
+ // Delegate to domain
+ return pConfigurableDomain->getElementSequence(strConfiguration, strResult);
+}
+
// Last applied configurations
void CConfigurableDomains::listLastAppliedConfigurations(string& strResult) const
{