1b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner/*
29368eea42a1afb01dd44110582f997115b50e742François Gaffie * Copyright (c) 2011-2016, Intel Corporation
3b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * All rights reserved.
4b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
5b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * Redistribution and use in source and binary forms, with or without modification,
6b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * are permitted provided that the following conditions are met:
7b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
8b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 1. Redistributions of source code must retain the above copyright notice, this
9b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * list of conditions and the following disclaimer.
10b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
11b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 2. Redistributions in binary form must reproduce the above copyright notice,
12b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * this list of conditions and the following disclaimer in the documentation and/or
13b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * other materials provided with the distribution.
14b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
15b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 3. Neither the name of the copyright holder nor the names of its contributors
16b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * may be used to endorse or promote products derived from this software without
17b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * specific prior written permission.
18b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
19b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2968a912857707864bbaaff9808717813105072a6ePatrick Benavoli */
3068a912857707864bbaaff9808717813105072a6ePatrick Benavoli#pragma once
3168a912857707864bbaaff9808717813105072a6ePatrick Benavoli
329368eea42a1afb01dd44110582f997115b50e742François Gaffie#include <mutex>
33ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard#include <map>
34ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard#include <vector>
3563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli#include "RemoteCommandHandlerTemplate.h"
3668a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "PathNavigator.h"
3768a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "SelectionCriterionType.h"
3868a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "SelectionCriterion.h"
3968a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "Element.h"
40326a31df0dd401283de6170ed09bcf605f61ef7dGeorges-Henri Baron#include "XmlDocSink.h"
41326a31df0dd401283de6170ed09bcf605f61ef7dGeorges-Henri Baron#include "XmlDocSource.h"
42a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi#include "XmlDomainExportContext.h"
439368eea42a1afb01dd44110582f997115b50e742François Gaffie#include "Results.h"
449368eea42a1afb01dd44110582f997115b50e742François Gaffie#include "ElementHandle.h"
459368eea42a1afb01dd44110582f997115b50e742François Gaffie#include <log/LogWrapper.h>
469368eea42a1afb01dd44110582f997115b50e742François Gaffie#include <log/Context.h>
4768a912857707864bbaaff9808717813105072a6ePatrick Benavoli
48a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi#include <istream>
499368eea42a1afb01dd44110582f997115b50e742François Gaffie#include <memory>
509368eea42a1afb01dd44110582f997115b50e742François Gaffie#include <ostream>
519368eea42a1afb01dd44110582f997115b50e742François Gaffie#include <string>
52592ae56e6f8bc22c57224eb0528dd80caffa70dePatrick Benavoli
5368a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CElementLibrarySet;
5468a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CSubsystemLibrary;
5568a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CSystemClass;
5668a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CSelectionCriteria;
5768a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CParameterFrameworkConfiguration;
5868a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CParameterBlackboard;
5968a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CConfigurableDomains;
6068a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass IRemoteProcessorServerInterface;
61065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoliclass CParameterHandle;
62a4ec15d5d5e84fbee3faa46a66e7b1eb90816ce2Guillaume Denneulinclass CSubsystemPlugins;
63e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnardclass CParameterAccessContext;
646cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnardclass CConfigurableElement;
6568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
6663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoliclass CParameterMgr : private CElement
6768a912857707864bbaaff9808717813105072a6ePatrick Benavoli{
689368eea42a1afb01dd44110582f997115b50e742François Gaffie    enum ChildElement
699368eea42a1afb01dd44110582f997115b50e742François Gaffie    {
7068a912857707864bbaaff9808717813105072a6ePatrick Benavoli        EFrameworkConfiguration,
7168a912857707864bbaaff9808717813105072a6ePatrick Benavoli        ESelectionCriteria,
7268a912857707864bbaaff9808717813105072a6ePatrick Benavoli        ESystemClass,
7368a912857707864bbaaff9808717813105072a6ePatrick Benavoli        EConfigurableDomains
7468a912857707864bbaaff9808717813105072a6ePatrick Benavoli    };
759368eea42a1afb01dd44110582f997115b50e742François Gaffie    enum ElementLibrary
769368eea42a1afb01dd44110582f997115b50e742François Gaffie    {
7768a912857707864bbaaff9808717813105072a6ePatrick Benavoli        EFrameworkConfigurationLibrary,
7868a912857707864bbaaff9808717813105072a6ePatrick Benavoli        EParameterCreationLibrary,
7968a912857707864bbaaff9808717813105072a6ePatrick Benavoli        EParameterConfigurationLibrary
8068a912857707864bbaaff9808717813105072a6ePatrick Benavoli    };
8168a912857707864bbaaff9808717813105072a6ePatrick Benavoli
82065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoli    // Parameter handle friendship
839368eea42a1afb01dd44110582f997115b50e742François Gaffie    friend class ElementHandle;
8468a912857707864bbaaff9808717813105072a6ePatrick Benavoli
859368eea42a1afb01dd44110582f997115b50e742François Gaffiepublic:
8668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Construction
879368eea42a1afb01dd44110582f997115b50e742François Gaffie    CParameterMgr(const std::string &strConfigurationFilePath, core::log::ILogger &logger);
8868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    virtual ~CParameterMgr();
8968a912857707864bbaaff9808717813105072a6ePatrick Benavoli
90ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    /** Load plugins, structures and settings from the config file given.
91ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      *
92d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve      * @param[out] strError is a std::string describing the error if an error occurred
93ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      *                      undefined otherwise.
94ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      *
95ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      * @return true if no error occurred, false otherwise.
96ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      */
979368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool load(std::string &strError);
989368eea42a1afb01dd44110582f997115b50e742François Gaffie
999368eea42a1afb01dd44110582f997115b50e742François Gaffie    // Remote command parsers
1009368eea42a1afb01dd44110582f997115b50e742François Gaffie    using CommandHandler = std::unique_ptr<TRemoteCommandHandlerTemplate<CParameterMgr>>;
1019368eea42a1afb01dd44110582f997115b50e742François Gaffie
1029368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Create and return a command handler for this ParameterMgr instance
1039368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
1049368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @returns a Command Handler
1059368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
1069368eea42a1afb01dd44110582f997115b50e742François Gaffie    CommandHandler createCommandHandler();
10768a912857707864bbaaff9808717813105072a6ePatrick Benavoli
10868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Selection Criteria
1099368eea42a1afb01dd44110582f997115b50e742François Gaffie    CSelectionCriterionType *createSelectionCriterionType(bool bIsInclusive);
1109368eea42a1afb01dd44110582f997115b50e742François Gaffie    CSelectionCriterion *createSelectionCriterion(
1119368eea42a1afb01dd44110582f997115b50e742François Gaffie        const std::string &strName, const CSelectionCriterionType *pSelectionCriterionType);
112b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli    // Selection criterion retrieval
1139368eea42a1afb01dd44110582f997115b50e742François Gaffie    CSelectionCriterion *getSelectionCriterion(const std::string &strName);
114b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli
115b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli    // Configuration application
116ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard    void applyConfigurations();
11768a912857707864bbaaff9808717813105072a6ePatrick Benavoli
1189368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** const version of getConfigurableElement */
1199368eea42a1afb01dd44110582f997115b50e742François Gaffie    const CConfigurableElement *getConfigurableElement(const std::string &strPath,
1209368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                       std::string &strError) const;
1219368eea42a1afb01dd44110582f997115b50e742François Gaffie
1229368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Returns the CConfigurableElement corresponding to the path given in argument.
1236cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     *
124d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve     * @param[in] strPath A std::string representing a path to an element.
1256cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     * @param[out] strError Error message
1266cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     *
1276cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     * @return A const pointer to the corresponding CConfigurableElement.
1286cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     * On error, NULL is returned and the error is explained in strError.
1296cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     */
1309368eea42a1afb01dd44110582f997115b50e742François Gaffie    CConfigurableElement *getConfigurableElement(const std::string &strPath, std::string &strError);
1314bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli    // Dynamic parameter handling
1329368eea42a1afb01dd44110582f997115b50e742François Gaffie    CParameterHandle *createParameterHandle(const std::string &strPath, std::string &strError);
1339368eea42a1afb01dd44110582f997115b50e742François Gaffie
1349368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Creates a handle to a configurable element.
1359368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
1369368eea42a1afb01dd44110582f997115b50e742François Gaffie     * The returned object is owned by the client who is responsible to delete it.
1379368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
1389368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] path A string representing a path to a configurable element.
1399368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[out] error On error: an human readable error message
1409368eea42a1afb01dd44110582f997115b50e742François Gaffie     *                   On success: undefined
1419368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
1429368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return An element handle on success
1439368eea42a1afb01dd44110582f997115b50e742François Gaffie     *         nullptr on error
1449368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
1459368eea42a1afb01dd44110582f997115b50e742François Gaffie    ElementHandle *createElementHandle(const std::string &path, std::string &error);
1464bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli
147962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner    /** Is the remote interface forcefully disabled ?
148962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner     */
149962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner    bool getForceNoRemoteInterface() const;
150962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner
151962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner    /**
152962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner     * Forcefully disable the remote interface or cancel this policy
153962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner     *
154962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner     * @param[in] bForceNoRemoteInterface disable the remote interface if true.
155962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner     */
156962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner    void setForceNoRemoteInterface(bool bForceNoRemoteInterface);
157962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner
158ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    /** Should start fail in case of missing subsystems.
159ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      *
160d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      * @param[in] bFail: If set to true,  parameterMgr start will fail on missing subsystems.
161d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      *                   If set to false, missing subsystems will fallback on virtual subsystem.
162ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      */
163ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    void setFailureOnMissingSubsystem(bool bFail);
164ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard
165ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    /** Would start fail in case of missing subsystems.
166ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      *
167ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      * @return true if the subsystem will fail on missing subsystem, false otherwise.
168ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      */
169ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    bool getFailureOnMissingSubsystem() const;
170ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard
171d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    /** Should start fail in failed settings load.
172d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      *
173d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      * @param[in] bFail: If set to true, parameterMgr start will fail on failed settings load.
174d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      *                   If set to false, failed settings load will be ignored.
175d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      */
176d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    void setFailureOnFailedSettingsLoad(bool bFail);
177d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    /** Would start fail in case of failed settings load.
178d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      *
179d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      * @return failure on failed settings load policy state.
180d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      */
1819368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool getFailureOnFailedSettingsLoad() const;
182d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard
1839368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Get the XML Schemas URI
184faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner     *
1859368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @returns the XML Schemas URI
186faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner     */
1879368eea42a1afb01dd44110582f997115b50e742François Gaffie    const std::string &getSchemaUri() const;
188faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner
1899368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Override the XML Schemas URI
190faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner     *
1919368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] schemaUri XML Schemas URI
192faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner     */
1939368eea42a1afb01dd44110582f997115b50e742François Gaffie    void setSchemaUri(const std::string &schemaUri);
194faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner
195cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    /** Should .xml files be validated on start ?
196cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     *
197cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     * @param[in] bValidate:
198cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     *     If set to true, parameterMgr will report an error
199cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     *         when being unable to validate .xml files
200cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     *     If set to false, no .xml/xsd validation will happen
201cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     *     (default behaviour)
202cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     *
203cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     * @return false if unable to set, true otherwise.
204cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     */
205cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    void setValidateSchemasOnStart(bool bValidate);
206cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek
207cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    /** Would .xml files be validated on start?
208cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     *
209cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     * @return areSchemasValidated
210cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     */
211cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    bool getValidateSchemasOnStart() const;
212cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek
21368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    //////////// Tuning /////////////
2149368eea42a1afb01dd44110582f997115b50e742François Gaffie    /**
2159368eea42a1afb01dd44110582f997115b50e742François Gaffie     * Activate / deactivate the tuning mode.
2169368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
2179368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] bOn true if tuning mode activation is requested, false for desactivation
2189368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[out] strError human readable error
2199368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return true if request is successful, false if the Parameter Manager is already in the mode
2209368eea42a1afb01dd44110582f997115b50e742François Gaffie     *         requested or in case of error.
2219368eea42a1afb01dd44110582f997115b50e742François Gaffie     *         If false, strError is set with the associated human readable error.
2229368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
2239368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool setTuningMode(bool bOn, std::string &strError);
22468a912857707864bbaaff9808717813105072a6ePatrick Benavoli    bool tuningModeOn() const;
22568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
22668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Current value space for user set/get value interpretation
22768a912857707864bbaaff9808717813105072a6ePatrick Benavoli    void setValueSpace(bool bIsRaw);
22868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    bool valueSpaceIsRaw();
22968a912857707864bbaaff9808717813105072a6ePatrick Benavoli
2306ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli    // Current Output Raw Format for user get value interpretation
2316ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli    void setOutputRawFormat(bool bIsHex);
2326ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli    bool outputRawFormatIsHex();
2336ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli
23468a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Automatic hardware synchronization control (during tuning session)
2359368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool setAutoSync(bool bAutoSyncOn, std::string &strError);
23668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    bool autoSyncOn() const;
2379368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool sync(std::string &strError);
23868a912857707864bbaaff9808717813105072a6ePatrick Benavoli
23968a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // User set/get parameters
2409368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool accessParameterValue(const std::string &strPath, std::string &strValue, bool bSet,
2419368eea42a1afb01dd44110582f997115b50e742François Gaffie                              std::string &strError);
2426cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard    /**
2436cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     * Returns the element mapping corresponding to the path given in parameter.
2446cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     *
2456cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     * @param[in] strPath Path of an element
2466cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     * @param[out] strValue A sting containing the mapping
2476cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     *
2486cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     * @return true if a mapping was found for this element
2496cae0ecf49ec7815aa59a4f4a0ec99976ca38032Frederic Boisnard     */
2509368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool getParameterMapping(const std::string &strPath, std::string &strValue) const;
2519368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool accessConfigurationValue(const std::string &strDomain, const std::string &stConfiguration,
2529368eea42a1afb01dd44110582f997115b50e742François Gaffie                                  const std::string &strPath, std::string &strValue, bool bSet,
2539368eea42a1afb01dd44110582f997115b50e742François Gaffie                                  std::string &strError);
25468a912857707864bbaaff9808717813105072a6ePatrick Benavoli
25568a912857707864bbaaff9808717813105072a6ePatrick Benavoli    ////////// Configuration/Domains handling //////////////
25668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Creation/Deletion
2579368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool createDomain(const std::string &strName, std::string &strError);
2589368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool renameDomain(const std::string &strName, const std::string &strNewName,
2599368eea42a1afb01dd44110582f997115b50e742François Gaffie                      std::string &strError);
2609368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool deleteDomain(const std::string &strName, std::string &strError);
2619368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool deleteAllDomains(std::string &strError);
2629368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool setSequenceAwareness(const std::string &strName, bool bSequenceAware,
2639368eea42a1afb01dd44110582f997115b50e742François Gaffie                              std::string &strResult);
2649368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool getSequenceAwareness(const std::string &strName, bool &bSequenceAware,
2659368eea42a1afb01dd44110582f997115b50e742François Gaffie                              std::string &strResult);
2669368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool createConfiguration(const std::string &strDomain, const std::string &strConfiguration,
2679368eea42a1afb01dd44110582f997115b50e742François Gaffie                             std::string &strError);
2689368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool deleteConfiguration(const std::string &strDomain, const std::string &strConfiguration,
2699368eea42a1afb01dd44110582f997115b50e742François Gaffie                             std::string &strError);
2709368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool renameConfiguration(const std::string &strDomain, const std::string &strConfiguration,
2719368eea42a1afb01dd44110582f997115b50e742François Gaffie                             const std::string &strNewConfiguration, std::string &strError);
2729368eea42a1afb01dd44110582f997115b50e742François Gaffie
2739368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Restore a configuration
2749368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
2759368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] strDomain the domain name
2769368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] strConfiguration the configuration name
2779368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[out] errors errors encountered during restoration
2789368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return true if success false otherwise
2799368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
2809368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool restoreConfiguration(const std::string &strDomain, const std::string &strConfiguration,
2819368eea42a1afb01dd44110582f997115b50e742François Gaffie                              core::Results &errors);
2829368eea42a1afb01dd44110582f997115b50e742François Gaffie
2839368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool saveConfiguration(const std::string &strDomain, const std::string &strConfiguration,
2849368eea42a1afb01dd44110582f997115b50e742François Gaffie                           std::string &strError);
28568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
28668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Configurable element - domain association
2879368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool addConfigurableElementToDomain(const std::string &strDomain,
2889368eea42a1afb01dd44110582f997115b50e742François Gaffie                                        const std::string &strConfigurableElementPath,
2899368eea42a1afb01dd44110582f997115b50e742François Gaffie                                        std::string &strError);
2909368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool removeConfigurableElementFromDomain(const std::string &strDomain,
2919368eea42a1afb01dd44110582f997115b50e742François Gaffie                                             const std::string &strConfigurableElementPath,
2929368eea42a1afb01dd44110582f997115b50e742François Gaffie                                             std::string &strError);
2939368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool split(const std::string &strDomain, const std::string &strConfigurableElementPath,
2949368eea42a1afb01dd44110582f997115b50e742François Gaffie               std::string &strError);
2959368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool setElementSequence(const std::string &strDomain, const std::string &strConfiguration,
2969368eea42a1afb01dd44110582f997115b50e742François Gaffie                            const std::vector<std::string> &astrNewElementSequence,
2979368eea42a1afb01dd44110582f997115b50e742François Gaffie                            std::string &strError);
2989368eea42a1afb01dd44110582f997115b50e742François Gaffie
2999368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool getApplicationRule(const std::string &strDomain, const std::string &strConfiguration,
3009368eea42a1afb01dd44110582f997115b50e742François Gaffie                            std::string &strResult);
3019368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool setApplicationRule(const std::string &strDomain, const std::string &strConfiguration,
3029368eea42a1afb01dd44110582f997115b50e742François Gaffie                            const std::string &strApplicationRule, std::string &strError);
3039368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool clearApplicationRule(const std::string &strDomain, const std::string &strConfiguration,
3049368eea42a1afb01dd44110582f997115b50e742François Gaffie                              std::string &strError);
30568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
306cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron    /**
307cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * Method that imports Configurable Domains from an Xml source.
308cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
309a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] xmlSource a std::string containing an xml description or a path to an xml file
310a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] withSettings a boolean that determines if the settings should be used in the
311cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * xml description
312a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] fromFile a boolean that determines if the source is an xml description in
313a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * xmlSource or contained in a file. In that case xmlSource is just the file path.
314a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[out] errorMsg is used as the error output
315cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
316cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * @return false if any error occures
317cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      */
3189368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool importDomainsXml(const std::string &xmlSource, bool withSettings, bool fromFile,
3199368eea42a1afb01dd44110582f997115b50e742François Gaffie                          std::string &errorMsg);
320cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron
321fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner    /**
322fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner      * Method that imports a single Configurable Domain from an Xml source.
323fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner      *
324a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] xmlSource a string containing an xml description or a path to an xml file
325a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] overwrite when importing an existing domain, allow
326a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * overwriting or return an error
327a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] withSettings a boolean that determines if the settings should be used in the
328fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner      * xml description
329a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] fromFile a boolean that determines if the source is an xml description in
330a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * xmlSource or contained in a file. In that case xmlSource is just the file path.
331a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[out] errorMsg is used as the error output
332fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner      *
333fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner      * @return false if any error occurs
334fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner      */
3359368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool importSingleDomainXml(const std::string &xmlSource, bool overwrite, bool withSettings,
3369368eea42a1afb01dd44110582f997115b50e742François Gaffie                               bool fromFile, std::string &errorMsg);
337fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner
338fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner    /**
339cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * Method that exports Configurable Domains to an Xml destination.
340cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
341a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in,out] xmlDest a string containing an xml description or a path to an xml file
342a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] withSettings a boolean that determines if the settings should be used in the
343cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * xml description
344a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] toFile a boolean that determines if the destination is an xml description in
345a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * xmlDest or contained in a file. In that case xmlDest is just the file path.
346a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[out] errorMsg is used as the error output
347cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
348ed744eb61b3fced13193fb59f728f26847748179David Wagner      * @return false if any error occurs, true otherwise.
349cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      */
3509368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool exportDomainsXml(std::string &xmlDest, bool withSettings, bool toFile,
3519368eea42a1afb01dd44110582f997115b50e742François Gaffie                          std::string &errorMsg) const;
35268a912857707864bbaaff9808717813105072a6ePatrick Benavoli
353ed744eb61b3fced13193fb59f728f26847748179David Wagner    /**
354ed744eb61b3fced13193fb59f728f26847748179David Wagner      * Method that exports a given Configurable Domain to an Xml destination.
355ed744eb61b3fced13193fb59f728f26847748179David Wagner      *
356a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in,out] xmlDest a string containing an xml description or a path to an xml file
357a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] domainName the name of the domain to be exported
358a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] withSettings a boolean that determines if the settings should be used in the
359ed744eb61b3fced13193fb59f728f26847748179David Wagner      * xml description
360a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] toFile a boolean that determines if the destination is an xml description in
361a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * xmlDest or contained in a file. In that case xmlDest is just the file path.
362a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[out] errorMsg is used as the error output
363ed744eb61b3fced13193fb59f728f26847748179David Wagner      *
364ed744eb61b3fced13193fb59f728f26847748179David Wagner      * @return false if any error occurs, true otherwise.
365ed744eb61b3fced13193fb59f728f26847748179David Wagner      */
3669368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool exportSingleDomainXml(std::string &xmlDest, const std::string &domainName,
3679368eea42a1afb01dd44110582f997115b50e742François Gaffie                               bool withSettings, bool toFile, std::string &errorMsg) const;
36868a912857707864bbaaff9808717813105072a6ePatrick Benavoli
369cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron    /**
3700548523ab6bbca766dcce4be97a0c50efd529d90Patrick Benavoli      * Method that exports an Xml description of the passed element into a string
371cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
3720548523ab6bbca766dcce4be97a0c50efd529d90Patrick Benavoli      * @param[in] pXmlSource The source element to export
3730548523ab6bbca766dcce4be97a0c50efd529d90Patrick Benavoli      * @param[in] strRootElementType The XML root element name of the exported instance document
3749368eea42a1afb01dd44110582f997115b50e742François Gaffie      * @param[in] xmlSerializingContext the context to use for serialization
3759368eea42a1afb01dd44110582f997115b50e742François Gaffie      *                                  Is an rvalue as it must be destructed after this function
3769368eea42a1afb01dd44110582f997115b50e742François Gaffie      *                                  call to set the error.
3779368eea42a1afb01dd44110582f997115b50e742François Gaffie      *                                  Additionally, using it for an other serialization would
3789368eea42a1afb01dd44110582f997115b50e742François Gaffie      *                                  override the error.
3799368eea42a1afb01dd44110582f997115b50e742François Gaffie      * @param[out] strResult contains the xml description or the error description in case false is
3809368eea42a1afb01dd44110582f997115b50e742François Gaffie     * returned
381cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
3829368eea42a1afb01dd44110582f997115b50e742François Gaffie      * @return true for success, false if any error occurs during the creation of the xml
3839368eea42a1afb01dd44110582f997115b50e742François Gaffie     * description (validation or encoding)
384cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      */
3859368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool exportElementToXMLString(const IXmlSource *pXmlSource,
3869368eea42a1afb01dd44110582f997115b50e742François Gaffie                                  const std::string &strRootElementType,
3879368eea42a1afb01dd44110582f997115b50e742François Gaffie                                  CXmlSerializingContext &&xmlSerializingContext,
3889368eea42a1afb01dd44110582f997115b50e742François Gaffie                                  std::string &strResult) const;
389326a31df0dd401283de6170ed09bcf605f61ef7dGeorges-Henri Baron
39068a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // CElement
391d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve    virtual std::string getKind() const;
392ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard
39368a912857707864bbaaff9808717813105072a6ePatrick Benavoliprivate:
3949368eea42a1afb01dd44110582f997115b50e742François Gaffie    CParameterMgr(const CParameterMgr &);
3959368eea42a1afb01dd44110582f997115b50e742François Gaffie    CParameterMgr &operator=(const CParameterMgr &);
3964ebc0984c7afe9a6f0168169d5141421b4adcc67JhinX Lee
397ff3a60aaaeaa5bf316e0f498306d287710edd98bFrederic Boisnard    // Init
3989368eea42a1afb01dd44110582f997115b50e742François Gaffie    virtual bool init(std::string &strError);
39968a912857707864bbaaff9808717813105072a6ePatrick Benavoli
40063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli    // Version
401d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve    std::string getVersion() const;
40268a912857707864bbaaff9808717813105072a6ePatrick Benavoli
4039368eea42a1afb01dd44110582f997115b50e742François Gaffie    // This using is here for internal reasons: CommandHandler is public and is
4049368eea42a1afb01dd44110582f997115b50e742François Gaffie    // a unique_ptr but we want the type that's inside. And for legacy reason
4059368eea42a1afb01dd44110582f997115b50e742François Gaffie    // because that's the original name before a rework; this directive avoids
4069368eea42a1afb01dd44110582f997115b50e742François Gaffie    // renaming a lot of stuff.
4079368eea42a1afb01dd44110582f997115b50e742François Gaffie    using CCommandHandler = CommandHandler::element_type;
4089368eea42a1afb01dd44110582f997115b50e742François Gaffie    using RemoteCommandParser = CCommandHandler::CommandStatus (CParameterMgr::*)(
4099368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4109368eea42a1afb01dd44110582f997115b50e742François Gaffie
4119368eea42a1afb01dd44110582f997115b50e742François Gaffie    // Parser descriptions
4129368eea42a1afb01dd44110582f997115b50e742François Gaffie    struct SRemoteCommandParserItem
4139368eea42a1afb01dd44110582f997115b50e742François Gaffie    {
4149368eea42a1afb01dd44110582f997115b50e742François Gaffie        const char *_pcCommandName;
4159368eea42a1afb01dd44110582f997115b50e742François Gaffie        CParameterMgr::RemoteCommandParser _pfnParser;
4169368eea42a1afb01dd44110582f997115b50e742François Gaffie        size_t _minArgumentCount;
4179368eea42a1afb01dd44110582f997115b50e742François Gaffie        const char *_pcHelp;
4189368eea42a1afb01dd44110582f997115b50e742François Gaffie        const char *_pcDescription;
4199368eea42a1afb01dd44110582f997115b50e742François Gaffie    };
4209368eea42a1afb01dd44110582f997115b50e742François Gaffie
42168a912857707864bbaaff9808717813105072a6ePatrick Benavoli    ////////////////:: Remote command parsers
422592ae56e6f8bc22c57224eb0528dd80caffa70dePatrick Benavoli    /// Version
4239368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus versionCommandProcess(const IRemoteCommand &remoteCommand,
4249368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                         std::string &strResult);
42568a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Status
4269368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus statusCommandProcess(const IRemoteCommand &remoteCommand,
4279368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                        std::string &strResult);
42868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Tuning Mode
4299368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setTuningModeCommandProcess(const IRemoteCommand &remoteCommand,
4309368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                               std::string &strResult);
4319368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getTuningModeCommandProcess(const IRemoteCommand &remoteCommand,
4329368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                               std::string &strResult);
43368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Value Space
4349368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setValueSpaceCommandProcess(const IRemoteCommand &remoteCommand,
4359368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                               std::string &strResult);
4369368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getValueSpaceCommandProcess(const IRemoteCommand &remoteCommand,
4379368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                               std::string &strResult);
4386ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli    /// Output Raw Format
4399368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setOutputRawFormatCommandProcess(
4409368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4419368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getOutputRawFormatCommandProcess(
4429368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
44368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Sync
4449368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setAutoSyncCommandProcess(const IRemoteCommand &remoteCommand,
4459368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                             std::string &strResult);
4469368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getAutoSyncCommandProcess(const IRemoteCommand &remoteCommand,
4479368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                             std::string &strResult);
4489368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus syncCommandProcess(const IRemoteCommand &remoteCommand,
4499368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                      std::string &strResult);
4506ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli    /// Criteria
4519368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listCriteriaCommandProcess(const IRemoteCommand &remoteCommand,
4529368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                              std::string &strResult);
45368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Domains
4549368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listDomainsCommandProcess(const IRemoteCommand &remoteCommand,
4559368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                             std::string &strResult);
4569368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus createDomainCommandProcess(const IRemoteCommand &remoteCommand,
4579368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                              std::string &strResult);
4589368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus deleteDomainCommandProcess(const IRemoteCommand &remoteCommand,
4599368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                              std::string &strResult);
4609368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus deleteAllDomainsCommandProcess(
4619368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4629368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus renameDomainCommandProcess(const IRemoteCommand &remoteCommand,
4639368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                              std::string &strResult);
4649368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setSequenceAwarenessCommandProcess(
4659368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4669368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getSequenceAwarenessCommandProcess(
4679368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4689368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listDomainElementsCommandProcess(
4699368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4709368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus addElementCommandProcess(const IRemoteCommand &remoteCommand,
4719368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                            std::string &strResult);
4729368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus removeElementCommandProcess(const IRemoteCommand &remoteCommand,
4739368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                               std::string &strResult);
4749368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus splitDomainCommandProcess(const IRemoteCommand &remoteCommand,
4759368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                             std::string &strResult);
47668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Configurations
4779368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listConfigurationsCommandProcess(
4789368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4799368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus dumpDomainsCommandProcess(const IRemoteCommand &remoteCommand,
4809368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                             std::string &strResult);
4819368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus createConfigurationCommandProcess(
4829368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4839368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus deleteConfigurationCommandProcess(
4849368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4859368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus renameConfigurationCommandProcess(
4869368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4879368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus saveConfigurationCommandProcess(
4889368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4899368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus restoreConfigurationCommandProcess(
4909368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4919368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setElementSequenceCommandProcess(
4929368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4939368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getElementSequenceCommandProcess(
4949368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
4959368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setRuleCommandProcess(const IRemoteCommand &remoteCommand,
4969368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                         std::string &strResult);
4979368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus clearRuleCommandProcess(const IRemoteCommand &remoteCommand,
4989368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                           std::string &strResult);
4999368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getRuleCommandProcess(const IRemoteCommand &remoteCommand,
5009368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                         std::string &strResult);
50168a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Elements/Parameters
5029368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listElementsCommandProcess(const IRemoteCommand &remoteCommand,
5039368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                              std::string &strResult);
5049368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listParametersCommandProcess(const IRemoteCommand &remoteCommand,
5059368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                                std::string &strResult);
5069368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getElementStructureXMLCommandProcess(
5079368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5089368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getElementBytesCommandProcess(
5099368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5109368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setElementBytesCommandProcess(
5119368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5129368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getElementXMLCommandProcess(const IRemoteCommand &remoteCommand,
5139368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                               std::string &strResult);
5149368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setElementXMLCommandProcess(const IRemoteCommand &remoteCommand,
5159368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                               std::string &strResult);
5169368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus dumpElementCommandProcess(const IRemoteCommand &remoteCommand,
5179368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                             std::string &strResult);
5189368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getElementSizeCommandProcess(const IRemoteCommand &remoteCommand,
5199368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                                std::string &strResult);
5209368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus showPropertiesCommandProcess(const IRemoteCommand &remoteCommand,
5219368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                                std::string &strResult);
5229368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getParameterCommandProcess(const IRemoteCommand &remoteCommand,
5239368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                              std::string &strResult);
5249368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setParameterCommandProcess(const IRemoteCommand &remoteCommand,
5259368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                              std::string &strResult);
5269368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus getConfigurationParameterCommandProcess(
5279368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5289368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus setConfigurationParameterCommandProcess(
5299368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5309368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listBelongingDomainsCommandProcess(
5319368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5329368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listAssociatedDomainsCommandProcess(
5339368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5349368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus showMappingCommandProcess(const IRemoteCommand &remoteCommand,
5359368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                             std::string &strResult);
53668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Browse
5379368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listAssociatedElementsCommandProcess(
5389368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5399368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listConflictingElementsCommandProcess(
5409368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5419368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus listRogueElementsCommandProcess(
5429368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
54368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    /// Settings Import/Export
5449368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus exportDomainsXMLCommandProcess(
5459368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5469368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus importDomainsXMLCommandProcess(
5479368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5489368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus exportDomainsWithSettingsXMLCommandProcess(
5499368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
5509368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus importDomainsWithSettingsXMLCommandProcess(
5519368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
552a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    /**
553a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * Command handler method for exportDomainWithSettingsXML command.
554a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      *
555a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] remoteCommand contains the arguments of the received command.
556a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[out] result a std::string containing the result of the command
557a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      *
558a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @return CCommandHandler::ESucceeded if command succeeded or CCommandHandler::EFailed
559a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * in the other case
560a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      */
5619368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus exportDomainWithSettingsXMLCommandProcess(
5629368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &result);
5639368eea42a1afb01dd44110582f997115b50e742François Gaffie    CCommandHandler::CommandStatus importDomainWithSettingsXMLCommandProcess(
5649368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
565cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron
566cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron    /**
567a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * Command handler method for getDomainsWithSettings command.
568cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
569cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * @param[in] remoteCommand contains the arguments of the received command.
570d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve      * @param[out] strResult a std::string containing the result of the command
571cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
572cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * @return CCommandHandler::ESucceeded if command succeeded or CCommandHandler::EFailed
573cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * in the other case
574cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      */
575a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    CCommandHandler::CommandStatus getDomainsWithSettingsXMLCommandProcess(
5769368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
577cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron
578cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron    /**
579a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * Command handler method for getDomainWithSettings command.
580ed744eb61b3fced13193fb59f728f26847748179David Wagner      *
581ed744eb61b3fced13193fb59f728f26847748179David Wagner      * @param[in] remoteCommand contains the arguments of the received command.
582ed744eb61b3fced13193fb59f728f26847748179David Wagner      * @param[out] strResult a string containing the result of the command
583ed744eb61b3fced13193fb59f728f26847748179David Wagner      *
584ed744eb61b3fced13193fb59f728f26847748179David Wagner      * @return CCommandHandler::ESucceeded if command succeeded or CCommandHandler::EFailed
585ed744eb61b3fced13193fb59f728f26847748179David Wagner      * in the other case
586ed744eb61b3fced13193fb59f728f26847748179David Wagner      */
587a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    CCommandHandler::CommandStatus getDomainWithSettingsXMLCommandProcess(
5889368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
589ed744eb61b3fced13193fb59f728f26847748179David Wagner
590ed744eb61b3fced13193fb59f728f26847748179David Wagner    /**
591a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * Command handler method for setDomainsWithSettings command.
592cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
593cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * @param[in] remoteCommand contains the arguments of the received command.
594d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve      * @param[out] strResult a std::string containing the result of the command
595cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
596cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * @return CCommandHandler::ESucceeded if command succeeded or CCommandHandler::EFailed
597cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * in the other case
598cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      */
599a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    CCommandHandler::CommandStatus setDomainsWithSettingsXMLCommandProcess(
6009368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
601cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron
602cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron    /**
603a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * Command handler method for setDomainWithSettings command.
604a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      *
605a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[in] remoteCommand contains the arguments of the received command.
606a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @param[out] result a std::string containing the result of the command
607a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      *
608a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * @return CCommandHandler::ESucceeded if command succeeded or CCommandHandler::EFailed
609a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      * in the other case
610a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi      */
611a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    CCommandHandler::CommandStatus setDomainWithSettingsXMLCommandProcess(
6129368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &result);
613a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi
614a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    /**
615cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * Command handler method for getSystemClass command.
616cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
617cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * @param[in] remoteCommand contains the arguments of the received command.
618d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve      * @param[out] strResult a std::string containing the result of the command
619cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      *
620cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * @return CCommandHandler::ESucceeded if command succeeded or CCommandHandler::EFailed
621cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      * in the other case
622cec86c1904a45a7027218adb3d34c8764bdfcc38Georges-Henri Baron      */
623a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    CCommandHandler::CommandStatus getSystemClassXMLCommandProcess(
6249368eea42a1afb01dd44110582f997115b50e742François Gaffie        const IRemoteCommand &remoteCommand, std::string &strResult);
62568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
62668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Max command usage length, use for formatting
62768a912857707864bbaaff9808717813105072a6ePatrick Benavoli    void setMaxCommandUsageLength();
62868a912857707864bbaaff9808717813105072a6ePatrick Benavoli
62968a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // For tuning, check we're in tuning mode
6309368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool checkTuningModeOn(std::string &strError) const;
63168a912857707864bbaaff9808717813105072a6ePatrick Benavoli
632065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoli    // Blackboard (dynamic parameter handling)
6339368eea42a1afb01dd44110582f997115b50e742François Gaffie    std::mutex &getBlackboardMutex();
634065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoli
635065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoli    // Blackboard reference (dynamic parameter handling)
6369368eea42a1afb01dd44110582f997115b50e742François Gaffie    CParameterBlackboard *getParameterBlackboard();
637065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoli
6384bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli    // Parameter access
6399368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool accessValue(CParameterAccessContext &parameterAccessContext, const std::string &strPath,
6409368eea42a1afb01dd44110582f997115b50e742François Gaffie                     std::string &strValue, bool bSet, std::string &strError);
6419368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool doSetValue(const std::string &strPath, const std::string &strValue, bool bRawValueSpace,
6429368eea42a1afb01dd44110582f997115b50e742François Gaffie                    bool bDynamicAccess, std::string &strError) const;
6439368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool doGetValue(const std::string &strPath, std::string &strValue, bool bRawValueSpace,
6449368eea42a1afb01dd44110582f997115b50e742François Gaffie                    bool bHexOutputRawFormat, bool bDynamicAccess, std::string &strError) const;
6454bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli
64668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Framework global configuration loading
6479368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool loadFrameworkConfiguration(std::string &strError);
6489368eea42a1afb01dd44110582f997115b50e742François Gaffie
6499368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Load required subsystems
6509368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
6519368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[out] error error description if there is one
6529368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return true if succeed false otherwise
6539368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
6549368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool loadSubsystems(std::string &error);
65568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
65668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // System class Structure loading
6579368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool loadStructure(std::string &strError);
65868a912857707864bbaaff9808717813105072a6ePatrick Benavoli
65968a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // System class Structure loading
6609368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool loadSettings(std::string &strError);
6619368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool loadSettingsFromConfigFile(std::string &strError);
6629368eea42a1afb01dd44110582f997115b50e742François Gaffie
6639368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Get settings from a configurable element in binary format.
6649368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
6659368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] element configurable element.
6669368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[out] settings current element settings (in mainblackboard) in binary format
6679368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
6689368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return true on success, false on error
6699368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
6709368eea42a1afb01dd44110582f997115b50e742François Gaffie    void getSettingsAsBytes(const CConfigurableElement &element,
6719368eea42a1afb01dd44110582f997115b50e742François Gaffie                            std::vector<uint8_t> &settings) const;
6729368eea42a1afb01dd44110582f997115b50e742François Gaffie
6739368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Assign settings to a configurable element in binary format.
6749368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
6759368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] element configurable element.
6769368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] settings the settings as byte array (binary).
6779368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[out] error error message filled in case of error
6789368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
6799368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return true in case of success, false oherwise, in which case error is filled with error
6809368eea42a1afb01dd44110582f997115b50e742François Gaffie     * message.
6819368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
6829368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool setSettingsAsBytes(const CConfigurableElement &element,
6839368eea42a1afb01dd44110582f997115b50e742François Gaffie                            const std::vector<uint8_t> &settings, std::string &error);
6849368eea42a1afb01dd44110582f997115b50e742François Gaffie
6859368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Assign settings to a configurable element in XML format.
6869368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
6879368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] configurableElement The element to set.
6889368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] settings The settings to set.
6899368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[out] error human readable error message filled in case of error,
6909368eea42a1afb01dd44110582f997115b50e742François Gaffie     *                   undefined in case of success.
6919368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return true in case of success, false otherwise
6929368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
6939368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool setSettingsAsXML(CConfigurableElement *configurableElement, const std::string &settings,
6949368eea42a1afb01dd44110582f997115b50e742François Gaffie                          std::string &error);
6959368eea42a1afb01dd44110582f997115b50e742François Gaffie
6969368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Get settings from a configurable element in XML format.
6979368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
6989368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] configurableElement The element to get settings from.
6999368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[out] result on success: the exported setttings in XML
7009368eea42a1afb01dd44110582f997115b50e742François Gaffie     *                    on error: human readable error message
7019368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
7029368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return true in case of success, false otherwise.
7039368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
7049368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool getSettingsAsXML(const CConfigurableElement *configurableElement,
7059368eea42a1afb01dd44110582f997115b50e742François Gaffie                          std::string &result) const;
70668a912857707864bbaaff9808717813105072a6ePatrick Benavoli
707a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    /** Parse an XML stream into an element
708a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
709a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] elementSerializingContext serializing context
710a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[out] pRootElement the receiving element
711a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] input the input XML stream
7129368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] baseUri the XML input file URI or ""
713a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] eElementLibrary which element library to be used
7149368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] replace Should the element be overridden or modified in place
715a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] strNameAttributeName the name of the element's XML "name" attribute
716a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
717a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @returns true if parsing succeeded, false otherwise
718a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     */
7199368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool xmlParse(CXmlElementSerializingContext &elementSerializingContext, CElement *pRootElement,
7209368eea42a1afb01dd44110582f997115b50e742François Gaffie                  _xmlDoc *doc, const std::string &baseUri, ElementLibrary eElementLibrary,
7219368eea42a1afb01dd44110582f997115b50e742François Gaffie                  bool replace = true, const std::string &strNameAttributeName = "Name");
722a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi
723a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    /** Wrapper for converting public APIs semantics to internal API
724a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
725a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * Public APIs have a string argument that can either contain:
726a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * - a path to an XML file or;
727a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * - an actual XML document.
728a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * They also have a boolean argument specifying which of the two cases it
729a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * is.
730a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
731a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * Instead, the internal APIs only take an std::istream argument. This
732a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * method opens the file as a stream if applicable or simply wrap the
733a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * string in a stream. It then passes the stream to the internal methods.
734a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
735a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] xmlSource the XML source (either a path or an actual xml
736a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * document)
737a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] fromFile specifies whether xmlSource is a path or an
738a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * actual XML document
739a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] withSettings if false, only import the configurations
740a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * applicability rules; if true, also import their settings
741a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[out] element the receiving element
742a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] nameAttributeName the name of the element's XML "name"
743a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * attribute
744a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[out] errorMsg string used as output for any error message
745a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
746a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @returns true if the import succeeded, false otherwise
747a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     */
7489368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool wrapLegacyXmlImport(const std::string &xmlSource, bool fromFile, bool withSettings,
7499368eea42a1afb01dd44110582f997115b50e742François Gaffie                             CElement &element, const std::string &nameAttributeName,
7509368eea42a1afb01dd44110582f997115b50e742François Gaffie                             std::string &errorMsg);
75168a912857707864bbaaff9808717813105072a6ePatrick Benavoli
75270e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner    /**
75370e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner     * Export an element object to an Xml destination.
75470e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner     *
75570e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner     *
756a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[out] output the stream to output the XML to
75770e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner     * @param[in] xmlSerializingContext the serializing context
75870e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner     * @param[in] element object to be serialized.
75970e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner     *
76070e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner     * @return false if any error occurs, true otherwise.
76170e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner     */
7629368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool serializeElement(std::ostream &output, CXmlSerializingContext &xmlSerializingContext,
7639368eea42a1afb01dd44110582f997115b50e742François Gaffie                          const CElement &element) const;
76470e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner
765a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    /** Wrapper for converting public APIs semantics to internal API
766a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
767a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * Public APIs have a string argument that can either:
768a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * - contain a path to an XML file or;
769a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * - receive an actual XML document.
770a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * They also have a boolean argument specifying which of the two cases it
771a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * is.
772a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
773a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * Instead, the internal APIs only take an std::ostream argument. This
774a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * method opens the file as a stream if applicable or simply wrap the
775a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * string in a stream. It then passes the stream to the internal methods.
776a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
777a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] xmlDest the XML sink (either a path or any string that
778a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * will be filled)
779a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] toFile specifies whether xmlSource is a path or a
780a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * string that will receive an actual XML document
781a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[in] withSettings if false, only export the configurations
782a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * applicability rules; if true, also export their settings
783a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[out] element the element to be exported
784a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @param[out] errorMsg string used as output for any error message
785a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
786a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @returns true if the export succeeded, false otherwise
787a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     */
7889368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool wrapLegacyXmlExport(std::string &xmlDest, bool toFile, bool withSettings,
7899368eea42a1afb01dd44110582f997115b50e742François Gaffie                             const CElement &element, std::string &errorMsg) const;
790a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi
791a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    /** Wrapper for converting public APIs semantics to internal API
792a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
793a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @see wrapLegacyXmlExport
794a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     */
7959368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool wrapLegacyXmlExportToFile(std::string &xmlDest, const CElement &element,
796a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi                                   CXmlDomainExportContext &context) const;
797a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi
798a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi    /** Wrapper for converting public APIs semantics to internal API
799a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     *
800a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     * @see wrapLegacyXmlExport
801a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi     */
8029368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool wrapLegacyXmlExportToString(std::string &xmlDest, const CElement &element,
803a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi                                     CXmlDomainExportContext &context) const;
80470e458c1bb62ad39ea9c59339e74e1f7702910eeDavid Wagner
80568a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Framework Configuration
8069368eea42a1afb01dd44110582f997115b50e742François Gaffie    CParameterFrameworkConfiguration *getFrameworkConfiguration();
8079368eea42a1afb01dd44110582f997115b50e742François Gaffie    const CParameterFrameworkConfiguration *getConstFrameworkConfiguration();
80868a912857707864bbaaff9808717813105072a6ePatrick Benavoli
80968a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Selection Criteria
8109368eea42a1afb01dd44110582f997115b50e742François Gaffie    CSelectionCriteria *getSelectionCriteria();
8119368eea42a1afb01dd44110582f997115b50e742François Gaffie    const CSelectionCriteria *getConstSelectionCriteria();
81268a912857707864bbaaff9808717813105072a6ePatrick Benavoli
81368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // System Class
8149368eea42a1afb01dd44110582f997115b50e742François Gaffie    CSystemClass *getSystemClass();
8159368eea42a1afb01dd44110582f997115b50e742François Gaffie    const CSystemClass *getConstSystemClass() const;
81668a912857707864bbaaff9808717813105072a6ePatrick Benavoli
81768a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Configurable Domains
8189368eea42a1afb01dd44110582f997115b50e742François Gaffie    CConfigurableDomains *getConfigurableDomains();
8199368eea42a1afb01dd44110582f997115b50e742François Gaffie    const CConfigurableDomains *getConstConfigurableDomains();
8209368eea42a1afb01dd44110582f997115b50e742François Gaffie    const CConfigurableDomains *getConstConfigurableDomains() const;
82168a912857707864bbaaff9808717813105072a6ePatrick Benavoli
822f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin    // Apply configurations
823f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin    void doApplyConfigurations(bool bForce);
824f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin
82568a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Dynamic object creation libraries feeding
82668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    void feedElementLibraries();
82768a912857707864bbaaff9808717813105072a6ePatrick Benavoli
82868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Remote Processor Server connection handling
8299368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool isRemoteInterfaceRequired();
8309368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool handleRemoteProcessingInterface(std::string &strError);
8319368eea42a1afb01dd44110582f997115b50e742François Gaffie
8329368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Log the result of a function
8339368eea42a1afb01dd44110582f997115b50e742François Gaffie     *
8349368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] isSuccess indicates if the previous function has succeed
8359368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @param[in] result function provided result string
8369368eea42a1afb01dd44110582f997115b50e742François Gaffie     * @return isSuccess parameter
8379368eea42a1afb01dd44110582f997115b50e742François Gaffie     */
8389368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool logResult(bool isSuccess, const std::string &result);
8399368eea42a1afb01dd44110582f997115b50e742François Gaffie
8409368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Info logger call helper */
8419368eea42a1afb01dd44110582f997115b50e742François Gaffie    inline core::log::details::Info info();
8429368eea42a1afb01dd44110582f997115b50e742François Gaffie
8439368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Warning logger call helper */
8449368eea42a1afb01dd44110582f997115b50e742François Gaffie    inline core::log::details::Warning warning();
84568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
84668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Tuning
8479368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool _bTuningModeIsOn{false};
84868a912857707864bbaaff9808717813105072a6ePatrick Benavoli
84968a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Value Space
8509368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool _bValueSpaceIsRaw{false};
85168a912857707864bbaaff9808717813105072a6ePatrick Benavoli
8526ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli    // Output Raw Format
8539368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool _bOutputRawFormatIsHex{false};
8546ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli
85568a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Automatic synchronization to HW during Tuning session
8569368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool _bAutoSyncOn{true};
85768a912857707864bbaaff9808717813105072a6ePatrick Benavoli
85868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Current Parameter Settings
8599368eea42a1afb01dd44110582f997115b50e742François Gaffie    CParameterBlackboard *_pMainParameterBlackboard;
86068a912857707864bbaaff9808717813105072a6ePatrick Benavoli
86168a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Dynamic object creation
8629368eea42a1afb01dd44110582f997115b50e742François Gaffie    CElementLibrarySet *_pElementLibrarySet;
86368a912857707864bbaaff9808717813105072a6ePatrick Benavoli
86468a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // XML parsing, object creation handling
8659368eea42a1afb01dd44110582f997115b50e742François Gaffie    std::string _xmlConfigurationUri;
8669368eea42a1afb01dd44110582f997115b50e742François Gaffie    std::string _schemaUri; // Place where schemas stand
86768a912857707864bbaaff9808717813105072a6ePatrick Benavoli
86868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Subsystem plugin location
8699368eea42a1afb01dd44110582f997115b50e742François Gaffie    const CSubsystemPlugins *_pSubsystemPlugins{nullptr};
87063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli
87168a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Remote Processor Server
8729368eea42a1afb01dd44110582f997115b50e742François Gaffie    IRemoteProcessorServerInterface *_pRemoteProcessorServer{nullptr};
87368a912857707864bbaaff9808717813105072a6ePatrick Benavoli
87468a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Parser description array
875592ae56e6f8bc22c57224eb0528dd80caffa70dePatrick Benavoli    static const SRemoteCommandParserItem gastRemoteCommandParserItems[];
87668a912857707864bbaaff9808717813105072a6ePatrick Benavoli
87768a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Maximum command usage length
8789368eea42a1afb01dd44110582f997115b50e742François Gaffie    size_t _maxCommandUsageLength{0};
87968a912857707864bbaaff9808717813105072a6ePatrick Benavoli
880065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoli    // Blackboard access mutex
8819368eea42a1afb01dd44110582f997115b50e742François Gaffie    std::mutex _blackboardMutex;
88268a912857707864bbaaff9808717813105072a6ePatrick Benavoli
8839368eea42a1afb01dd44110582f997115b50e742François Gaffie    /** Application main logger based on the one provided by the client */
8849368eea42a1afb01dd44110582f997115b50e742François Gaffie    mutable core::log::Logger _logger;
885ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard
886962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner    /** If set to false, the remote interface won't be started no matter what.
887962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner     * If set to true - the default - it has no impact on the policy for
888962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner     * starting the remote interface.
889962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner     */
8909368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool _bForceNoRemoteInterface{false};
891962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner
892ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    /** If set to true, missing subsystem will abort parameterMgr start.
893ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      * If set to false, missing subsystem will fallback on virtual subsystem.
894ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard      */
8959368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool _bFailOnMissingSubsystem{true};
896d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    /** If set to true, unparsable or discording domains will abort parameterMgr start.
897d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      * If set to false, unparsable or discording domains
898d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      *                 will continue the parameterMgr start with no domains.
899d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard      */
9009368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool _bFailOnFailedSettingsLoad{true};
901cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek
902cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    /**
903cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     * If set to true, parameterMgr will report an error
904cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     *     when being unable to validate .xml files
905cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     * If set to false, no .xml/xsd validation will happen (default behaviour)
906cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek     */
9079368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool _bValidateSchemasOnStart{false};
90868a912857707864bbaaff9808717813105072a6ePatrick Benavoli};
909