1c3ed233102fafe39041e536983266e3d3b943e8
[framework/web/wrt-installer.git] / src / misc / feature_logic.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #ifndef SRC_INSTALLER_MISC_FEATURE_LOGIC
18 #define SRC_INSTALLER_MISC_FEATURE_LOGIC
19
20 #include <list>
21 #include <string>
22
23 #include <dpl/assert.h>
24 #include <dpl/noncopyable.h>
25 #include <memory>
26
27 #include <dpl/wrt-dao-ro/global_dao_read_only.h>
28 #include <wrt_common_types.h>
29
30 namespace Jobs {
31 namespace WidgetInstall {
32
33 class FeatureLogic : DPL::Noncopyable {
34   public:
35
36     FeatureLogic(const WrtDB::WidgetPkgName & pkgname);
37
38     bool isDone() const;
39
40     bool next();
41
42     void setAceResponse(bool allowed);
43
44     DPL::String getDevice() const;
45
46     bool isRejected(void) const
47     {
48         return m_rejected;
49     }
50
51     struct Feature : public WidgetFeature {
52         WrtDB::DeviceCapabilitySet devCapSet;
53         WrtDB::DeviceCapabilitySet::const_iterator currentCap;
54
55         Feature(const WidgetFeature &wf, const WrtDB::DeviceCapabilitySet &set)
56           : WidgetFeature(wf)
57           , devCapSet(set)
58         {
59             currentCap = devCapSet.begin();
60         }
61
62         explicit Feature(const Feature &second) : WidgetFeature(second)
63         {
64             devCapSet = second.devCapSet;
65             currentCap = devCapSet.find(*second.currentCap);
66             rejected = second.rejected;
67         }
68       private:
69         void operator=(const Feature &second) {
70             name = second.name;
71             devCapSet = second.devCapSet;
72             required = second.required;
73             rejected = second.rejected;
74             pluginId = second.pluginId;
75             params = second.params;
76             currentCap = devCapSet.find(*second.currentCap);
77         }
78     };
79
80     typedef std::list<Feature> FeatureList;
81     typedef FeatureList::const_iterator FeatureIterator;
82
83     FeatureIterator resultBegin() { return m_featureList.begin(); }
84     FeatureIterator resultEnd() { return m_featureList.end(); }
85
86   private:
87     bool isProcessable() const;
88
89     FeatureList m_featureList;
90     FeatureList::iterator m_currentFeature;
91     bool m_rejected;
92 };
93
94 typedef std::shared_ptr<FeatureLogic> FeatureLogicPtr;
95
96 } // namespace WidgetInstall
97 } // namespace Jobs
98
99 #endif // SRC_INSTALLER_MISC_FEATURE_LOGIC