2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @file common_dao_types.h
19 * @author Michal Ciepielski (m.ciepielski@samsung.com)
21 * @brief This file contains the implementation of common data types for wrtdb
24 #include <dpl/wrt-dao-ro/common_dao_types.h>
26 #include <dpl/log/log.h>
31 Description::LevelEntry::LevelEntry(LevelEnum level) :
36 bool Description::LevelEntry::isContextValid(LevelEnum level,
37 const DPL::OptionalString& aContext) const
42 Context::const_iterator iter = context.find(*aContext);
43 if (iter != context.end()) {
51 bool Description::CategoryEntry::isCategoryValid(LevelEntry& aReason,
53 const DPL::OptionalString& aContext) const
55 for (LevelsContainer::const_iterator iter = levels.begin();
56 iter != levels.end(); ++iter) {
57 if (!iter->isContextValid(aLevel, aContext)) {
66 namespace ChildProtection
69 PowderRules::CategoryRule::CategoryRule(const DPL::String& aCategory,
70 Powder::Description::LevelEnum aLevel,
71 const DPL::OptionalString& aContext) :
78 PowderRules::PowderResult::PowderResult(InvalidReason aReason,
79 const Powder::Description::LevelEntry& anInvalidDescription,
80 const CategoryRule& anInvalidRule) :
81 invalidDescription(anInvalidDescription),
82 invalidRule(anInvalidRule),
87 //! Function checks if rule is fulfilled by description
88 //! \param[in] rule checked rule
89 //! \param[in] description
90 //! \retval true rule is valid
91 //! \retval false rule is invalid
92 PowderRules::ResultPair PowderRules::isRuleValidForDescription(
93 const CategoryRule& aRule,
94 const Powder::Description& aDescription) const
96 Powder::Description::CategoryEntries::const_iterator
97 iter = aDescription.categories.find(aRule.category);
98 if (iter != aDescription.categories.end()) {
99 Powder::Description::LevelEntry invalidDescription;
100 if (!iter->second.isCategoryValid(invalidDescription, aRule.level,
102 LogWarning("Widget forbidden for children detected");
103 return std::make_pair(false,
104 PowderResult(PowderResult::InvalidRule,
108 return std::make_pair(true, PowderResult());
111 return std::make_pair(true, PowderResult());
115 //! Function checks if age limit is fulfilled by description
116 //! \param[in] description
117 //! \retval true age is valid
118 //! \retval false age is invalid
119 PowderRules::ResultPair PowderRules::isAgeValidForDescription(
120 const Powder::Description& aDescription) const
123 return std::make_pair(true, PowderResult());
125 if (!!aDescription.ageRating) {
126 if (*aDescription.ageRating <= *ageLimit) {
127 return std::make_pair(true, PowderResult());
129 return std::make_pair(false,
130 PowderResult(PowderResult::InvalidAge));
133 if (!isAgeRatingRequired) {
134 return std::make_pair(true, PowderResult());
136 return std::make_pair(
138 PowderResult(PowderResult::AgeRatingNotSet));
144 //! Function check if Widget description is valid for ChildProtection
146 //! \param description widget description
147 //! \retval true widget is valid
148 //! \retval false widget is invalid
149 PowderRules::ResultPair PowderRules::isDescriptionValid(
150 const Powder::Description& aDescription) const
152 ResultPair powderResult;
153 for (RulesContainer::const_iterator iter = rules.begin();
154 iter != rules.end(); ++iter) {
155 powderResult = isRuleValidForDescription(*iter, aDescription);
156 if (!powderResult.first) {
160 return isAgeValidForDescription(aDescription);