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.
17 * @file ace_settings_logic.cpp
18 * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
19 * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
21 * @brief This is an implementation of server of ACE user preferences
23 #include <ace_settings_logic.h>
24 #include <ace_settings_server_factory.h>
25 #include <dpl/foreach.h>
26 #include <dpl/assert.h>
27 #include <dpl/log/log.h>
28 //#include <widget_controller.h>
29 #include <dpl/localization/w3c_file_localization.h>
30 #include <ace/PolicyEnforcementPoint.h>
31 #include <ace/PolicyEvaluator.h>
32 #include <ace/Preference.h>
33 #include <dpl/wrt-dao-rw/feature_dao.h>
34 #include <dpl/wrt-dao-rw/widget_dao.h>
38 #include <ace-dao-rw/AceDAO.h>
39 #include <ace/SettingsLogic.h>
40 #include <dpl/wrt-dao-rw/global_dao.h>
42 using namespace WrtDB;
44 namespace // anonymous
46 struct SubjectResource
48 WidgetHandle subject; // app_id
51 SubjectResource(WidgetHandle subjectArg,
52 const std::string& resourceArg) :
58 bool operator < (const SubjectResource& subjectResource) const
60 if (subject != subjectResource.subject) {
61 return subject < subjectResource.subject;
63 return resource < subjectResource.resource;
68 typedef std::map<SubjectResource, Preference> WidgetResourcePreferenceMap;
69 } // namespace anonymous
71 AceSettingsLogic::AceSettingsLogic(
72 PolicyEnforcementPoint *policyEnforcementPoint) :
73 m_policyEnforcementPoint(policyEnforcementPoint)
75 // Acquire ACE settings server from factory
76 m_server = AceSettingsServerFactory::Create(this);
79 AceSettings::WidgetsPreferences AceSettingsLogic::getWidgetsPreferences() const
81 AceSettings::WidgetsPreferences widgetsPreferences;
82 WidgetHandleList widgetHandleList = WidgetDAOReadOnly::getHandleList();
84 DPL::ScopedPtr<WidgetResourcePreferenceMap> preferenceMap;
86 PermissionList permissionTriple;
87 SettingsLogic::getWidgetDevCapSettings(&permissionTriple);
89 preferenceMap.Reset(new WidgetResourcePreferenceMap());
91 FOREACH(permission, permissionTriple)
93 LogInfo("In db: " << permission->appId <<
94 " " << permission->devCap);
95 SubjectResource sb(permission->appId,
97 preferenceMap->insert(std::make_pair(sb, permission->access));
100 LogInfo("Sending Widget Resources");
102 FOREACH(handle, widgetHandleList)
104 AceSettings::SubjectResourcePreferences subjectResourcePreferences;
105 WidgetDAOReadOnly widget(*handle);
107 //This has to be redesigned how to gather localized name of widget
108 // auto lang = widget.getDefaultlocale();
109 // if (!lang) lang = DPL::FromASCIIString("en");
110 // WidgetLocalizedInfo info =
111 // widget.getLocalizedInfo(*lang);
113 // DPL::Optional<DPL::String> optionalName = info.name;
115 // if (!!optionalName) {
116 // LogDebug("optional name: " << (*optionalName));
117 // subjectResourcePreferences.subject =
118 // DPL::ToUTF8String(*optionalName);
120 // subjectResourcePreferences.subject = "";
123 WidgetFeatureSet featureSet = widget.getFeaturesList();
124 SubjectResource subjectResource(*handle, "");
126 DeviceCapabilitySet deviceCaps;
128 FOREACH(feature, featureSet)
130 DeviceCapabilitySet thisFeatureDeviceCaps =
131 GlobalDAO::GetDeviceCapability(feature->name);
132 deviceCaps.insert(thisFeatureDeviceCaps.begin(),
133 thisFeatureDeviceCaps.end());
136 FOREACH(deviceCap, deviceCaps)
138 AceSettings::ResourcePreference resourcePreferences;
139 resourcePreferences.resource = DPL::ToUTF8String(*deviceCap);
141 subjectResource.resource = resourcePreferences.resource;
142 LogInfo("Looking for: " << subjectResource.subject <<
143 " " << subjectResource.resource);
146 WidgetResourcePreferenceMap::const_iterator preference =
147 preferenceMap->find(subjectResource);
149 if (preference != preferenceMap->end()) {
150 LogInfo("Found not default preference!!");
151 resourcePreferences.preference = preference->second;
153 resourcePreferences.preference = Preference::PREFERENCE_DEFAULT;
156 resourcePreferences.preference = Preference::PREFERENCE_DEFAULT;
159 LogInfo("Pushing back resource preference");
161 subjectResourcePreferences.resourcesPreference.
162 push_back(resourcePreferences);
165 widgetsPreferences.subjectsResourcePreferences.push_back(
166 subjectResourcePreferences);
169 return widgetsPreferences;
172 AceSettings::ResourcesPreferences AceSettingsLogic::getResourcesPreferences()
175 AceSettings::ResourcesPreferences resourcesPreferences;
176 PreferenceMap preferenceMap;
178 SettingsLogic::getDevCapSettings(&preferenceMap);
180 FeatureHandleList featureList = FeatureDAOReadOnly::GetHandleList();
182 FOREACH(featureName, featureList)
184 FeatureDAOReadOnly featureDao(*featureName);
186 AceSettings::ResourcePreference resourcePreference;
187 resourcePreference.resource = featureDao.GetName();
189 PreferenceMap::const_iterator preference =
190 preferenceMap.find(resourcePreference.resource);
192 if (preference != preferenceMap.end()) {
193 resourcePreference.preference = preference->second;
195 resourcePreference.preference = Preference::PREFERENCE_DEFAULT;
198 resourcesPreferences.resourcesPreference.push_back(resourcePreference);
201 return resourcesPreferences;
204 void AceSettingsLogic::setWidgetPreference(const std::string &resource,
205 WidgetHandle handler,
206 const Preference &preference)
208 SettingsLogic::setWidgetDevCapSetting(resource, handler, preference);
211 void AceSettingsLogic::setResourcePreference(const std::string &resource,
212 const Preference &preference)
214 SettingsLogic::setDevCapSetting(resource, preference);
217 bool AceSettingsLogic::getWidgetsSecure() const
219 return GlobalDAO::GetSecureByDefault();
222 void AceSettingsLogic::setWidgetsSecure(bool widgetSecure)
224 GlobalDAO::SetSecureByDefault(widgetSecure);
227 void AceSettingsLogic::resetWidgetsPreferences()
229 AceDB::AceDAO::clearWidgetDevCapSettings();
232 void AceSettingsLogic::resetResourcesPreferences()
234 AceDB::AceDAO::clearDevCapSettings();