tizen beta release
[framework/web/wrt-installer.git] / src / misc / feature_logic.cpp
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 #include "feature_logic.h"
18
19 #include <list>
20
21 #include <dpl/assert.h>
22 #include <dpl/noncopyable.h>
23 #include <dpl/string.h>
24 #include <dpl/foreach.h>
25
26 #include <dpl/wrt-dao-rw/widget_dao.h>
27 #include <dpl/wrt-dao-rw/global_dao.h>
28
29 namespace Jobs {
30 namespace WidgetInstall {
31
32 FeatureLogic::FeatureLogic(WidgetHandle handle)
33   : m_rejected(false)
34 {
35     WrtDB::WidgetDAO widgetDao(handle);
36     WidgetFeatureSet featureSet = widgetDao.getFeaturesList();
37     FOREACH(it, featureSet) {
38         WrtDB::DeviceCapabilitySet dcs =
39           WrtDB::GlobalDAO::GetDeviceCapability(it->name);
40         Feature feature(*it, dcs);
41         m_featureList.push_back(feature);
42     }
43     m_currentFeature = m_featureList.begin();
44
45     // ok we must set iterator on the first processable node
46     if (!isProcessable()) {
47         next();
48     }
49 }
50
51 bool FeatureLogic::isDone() const
52 {
53     return m_currentFeature == m_featureList.end();
54 }
55
56 bool FeatureLogic::next()
57 {
58     while (!isDone()) {
59         if (m_currentFeature->currentCap != m_currentFeature->devCapSet.end()) {
60             m_currentFeature->currentCap++;
61         } else {
62             ++m_currentFeature;
63         }
64         // we moved pointer
65         if (isProcessable()) {
66             return true;
67         }
68     }
69     return false;
70 }
71
72
73 void FeatureLogic::setAceResponse(bool allowed)
74 {
75     Assert(isProcessable() && "Wrong usage");
76     if (!allowed) {
77         m_currentFeature->rejected = true;
78         if (m_currentFeature->required) {
79             m_rejected = true;
80         }
81     }
82 }
83
84 DPL::String FeatureLogic::getDevice() const
85 {
86     return *(m_currentFeature->currentCap);
87 }
88
89 bool FeatureLogic::isProcessable() const
90 {
91     if (isDone()) {
92         return false;
93     }
94
95     if (m_currentFeature->currentCap == m_currentFeature->devCapSet.end()) {
96         return false;
97     }
98
99     return true;
100 }
101
102 } // namespace WidgetInstall
103 } // namespace Jobs
104