1 /* 2 * Copyright (c) 2011-2015, Intel Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this 9 * list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation and/or 13 * other materials provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors 16 * may be used to endorse or promote products derived from this software without 17 * specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 #pragma once 31 32 #include "parameter_export.h" 33 34 #include "SelectionCriterionTypeInterface.h" 35 #include "SelectionCriterionInterface.h" 36 #include "ParameterHandle.h" 37 #include "ElementHandle.h" 38 #include "ParameterMgrLoggerForward.h" 39 40 class CParameterMgr; 41 42 class PARAMETER_EXPORT CParameterMgrPlatformConnector 43 { 44 friend class CParameterMgrLogger<CParameterMgrPlatformConnector>; 45 46 public: 47 /** Interface to implement to provide a custom logger to the PF. 48 * 49 * Override info and warning methods to specify how each log level 50 * should be printed. 51 * 52 * @note Errors are always returned synchronously. Never logged. 53 */ 54 class ILogger 55 { 56 public: 57 virtual void info(const std::string &strLog) = 0; 58 virtual void warning(const std::string &strLog) = 0; 59 60 protected: 61 virtual ~ILogger() {} 62 }; 63 64 // Construction 65 CParameterMgrPlatformConnector(const std::string &strConfigurationFilePath); 66 virtual ~CParameterMgrPlatformConnector(); 67 68 // Selection Criteria interface. Beware returned objects are lent, clients shall not delete 69 // them! 70 // Should be called before start 71 ISelectionCriterionTypeInterface *createSelectionCriterionType(bool bIsInclusive = false); 72 ISelectionCriterionInterface *createSelectionCriterion( 73 const std::string &strName, 74 const ISelectionCriterionTypeInterface *pSelectionCriterionType); 75 // Selection criterion retrieval 76 ISelectionCriterionInterface *getSelectionCriterion(const std::string &strName) const; 77 78 // Logging 79 // Should be called before start 80 void setLogger(ILogger *pLogger); 81 82 // Start 83 bool start(std::string &strError); 84 85 // Started state 86 bool isStarted() const; 87 88 // Configuration application 89 void applyConfigurations(); 90 91 // Dynamic parameter handling 92 // Returned objects are owned by clients 93 // Must be cassed after successfull start 94 CParameterHandle *createParameterHandle(const std::string &strPath, 95 std::string &strError) const; 96 97 /** Creates a handle to a configurable element. 98 * 99 * The returned object is owned by the client who is responsible to delete it. 100 * 101 * @param[in] path A string representing a path to a configurable element. 102 * @param[out] error On error: an human readable error message 103 * On success: undefined 104 * 105 * @return An element handle on success 106 * NULL on error 107 */ 108 ElementHandle *createElementHandle(const std::string &path, std::string &error) const; 109 110 /** Is the remote interface forcefully disabled ? 111 */ 112 bool getForceNoRemoteInterface() const; 113 114 /** 115 * Forcefully disable the remote interface or cancel this policy. 116 * 117 * Has no effect if called after calling start(). 118 * 119 * @param[in] bForceNoRemoteInterface disable the remote interface if true. 120 */ 121 void setForceNoRemoteInterface(bool bForceNoRemoteInterface); 122 123 /** Should start fail in case of missing subsystems. 124 * 125 * Will fail if called on started instance. 126 * 127 * @param[in] bFail: If set to true, parameterMgr start will fail on missing subsystems 128 * If set to false, missing subsystems will fallbacks on virtual subsystem 129 * @param[out] strError a string describing the error if the function failed, 130 unmodified otherwise. 131 * 132 * @return false if unable to set, true otherwise. 133 */ 134 bool setFailureOnMissingSubsystem(bool bFail, std::string &strError); 135 136 /** Would start fail in case of missing subsystems. 137 * 138 * @return if the subsystem load will fail on missing subsystem. 139 */ 140 bool getFailureOnMissingSubsystem() const; 141 142 /** Should start fail in failed settings load. 143 * 144 * Will fail if called on started instance. 145 * 146 * @param[in] bFail If set to true, parameterMgr start will fail on failed settings load. 147 * If set to false, failed settings load will be ignored. 148 * @param[out] strError On error: an human readable error message 149 * On success: undefined 150 * 151 * @return false if unable to set, true otherwise. 152 */ 153 bool setFailureOnFailedSettingsLoad(bool bFail, std::string &strError); 154 /** Would start fail in case of failed settings load. 155 * 156 * @return failure on failed settings load policy state. 157 */ 158 bool getFailureOnFailedSettingsLoad() const; 159 160 /** Get the XML Schemas URI 161 * 162 * @returns the XML Schemas URI 163 */ 164 const std::string &getSchemaUri() const; 165 166 /** Override the XML Schemas URI 167 * 168 * @param[in] schemaUri the XML Schemas URI 169 */ 170 void setSchemaUri(const std::string &schemaUri); 171 172 /** Should .xml files be validated on start ? 173 * 174 * @param[in] bValidate: 175 * If set to true, parameterMgr will abort when being unable to validate .xml files 176 * If set to false, no .xml/xsd validation will happen (default behaviour) 177 * @param[out] strError On error: an human readable error message 178 * On success: undefined 179 * 180 * @return false if unable to set, true otherwise. 181 */ 182 bool setValidateSchemasOnStart(bool bValidate, std::string &strError); 183 184 /** Would .xml files be validated on start? 185 * 186 * @return areSchemasValidated 187 */ 188 bool getValidateSchemasOnStart() const; 189 190 private: 191 CParameterMgrPlatformConnector(const CParameterMgrPlatformConnector &); 192 CParameterMgrPlatformConnector &operator=(const CParameterMgrPlatformConnector &); 193 // Private logging 194 void info(const std::string &log); 195 void warning(const std::string &log); 196 197 protected: 198 // Private logging 199 CParameterMgrLogger<CParameterMgrPlatformConnector> *_pParameterMgrLogger; 200 // Implementation 201 CParameterMgr *_pParameterMgr; 202 // State 203 bool _bStarted; 204 // Logging 205 ILogger *_pLogger; 206 }; 207