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 * This file contains the declaration of widget dao class.
19 * @file widget_dao_read_only.cpp
20 * @author Yang Jie (jie2.yang@samsung.com)
21 * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
22 * @author Pawel Sikorski (p.sikorski@samsung.com)
24 * @brief This file contains the declaration of widget dao
27 #include <dpl/wrt-dao-ro/widget_dao_read_only.h>
30 #include <dpl/foreach.h>
31 #include <dpl/sstream.h>
32 #include <dpl/wrt-dao-ro/global_config.h>
33 #include <dpl/wrt-dao-ro/webruntime_database.h>
34 #include <dpl/wrt-dao-ro/WrtDatabase.h>
35 #include <dpl/wrt-dao-ro/widget_config.h>
36 #include <dpl/wrt-dao-ro/feature_dao_read_only.h>
37 #include <orm_generator_wrt.h>
38 #include <LanguageTagsProvider.h>
41 unsigned int seed = time(NULL);
45 //TODO in current solution in each getter there exists a check
46 //"IsWidgetInstalled". Maybe it should be verified, if it could be done
47 //differently (check in WidgetDAOReadOnly constructor)
49 #define SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN Try
51 #define SQL_CONNECTION_EXCEPTION_HANDLER_END(message) \
52 Catch(DPL::DB::SqlConnection::Exception::Base) { \
54 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError, \
58 #define CHECK_WIDGET_EXISTENCE(macro_transaction, macro_handle) \
59 if (!WidgetDAOReadOnly::isWidgetInstalled(macro_handle)) \
61 macro_transaction.Commit(); \
62 LogWarning("Cannot find widget. Handle: " << macro_handle); \
63 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist, \
64 "Cannot find widget. Handle: " << macro_handle); \
67 typedef DPL::DB::ORM::wrt::WidgetInfo::Row WidgetInfoRow;
68 typedef DPL::DB::ORM::wrt::WidgetFeature::widget_feature_id::ColumnType
72 using namespace DPL::DB::ORM;
73 using namespace DPL::DB::ORM::wrt;
75 WidgetInfoRow getWidgetInfoRow(int widgetHandle)
77 LogDebug("Getting WidgetInfo row. Handle: " << widgetHandle);
78 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
80 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
81 select->Where(Equals<WidgetInfo::app_id>(widgetHandle));
83 WidgetInfo::Select::RowList rows = select->GetRowList();
85 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
86 "Cannot find widget. Handle: " << widgetHandle);
90 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in GetWidgetInfoRow")
93 const int MAX_TIZENID_LENGTH = 10;
95 TizenAppId getTizenAppIdByHandle(const DbWidgetHandle handle)
97 LogDebug("Getting TizenAppId by DbWidgetHandle: " << handle);
99 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
101 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
102 select->Where(Equals<WidgetInfo::app_id>(handle));
103 WidgetInfo::Select::RowList rowList = select->GetRowList();
105 if (rowList.empty()) {
106 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
107 "Failed to get widget by handle");
109 TizenAppId tzAppid = rowList.front().Get_tizen_appid();
113 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
116 TizenAppId getTizenAppIdByPkgId(const TizenPkgId tzPkgid)
118 LogDebug("Getting TizenAppId by pkgid : " << tzPkgid);
119 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
121 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
122 select->Where(Equals<WidgetInfo::tizen_pkgid>(tzPkgid));
123 WidgetInfo::Select::RowList rowList = select->GetRowList();
125 if (rowList.empty()) {
126 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
127 "Failed to get widget by handle");
129 TizenAppId tzAppid = rowList.front().Get_tizen_appid();
133 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
136 void getTizenAppIdListByPkgId(const TizenPkgId tzPkgid, std::list<TizenAppId>& idList)
138 LogDebug("Getting TizenAppId by pkgid : " << tzPkgid);
139 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
141 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
142 select->Where(Equals<WidgetInfo::tizen_pkgid>(tzPkgid));
143 WidgetInfo::Select::RowList rowList = select->GetRowList();
145 for (WidgetInfo::Select::RowList::iterator i = rowList.begin(); i != rowList.end(); ++i) {
146 TizenAppId tzAppid = i->Get_tizen_appid();
147 idList.push_back(tzAppid);
150 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
153 TizenPkgId getTizenPkgIdByHandle(const DbWidgetHandle handle)
155 LogDebug("Getting TizenPkgId by DbWidgetHandle: " << handle);
157 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
159 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
160 select->Where(Equals<WidgetInfo::app_id>(handle));
161 WidgetInfo::Select::RowList rowList = select->GetRowList();
163 if (rowList.empty()) {
164 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
165 "Failed to get widget by handle");
167 TizenPkgId tzPkgid = rowList.front().Get_tizen_pkgid();
171 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
174 TizenPkgId getTizenPkgIdByAppId(const TizenAppId tzAppid)
176 LogDebug("Getting TizenPkgId by TizenAppId: " << tzAppid);
178 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
180 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
181 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppid));
182 WidgetInfo::Select::RowList rowList = select->GetRowList();
184 if (rowList.empty()) {
185 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
186 "Failed to get widget by tizen appId");
188 TizenPkgId tzPkgid = rowList.front().Get_tizen_pkgid();
192 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed get pkgId")
196 IWidgetSecurity::~IWidgetSecurity()
199 WidgetDAOReadOnly::WidgetDAOReadOnly(DbWidgetHandle widgetHandle) :
200 m_widgetHandle(widgetHandle)
203 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::OptionalString widgetGUID) :
204 m_widgetHandle(WidgetDAOReadOnly::getHandle(widgetGUID))
207 WidgetDAOReadOnly::WidgetDAOReadOnly(TizenAppId tzAppid) :
208 m_widgetHandle(WidgetDAOReadOnly::getHandle(tzAppid))
211 WidgetDAOReadOnly::~WidgetDAOReadOnly()
214 DbWidgetHandle WidgetDAOReadOnly::getHandle() const
216 return m_widgetHandle;
219 DbWidgetHandle WidgetDAOReadOnly::getHandle(const WidgetGUID GUID)
221 LogDebug("Getting WidgetHandle by GUID [" << GUID << "]");
223 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
225 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
226 select->Where(Equals<WidgetInfo::widget_id>(GUID));
227 WidgetInfo::Select::RowList rowList = select->GetRowList();
229 if (rowList.empty()) {
230 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
231 "Failed to get widget by guid");
233 return rowList.front().Get_app_id();
235 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
238 DbWidgetHandle WidgetDAOReadOnly::getHandle(const DPL::String tzAppId)
240 LogDebug("Getting WidgetHandle by tizen app id [" << tzAppId << "]");
242 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
244 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
245 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
246 WidgetInfo::Select::RowList rowList = select->GetRowList();
248 if (rowList.empty()) {
249 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
250 "Failed to get widget by package name");
252 return rowList.front().Get_app_id();
254 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
257 DbWidgetHandle WidgetDAOReadOnly::getHandleByPkgId(const DPL::String pkgId)
259 LogDebug("Getting WidgetHandle by tizen package id [" << pkgId << "]");
261 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
263 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
264 select->Where(Equals<WidgetInfo::tizen_pkgid>(pkgId));
265 WidgetInfo::Select::RowList rowList = select->GetRowList();
267 if (rowList.empty()) {
268 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
269 "Failed to get widget by package id");
271 return rowList.front().Get_app_id();
273 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
276 TizenAppId WidgetDAOReadOnly::getTzAppId() const
278 return getTizenAppIdByHandle(m_widgetHandle);
281 TizenAppId WidgetDAOReadOnly::getTzAppId(const WidgetGUID GUID)
283 return getTizenAppIdByHandle(getHandle(GUID));
286 TizenAppId WidgetDAOReadOnly::getTzAppId(const DbWidgetHandle handle)
288 return getTizenAppIdByHandle(handle);
291 TizenAppId WidgetDAOReadOnly::getTzAppId(const TizenPkgId tzPkgid)
293 return getTizenAppIdByPkgId(tzPkgid);
296 TizenAppId WidgetDAOReadOnly::getTizenAppId() const
298 return getTizenAppIdByHandle(m_widgetHandle);
301 TizenAppId WidgetDAOReadOnly::getTizenAppId(const WidgetGUID GUID)
303 return getTizenAppIdByHandle(getHandle(GUID));
306 TizenAppId WidgetDAOReadOnly::getTizenAppId(const DbWidgetHandle handle)
308 return getTizenAppIdByHandle(handle);
311 TizenAppId WidgetDAOReadOnly::getTizenAppId(const TizenPkgId tzPkgid)
313 return getTizenAppIdByPkgId(tzPkgid);
316 TizenAppIdList WidgetDAOReadOnly::getTizenAppidList()
318 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
320 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
321 return select->GetValueList<WidgetInfo::tizen_appid>();
323 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get TizenAppIdList")
326 TizenAppIdList WidgetDAOReadOnly::getTizenAppIdList()
328 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
330 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
331 return select->GetValueList<WidgetInfo::tizen_appid>();
333 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get TizenAppIdList")
336 std::list<TizenAppId> WidgetDAOReadOnly::getTzAppIdList(const TizenPkgId tzPkgid)
338 std::list<TizenAppId> result;
339 getTizenAppIdListByPkgId(tzPkgid, result);
343 TizenPkgId WidgetDAOReadOnly::getTzPkgId() const
345 return getTizenPkgIdByHandle(m_widgetHandle);
348 TizenPkgId WidgetDAOReadOnly::getTzPkgId(const DbWidgetHandle handle)
350 return getTizenPkgIdByHandle(handle);
353 TizenPkgId WidgetDAOReadOnly::getTzPkgId(const TizenAppId tzAppid)
355 return getTizenPkgIdByAppId(tzAppid);
358 TizenPkgId WidgetDAOReadOnly::getTizenPkgId() const
360 return getTizenPkgIdByHandle(m_widgetHandle);
363 TizenPkgId WidgetDAOReadOnly::getTizenPkgId(const DbWidgetHandle handle)
365 return getTizenPkgIdByHandle(handle);
368 TizenPkgId WidgetDAOReadOnly::getTizenPkgId(const TizenAppId tzAppid)
370 return getTizenPkgIdByAppId(tzAppid);
373 TizenPkgIdList WidgetDAOReadOnly::getTizenPkgidList()
375 LogDebug("Getting Pkgid List ");
376 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
378 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
379 return select->GetValueList<WidgetInfo::tizen_pkgid>();
381 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgid list")
384 TizenPkgIdList WidgetDAOReadOnly::getTizenPkgIdList()
386 LogDebug("Getting TizenPkgId List ");
387 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
389 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
390 return select->GetValueList<WidgetInfo::tizen_pkgid>();
392 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgid list")
395 PropertyDAOReadOnly::WidgetPropertyKeyList
396 WidgetDAOReadOnly::getPropertyKeyList() const
398 return PropertyDAOReadOnly::GetPropertyKeyList(getTizenAppId());
401 PropertyDAOReadOnly::WidgetPreferenceList
402 WidgetDAOReadOnly::getPropertyList() const
404 return PropertyDAOReadOnly::GetPropertyList(getTizenAppId());
407 PropertyDAOReadOnly::WidgetPropertyValue WidgetDAOReadOnly::getPropertyValue(
408 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
410 return PropertyDAOReadOnly::GetPropertyValue(getTizenAppId(), key);
413 DPL::OptionalInt WidgetDAOReadOnly::checkPropertyReadFlag(
414 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
416 return PropertyDAOReadOnly::CheckPropertyReadFlag(getTizenAppId(), key);
419 DPL::String WidgetDAOReadOnly::getPath() const
421 DPL::String path = *getWidgetInstalledPath();
422 DPL::String srcPath = DPL::FromUTF8String(GlobalConfig::GetWidgetSrcPath());
424 path += srcPath + L"/";
429 DPL::String WidgetDAOReadOnly::getFullPath() const
431 return L"file://" + getPath();
435 WidgetDAOReadOnly::getLocalizedInfo(const DPL::String& languageTag)
438 LogDebug("Getting Localized Info. Handle: " << m_widgetHandle);
439 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
441 ScopedTransaction transaction(&WrtDatabase::interface());
442 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
444 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
446 And(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle),
447 Equals<LocalizedWidgetInfo::widget_locale>(languageTag)));
448 LocalizedWidgetInfo::Row info = select->GetSingleRow();
449 WidgetLocalizedInfo result;
451 result.name = info.Get_widget_name();
452 result.shortName = info.Get_widget_shortname();
453 result.description = info.Get_widget_description();
454 result.license = info.Get_widget_license();
455 result.licenseHref = info.Get_widget_license_href();
457 transaction.Commit();
460 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info")
463 DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const
465 LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle);
466 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
468 ScopedTransaction transaction(&WrtDatabase::interface());
469 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
471 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
472 select->Where(Equals<WidgetFeature::app_id>(m_widgetHandle));
474 DbWidgetFeatureSet resultSet;
475 typedef std::list<WidgetFeature::Row> RowList;
476 RowList list = select->GetRowList();
478 for (RowList::iterator i = list.begin(); i != list.end(); ++i) {
479 DbWidgetFeature feature;
480 feature.name = i->Get_name();
481 feature.rejected = i->Get_rejected();
482 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
483 feature.pluginId = featureDao.GetPluginHandle();
484 resultSet.insert(feature);
486 transaction.Commit();
489 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
492 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
495 "Checking if widget has feature: " << featureName << ". Handle: " <<
497 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
499 ScopedTransaction transaction(&WrtDatabase::interface());
500 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
502 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
503 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
504 Equals<wrt::WidgetFeature::name>(
505 DPL::FromUTF8String(featureName))));
507 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
508 transaction.Commit();
509 return !rows.empty();
511 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
514 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
516 LogDebug("Getting DbWidget List");
517 DbWidgetDAOReadOnlyList list;
518 FOREACH(iterator, getTizenAppidList()) {
519 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
524 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
526 LogDebug("Checking if widget exist. Handle: " << handle);
527 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
529 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
530 select->Where(Equals<WidgetInfo::app_id>(handle));
532 WidgetInfo::Select::RowList rows = select->GetRowList();
534 return !rows.empty();
536 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
539 bool WidgetDAOReadOnly::isWidgetInstalled(const TizenAppId &tzAppId)
541 LogDebug("Checking if widget exist. tizen app id" << tzAppId);
542 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
544 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
545 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
547 WidgetInfo::Select::RowList rows = select->GetRowList();
549 return !rows.empty();
551 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
554 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
556 LogDebug("Getting WidgetExtranalFiles List");
557 ExternalLocationList result;
558 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
560 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
561 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
562 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
565 result.push_back(DPL::ToUTF8String(it->Get_path()));
568 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
572 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
573 CertificateSource source) const
575 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
578 Equals<WidgetCertificate::app_id>(m_widgetHandle),
579 Equals<WidgetCertificate::cert_source>(source)));
581 std::list<WidgetCertificate::Row> chainList = select->GetRowList();
583 CertificateChainList result;
585 FOREACH(iter, chainList)
586 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
590 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
592 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
595 size.width = row.Get_widget_width();
596 size.height = row.Get_widget_height();
598 LogDebug("Return size wxh = " <<
599 (!!size.width ? *size.width : -1) << " x " <<
600 (!!size.height ? *size.height : -1));
605 WidgetType WidgetDAOReadOnly::getWidgetType() const
607 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
608 DPL::OptionalInt result = row.Get_widget_type();
609 return WidgetType(static_cast<AppType>(*result));
612 WidgetGUID WidgetDAOReadOnly::getGUID() const
614 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
615 return row.Get_widget_id();
618 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
620 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
621 return row.Get_defaultlocale();
624 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
626 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
627 return row.Get_widget_version();
630 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
632 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
633 return row.Get_author_name();
636 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
638 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
639 return row.Get_author_email();
642 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
644 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
645 return row.Get_author_href();
648 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
650 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
651 return row.Get_min_version();
654 bool WidgetDAOReadOnly::getBackSupported() const
656 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
657 return row.Get_back_supported();
660 DPL::OptionalString WidgetDAOReadOnly::getCspPolicy() const
662 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
663 return row.Get_csp_policy();
666 DPL::OptionalString WidgetDAOReadOnly::getCspPolicyReportOnly() const
668 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
669 return row.Get_csp_policy_report_only();
672 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
674 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
675 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
677 if (ret.IsNull() || *ret == 0) {
679 } else { return true;
683 time_t WidgetDAOReadOnly::getInstallTime() const
685 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
687 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
688 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
690 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
692 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
693 "Cannot find widget. Handle: " << m_widgetHandle);
696 return static_cast<time_t>(*rows.front().Get_install_time());
698 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
701 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
703 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
705 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
706 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
708 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
710 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
711 "Cannot find widget. Handle: " << m_widgetHandle);
714 DPL::OptionalString value = rows.front().Get_splash_img_src();
715 if (value.IsNull()) {
716 return DPL::OptionalString::Null;
719 return DPL::OptionalString(getPath() + *value);
721 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
724 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::
725 getLocalizedIconList() const
727 //TODO check widget existance??
728 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
730 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
731 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
733 std::list<WidgetLocalizedIcon::Row> list =
734 select->GetRowList();
735 WidgetLocalizedIconList ret;
738 WidgetLocalizedIconRow icon = { it->Get_app_id(),
740 it->Get_widget_locale() };
745 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
748 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
750 //TODO check widget existance
751 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
753 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
754 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
755 select->OrderBy(DPL::TypeListDecl<OrderingAscending<wrt::WidgetIcon::
758 std::list<WidgetIcon::Row> list =
759 select->GetRowList();
763 WidgetIconRow icon = { it->Get_icon_id(),
766 it->Get_icon_width(),
767 it->Get_icon_height() };
772 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
775 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::
776 getLocalizedStartFileList() const
778 //TODO check widget existance
779 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
781 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
782 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
784 select->OrderBy("start_file_id ASC");
786 std::list<WidgetLocalizedStartFile::Row> list =
787 select->GetRowList();
788 LocalizedStartFileList ret;
791 WidgetLocalizedStartFileRow file = { it->Get_start_file_id(),
793 it->Get_widget_locale(),
795 it->Get_encoding() };
800 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
803 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList()
806 //TODO check widget existance
807 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
809 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
810 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
811 select->OrderBy("start_file_id ASC");
813 std::list<WidgetStartFile::Row> list =
814 select->GetRowList();
815 WidgetStartFileList ret;
818 WidgetStartFileRow file = { it->Get_start_file_id(),
825 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
828 WindowModeList WidgetDAOReadOnly::getWindowModes() const
830 //TODO check widget existance
831 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
833 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
834 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
836 return select->GetValueList<WidgetWindowModes::window_mode>();
838 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
841 std::string WidgetDAOReadOnly::getBaseFolder() const
843 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
844 DPL::Optional<DPL::String> ret = row.Get_base_folder();
845 std::string baseFolder;
847 baseFolder = DPL::ToUTF8String(*ret);
850 if (!baseFolder.empty()) {
857 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
859 //TODO check widget existance
860 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
862 WRT_DB_SELECT(select,
863 WidgetCertificateFingerprint,
864 &WrtDatabase::interface())
865 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
867 select->OrderBy("chainid");
868 WidgetCertificateFingerprint::Select::RowList rows =
869 select->GetRowList();
871 WidgetCertificateDataList outlCertificateData;
874 WidgetCertificateData data;
877 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
879 static_cast <WidgetCertificateData::Type>(it->Get_type());
880 data.chainId = it->Get_chainid();
881 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
882 data.strMD5Fingerprint =
883 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
884 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
885 data.strSHA1Fingerprint =
886 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
887 DPL::Optional<DPL::String> cname = it->Get_common_name();
889 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
891 outlCertificateData.push_back(data);
893 return outlCertificateData;
895 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
898 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
899 WidgetCertificateData::Owner owner,
900 WidgetCertificateData::Type type) const
902 //TODO check widget existance
903 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
905 WRT_DB_SELECT(select,
906 WidgetCertificateFingerprint,
907 &WrtDatabase::interface())
908 select->Where(And(And(
909 Equals<WidgetCertificateFingerprint::app_id>(
911 Equals<WidgetCertificateFingerprint::owner>(owner)),
912 Equals<WidgetCertificateFingerprint::type>(type)));
914 WidgetCertificateFingerprint::Select::RowList rows =
915 select->GetRowList();
917 FingerPrintList keys;
920 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
921 if (!sha1.IsNull()) {
922 keys.push_back(DPL::ToUTF8String(*sha1));
924 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
926 keys.push_back(DPL::ToUTF8String(*md5));
931 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
934 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
935 WidgetCertificateData::Owner owner,
936 WidgetCertificateData::Type type) const
938 //TODO check widget existance
939 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
941 WRT_DB_SELECT(select,
942 WidgetCertificateFingerprint,
943 &WrtDatabase::interface())
944 select->Where(And(And(
945 Equals<WidgetCertificateFingerprint::app_id>(
947 Equals<WidgetCertificateFingerprint::owner>(owner)),
948 Equals<WidgetCertificateFingerprint::type>(type)));
950 WidgetCertificateFingerprint::Select::RowList rows =
951 select->GetRowList();
953 WidgetCertificateCNList out;
956 DPL::Optional<DPL::String> cname = it->Get_common_name();
957 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
961 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
964 void WidgetDAOReadOnly::getWidgetAccessInfo(
965 WidgetAccessInfoList& outAccessInfoList) const
967 //TODO check widget existance
968 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
970 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
971 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
973 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
977 WidgetAccessInfo info;
979 info.strIRI = it->Get_iri();
980 DPL::OptionalInt access = it->Get_subdomain_access();
981 if (access.IsNull() || 0 == *access) {
982 info.bSubDomains = false;
983 } else if (1 == *access) {
984 info.bSubDomains = true;
987 outAccessInfoList.push_back(info);
990 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
993 void WidgetDAOReadOnly::getWidgetAllowNavigationInfo(
994 WidgetAllowNavigationInfoList& allowNavigationList) const
996 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
998 WRT_DB_SELECT(select, WidgetAllowNavigation, &WrtDatabase::interface())
999 select->Where(Equals<WidgetAllowNavigation::app_id>(m_widgetHandle));
1000 WidgetAllowNavigation::Select::RowList rows = select->GetRowList();
1003 WidgetAllowNavigationInfo info;
1004 info.scheme = it->Get_scheme();
1005 info.host = it->Get_host();
1006 allowNavigationList.push_back(info);
1009 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get allow-navigation info list")
1012 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
1014 //TODO check widget existance
1015 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1017 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
1018 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
1019 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
1021 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
1024 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
1026 //TODO check widget existance
1027 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
1028 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
1030 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
1033 void WidgetDAOReadOnly::getWidgetSettings(
1034 WidgetSettings& outWidgetSettings) const
1036 //TODO check widget existance
1037 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1039 WRT_DB_SELECT(select, SettingsList, &WrtDatabase::interface())
1040 select->Where(Equals<SettingsList::appId>(m_widgetHandle));
1042 SettingsList::Select::RowList rows = select->GetRowList();
1048 info.settingName = it->Get_settingName();
1049 info.settingValue = it->Get_settingValue();
1050 outWidgetSettings.push_back(info);
1053 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1056 void WidgetDAOReadOnly::getAppControlList(
1057 WidgetAppControlList& outAppControlList) const
1059 LogDebug("Getting getAppControlList. Handle: " << m_widgetHandle);
1060 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1062 ScopedTransaction transaction(&WrtDatabase::interface());
1063 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1065 WRT_DB_SELECT(select, AppControlInfo, &WrtDatabase::interface())
1066 select->Where(Equals<AppControlInfo::app_id>(m_widgetHandle));
1068 AppControlInfo::Select::RowList rows = select->GetRowList();
1071 LogDebug("AppControl list is empty. Handle: " <<
1076 WidgetAppControl ret;
1077 ret.src = it->Get_src();
1078 ret.operation = it->Get_operation();
1079 ret.uri = it->Get_uri();
1080 ret.mime = it->Get_mime();
1081 ret.disposition = static_cast<WidgetAppControl::Disposition>(it->Get_disposition());
1082 ret.index = it->Get_execute_index();
1083 outAppControlList.push_back(ret);
1086 transaction.Commit();
1088 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get AppControl list")
1091 PackagingType WidgetDAOReadOnly::getPackagingType() const
1093 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1094 DPL::OptionalInt result = row.Get_pkg_type();
1095 return PackagingType(static_cast<PkgType>(*result));
1098 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList)
1101 //TODO check widget existance
1102 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1103 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1105 typedef std::list<EncryptedResourceList::Row> RowList;
1106 RowList list = select->GetRowList();
1109 EncryptedFileInfo info;
1110 info.fileName = it->Get_resource();
1111 info.fileSize = it->Get_size();
1112 filesList.insert(info);
1116 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1118 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1120 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1121 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1123 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1125 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1126 "Cannot find widget. Handle: " << m_widgetHandle);
1129 return rows.front().Get_background_page();
1131 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1134 TizenPkgId WidgetDAOReadOnly::generatePkgId()
1136 std::string allowed("0123456789"
1137 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1138 "abcdefghijklmnopqrstuvwxyz");
1140 pkgId.resize(MAX_TIZENID_LENGTH);
1142 for (int i = 0; i < MAX_TIZENID_LENGTH; ++i) {
1143 pkgId[i] = allowed[rand_r(&seed) % allowed.length()];
1145 } while (isWidgetInstalled(pkgId));
1149 DPL::OptionalString WidgetDAOReadOnly::getWidgetInstalledPath() const
1151 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1153 using namespace DPL::DB::ORM;
1154 using namespace DPL::DB::ORM::wrt;
1155 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1156 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1158 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1160 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1161 "Cannot find widget. Handle: " << m_widgetHandle);
1164 return rows.front().Get_installed_path();
1166 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget installed path")
1169 PrivilegeList WidgetDAOReadOnly::getWidgetPrivilege() const
1171 //TODO check widget existance
1172 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1174 WRT_DB_SELECT(select, WidgetPrivilege, &WrtDatabase::interface())
1175 select->Where(Equals<WidgetPrivilege::app_id>(m_widgetHandle));
1177 return select->GetValueList<WidgetPrivilege::name>();
1179 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get PrivilegeList")
1182 WidgetSecurityModelVersion WidgetDAOReadOnly::getSecurityModelVersion() const
1184 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1185 DPL::OptionalInt result = row.Get_security_model_version();
1186 return static_cast<WidgetSecurityModelVersion>(*result);
1189 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1190 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1191 #undef CHECK_WIDGET_EXISTENCE
1192 } // namespace WrtDB