From 7f1729aa56b52afad1ac2c390582bdc41145de9e Mon Sep 17 00:00:00 2001 From: Kevin Rocard Date: Wed, 10 Jul 2013 18:45:10 +0200 Subject: Add default element fallback BZ: 122982 The element library class is a factory that receives an xml node and instanciates the corresponding element. In some case, it would be usefull not to fail if no matching builder is found but use a default one. Add a setDefaultElementBuilder method to set the default builder to fallback to, in case no matching builder is found. Change-Id: I58f0ada3450195a3ca7d878e4b666b0a9359b499 Signed-off-by: Kevin Rocard Reviewed-on: http://android.intel.com:8080/118042 Reviewed-by: Centelles, Sylvain Tested-by: Barthes, FabienX Reviewed-by: cactus Tested-by: cactus --- parameter/DefaultElementLibrary.h | 94 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 parameter/DefaultElementLibrary.h (limited to 'parameter/DefaultElementLibrary.h') diff --git a/parameter/DefaultElementLibrary.h b/parameter/DefaultElementLibrary.h new file mode 100644 index 0000000..53a9059 --- /dev/null +++ b/parameter/DefaultElementLibrary.h @@ -0,0 +1,94 @@ +/* + * INTEL CONFIDENTIAL + * Copyright 2013 Intel + * Corporation All Rights Reserved. + * + * The source code contained or described herein and all documents related to + * the source code ("Material") are owned by Intel Corporation or its suppliers + * or licensors. Title to the Material remains with Intel Corporation or its + * suppliers and licensors. The Material contains trade secrets and proprietary + * and confidential information of Intel or its suppliers and licensors. The + * Material is protected by worldwide copyright and trade secret laws and + * treaty provisions. No part of the Material may be used, copied, reproduced, + * modified, published, uploaded, posted, transmitted, distributed, or + * disclosed in any way without Intel’s prior express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by Intel in writing. + */ +#pragma once + +#include "ElementLibrary.h" +#include "ElementBuilder.h" + +#include +#include + +/** Factory that creates an element given an xml element. If no matching builder is found, it uses + * the default builder. + * + * @tparam CDefaultElementBuilder is the class of the element builder to use if no corresponding + * builder is found for a given xml element. + */ +template +class CDefaultElementLibrary: public CElementLibrary +{ +public: + + explicit CDefaultElementLibrary(bool bEnableDefaultMechanism = true); + virtual ~CDefaultElementLibrary() {} + + /** Enable the default builder fallback mechanism. + * @see createElement() for more detail on this mechanism. + * + * @param[in] bEnable if true/false, activate/deactivate the default builder mechanism. + */ + void enableDefaultMechanism(bool bEnable) { + _bEnableDefaultMechanism = bEnable; + } + + + /** Create and return an element instanciated depending on an xmlElement. + * + * @param[in] xmlElement: The xml element used to find a matching builder + * + * @return If a matching builder is found, return an element created from the builder, + * otherwise: + * If the default mechanism is enable (@see enableDefaultMechanism), + * create the elemen with the default element builder. + * otherwise, return NULL. + */ + CElement* createElement(const CXmlElement& xmlElement) const; + +private: + bool _bEnableDefaultMechanism; + CDefaultElementBuilder _DefaultElementBuilder; +}; + +template +CDefaultElementLibrary::CDefaultElementLibrary(bool bEnableDefaultMechanism) : + _bEnableDefaultMechanism(bEnableDefaultMechanism), + _DefaultElementBuilder() {} + +template +CElement* CDefaultElementLibrary::createElement(const CXmlElement& xmlElement) const +{ + CElement* builtElement = CElementLibrary::createElement(xmlElement); + + if (builtElement != NULL) { + // The element was created, return it + return builtElement; + } + + if (!_bEnableDefaultMechanism) { + // The default builder mechanism is not enabled + return NULL; + } + + // Use the default builder + return _DefaultElementBuilder.createElement(xmlElement); +} + -- cgit v1.1