summaryrefslogtreecommitdiff
path: root/upstream/parameter/FormattedSubsystemObject.cpp
diff options
context:
space:
mode:
authorFrançois Gaffie <francois.gaffie@intel.com>2016-02-17 07:54:16 +0100
committerEric Laurent <elaurent@google.com>2016-03-04 17:47:11 -0800
commit221a25e58e92ebc450c7eaba5f3ba8153a2308ae (patch)
tree21fba4d16e7be1fc91e2e8b85b12ad3950c209a1 /upstream/parameter/FormattedSubsystemObject.cpp
parent9368eea42a1afb01dd44110582f997115b50e742 (diff)
downloadparameter-framework-221a25e58e92ebc450c7eaba5f3ba8153a2308ae.tar.gz
parameter-framework: move github upstream code to upstream folder
Change-Id: I3aa6e8f8fccfcf80fdc2a4e00c17d8b10b45e9dd Signed-off-by: François Gaffie <francois.gaffie@intel.com> Bug: 22887211
Diffstat (limited to 'upstream/parameter/FormattedSubsystemObject.cpp')
-rw-r--r--upstream/parameter/FormattedSubsystemObject.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/upstream/parameter/FormattedSubsystemObject.cpp b/upstream/parameter/FormattedSubsystemObject.cpp
new file mode 100644
index 0000000..dc7dded
--- /dev/null
+++ b/upstream/parameter/FormattedSubsystemObject.cpp
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2011-2015, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "FormattedSubsystemObject.h"
+#include "InstanceConfigurableElement.h"
+#include "MappingContext.h"
+#include <assert.h>
+
+#define base CSubsystemObject
+
+using std::string;
+
+CFormattedSubsystemObject::CFormattedSubsystemObject(
+ CInstanceConfigurableElement *pInstanceConfigurableElement, core::log::Logger &logger)
+ : base(pInstanceConfigurableElement, logger)
+{
+}
+
+CFormattedSubsystemObject::CFormattedSubsystemObject(
+ CInstanceConfigurableElement *pInstanceConfigurableElement, core::log::Logger &logger,
+ const string &strMappingValue)
+ : base(pInstanceConfigurableElement, logger), _strFormattedMappingValue(strMappingValue)
+{
+}
+
+CFormattedSubsystemObject::CFormattedSubsystemObject(
+ CInstanceConfigurableElement *pInstanceConfigurableElement, core::log::Logger &logger,
+ const string &strMappingValue, size_t firstAmendKey, size_t nbAmendKeys,
+ const CMappingContext &context)
+ : base(pInstanceConfigurableElement, logger), _strFormattedMappingValue(strMappingValue)
+{
+ // Cope with quotes in the name
+ if (strMappingValue[0] == '\'' && strMappingValue.length() >= 2) {
+
+ _strFormattedMappingValue = strMappingValue.substr(1, strMappingValue.length() - 2);
+ }
+ _strFormattedMappingValue =
+ formatMappingValue(_strFormattedMappingValue, firstAmendKey, nbAmendKeys, context);
+}
+
+string CFormattedSubsystemObject::getFormattedMappingValue() const
+{
+ return _strFormattedMappingValue;
+}
+
+bool CFormattedSubsystemObject::isAmendKeyValid(size_t uiAmendKey)
+{
+
+ return (uiAmendKey > 0) && (uiAmendKey <= 9);
+}
+
+string CFormattedSubsystemObject::formatMappingValue(const string &strMappingValue,
+ size_t firstAmendKey, size_t nbAmendKeys,
+ const CMappingContext &context)
+{
+ string strFormattedValue = strMappingValue;
+
+ // Search for amendment (only one supported for now)
+ string::size_type uiPercentPos = strFormattedValue.find('%', 0);
+
+ // Amendment limited to one digit (values from 1 to 9)
+ assert(isAmendKeyValid(nbAmendKeys));
+
+ // Check we found one and that there's room for value
+ if (uiPercentPos != string::npos && uiPercentPos < strFormattedValue.size() - 1) {
+
+ // Get Amend number
+ size_t uiAmendNumber = strFormattedValue[uiPercentPos + 1] - '0';
+
+ // Check if current Amend number is Valid
+ if ((uiAmendNumber > 0) && (uiAmendNumber <= nbAmendKeys)) {
+
+ size_t uiAmendType = firstAmendKey + uiAmendNumber - 1;
+
+ // Check if current Amend type is Set in the context
+ if (context.iSet(uiAmendType)) {
+
+ // Make the amendment on the part of the string after the current Amend
+ string strEndOfLine = strFormattedValue.substr(
+ uiPercentPos + 2, strFormattedValue.size() - uiPercentPos - 2);
+ string strEndOfLineAmended =
+ formatMappingValue(strEndOfLine, firstAmendKey, nbAmendKeys, context);
+
+ // Get current Amend value
+ string strAmendValue = context.getItem(uiAmendType);
+
+ // Make the amendment
+ strFormattedValue =
+ strFormattedValue.substr(0, uiPercentPos) + strAmendValue + strEndOfLineAmended;
+ }
+ }
+ }
+ return strFormattedValue;
+}