[Release] wrt-installer_0.0.98 for sdk branch
[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 #include <dpl/log/log.h>
26 #include <dpl/wrt-dao-ro/widget_dao_read_only.h>
27 #include <dpl/wrt-dao-ro/global_dao_read_only.h>
28
29 namespace Jobs {
30 namespace WidgetInstall {
31
32 FeatureLogic::FeatureLogic(const WrtDB::TizenAppId & tzAppid)
33   : m_rejected(false)
34 {
35     WrtDB::WidgetDAOReadOnly widgetDao(tzAppid);
36     WidgetFeatureSet featureSet = widgetDao.getFeaturesList();
37     FOREACH(it, featureSet) {
38         LogInfo("Feature name : " << it->name);
39         WrtDB::DeviceCapabilitySet dcs =
40           WrtDB::GlobalDAOReadOnly::GetDeviceCapability(it->name);
41         FOREACH (devCap, dcs) {
42             LogInfo("--- dev cap  : " << *devCap);
43         }
44         Feature feature(*it, dcs);
45         m_featureList.push_back(feature);
46     }
47     m_currentFeature = m_featureList.begin();
48
49     // ok we must set iterator on the first processable node
50     if (!isProcessable()) {
51         next();
52     }
53 }
54
55 bool FeatureLogic::isDone() const
56 {
57     return m_currentFeature == m_featureList.end();
58 }
59
60 bool FeatureLogic::next()
61 {
62     while (!isDone()) {
63         if (m_currentFeature->currentCap != m_currentFeature->devCapSet.end()) {
64             m_currentFeature->currentCap++;
65         } else {
66             ++m_currentFeature;
67         }
68         // we moved pointer
69         if (isProcessable()) {
70             return true;
71         }
72     }
73     return false;
74 }
75
76
77 void FeatureLogic::setAceResponse(bool allowed)
78 {
79     Assert(isProcessable() && "Wrong usage");
80     if (!allowed) {
81         m_currentFeature->rejected = true;
82         if (m_currentFeature->required) {
83             m_rejected = true;
84         }
85     }
86 }
87
88 DPL::String FeatureLogic::getDevice() const
89 {
90     return *(m_currentFeature->currentCap);
91 }
92
93 bool FeatureLogic::isProcessable() const
94 {
95     if (isDone()) {
96         return false;
97     }
98
99     if (m_currentFeature->currentCap == m_currentFeature->devCapSet.end()) {
100         return false;
101     }
102
103     return true;
104 }
105
106 } // namespace WidgetInstall
107 } // namespace Jobs
108