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 plugin_container_support.h
18 * @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
22 #include "plugin_container_support.h"
26 #include <dpl/log/secure_log.h>
27 #include <dpl/foreach.h>
28 #include <dpl/wrt-dao-ro/feature_dao_read_only.h>
29 #include <dpl/wrt-dao-ro/global_config.h>
31 using namespace WrtDB;
33 #include <dpl/wrt-dao-ro/widget_dao_read_only.h>
35 PluginContainerSupport::PluginContainerSupport() : m_initialized(false)
37 // Reading root plugins list from so files
38 readRootPluginsList();
41 PluginContainerSupport::~PluginContainerSupport()
43 // Remove all plugin models
44 m_pluginModels.clear();
46 // Remove all feature models
47 m_featureModels.clear();
50 void PluginContainerSupport::Initialize(int widgetHandle)
52 if (isInitialized() == false) {
53 readAllowedPlugins(widgetHandle);
54 readRootPlugins(widgetHandle);
58 std::list<std::string> PluginContainerSupport::getAllowedFeatures(
59 int widgetHandle) const
61 //TODO it has to return LIST NOT SET!!!
62 WidgetDAOReadOnly widgetDao(widgetHandle);
63 DbWidgetFeatureSet features = widgetDao.getFeaturesList();
65 std::list<std::string> allowedFeatures;
66 FOREACH(it, features) {
67 _D("Loading api-feature: %s", DPL::ToUTF8String(it->name).c_str());
69 _W("Api-feature was rejected by ace. (Api-feature name: %s)",
74 allowedFeatures.push_back(DPL::ToUTF8String(it->name));
76 return allowedFeatures;
79 void PluginContainerSupport::readAllowedPlugins(int widgetHandle)
81 std::list<std::string> allowedFeatures;
82 auto requested = getAllowedFeatures(widgetHandle);
85 allowedFeatures.push_back(*f);
88 FeatureData* dt = NULL;
89 std::map<FeatureHandle,
90 FeatureData> featureDataList = FeatureDAOReadOnly::GetFeatures(
92 DeviceCapList deviceCapabilities =
93 FeatureDAOReadOnly::GetDevCapWithFeatureHandle();
94 FOREACH(data, featureDataList) {
96 registerPluginModel(dt->pluginHandle);
97 registerFeatureModel(data->first, dt, deviceCapabilities);
100 m_initialized = true;
103 void PluginContainerSupport::readRootPlugins(int widgetHandle)
105 WidgetDAOReadOnly dao(widgetHandle);
106 WidgetType appType = dao.getWidgetType();
107 if (appType == WrtDB::APP_TYPE_TIZENWEBAPP) {
108 FOREACH(it_rootPluginHandle, m_rootPluginsList)
110 _D("*it_rootPluginHandle: %d", *it_rootPluginHandle);
111 registerPluginModel(*it_rootPluginHandle);
114 _D("Not defined app type");
116 m_initialized = true;
119 void PluginContainerSupport::registerFeatureModel(
120 FeatureHandle handle,
125 FeatureModelPtr model = getFeatureModel(handle);
127 _D("Model for feature: %d already created", handle);
131 _D("Creating Model for feature: %d", handle);
133 model.reset(new FeatureModel(handle));
135 std::set<std::string> devCapList;
136 auto ret = deviceCapabilities.equal_range(handle);
137 for (auto devCapIt = ret.first; devCapIt != ret.second; devCapIt++) {
138 devCapList.insert((*devCapIt).second);
140 model->SetData(data->featureName, devCapList, data->pluginHandle);
141 m_featureModels.insert(model);
144 void PluginContainerSupport::registerPluginModel(DbPluginHandle handle)
146 PluginModelPtr model = getPluginModelById(handle);
149 _D("Model for plugin: %d already registered", handle);
153 if (PluginDAOReadOnly::INSTALLATION_COMPLETED !=
154 PluginDAOReadOnly::getInstallationStateForHandle(handle))
156 _W("Failed To CreateModel for handle %d", handle);
160 model.Reset(new PluginModel(handle));
162 \r_D("Model Created. Handle: %d, name: %s",
164 model->LibraryName.Get().c_str());
166 m_pluginModels.insert(model);
169 void PluginContainerSupport::readRootPluginsList()
171 _D("Reading root plugins list from so files...");
172 m_rootPluginsList = PluginDAOReadOnly::getRootPluginHandleList();
176 PluginContainerSupport::getFeatureModel(const std::string &name) const
178 FOREACH(iter, m_featureModels)
180 if ((*iter)->Name.Get() == name) {
185 return FeatureModelPtr();
189 PluginContainerSupport::getFeatureModel(const FeatureHandle handle) const
191 FOREACH(iter, m_featureModels)
193 if ((*iter)->FHandle.Get() == handle) {
198 return FeatureModelPtr();
202 PluginContainerSupport::getPluginModelById(DbPluginHandle handle) const
204 FOREACH(pluginModel, m_pluginModels)
206 if ((*pluginModel)->Handle.Get() == handle) {
211 return PluginModelPtr();
215 PluginContainerSupport::getPluginModel(const FeatureModelPtr &feature) const
218 _D("Null Ptr for feature model");
219 return PluginModelPtr();
221 _D("Feature located in plugin: %d", feature->PHandle.Get());
222 return getPluginModelById(feature->PHandle.Get());
226 PluginContainerSupport::PluginsList
227 PluginContainerSupport::getRootPlugins() const
231 FOREACH(it, m_rootPluginsList) {
232 PluginModelPtr plugin = getPluginModelById(*it);
234 _W("PluginModel not found");
238 plugins.push_back(plugin);
244 PluginContainerSupport::PluginsList
245 PluginContainerSupport::getPluginsList() const
249 FOREACH(it, m_pluginModels) {
250 plugins.push_back(*it);
257 PluginContainerSupport::getPluginForFeature(const std::string& featureName)
259 return getPluginModel(getFeatureModel(featureName));