diff options
Diffstat (limited to 'parameter/ConfigurableDomains.cpp')
-rw-r--r-- | parameter/ConfigurableDomains.cpp | 115 |
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 { |