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
70 typedef DPL::DB::ORM::wrt::WidgetSecuritySettings::Row
71 WidgetSecuritySettingsRow;
74 using namespace DPL::DB::ORM;
75 using namespace DPL::DB::ORM::wrt;
77 WidgetInfoRow getWidgetInfoRow(int widgetHandle)
79 LogDebug("Getting WidgetInfo row. Handle: " << widgetHandle);
80 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
82 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
83 select->Where(Equals<WidgetInfo::app_id>(widgetHandle));
85 WidgetInfo::Select::RowList rows = select->GetRowList();
87 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
88 "Cannot find widget. Handle: " << widgetHandle);
92 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in GetWidgetInfoRow")
95 WidgetSecuritySettingsRow getWidgetSecuritySettingsRow(int widgetHandle)
97 LogDebug("Getting WidgetSecuritySettings row. Handle: " << widgetHandle);
98 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
100 using namespace DPL::DB::ORM;
101 using namespace DPL::DB::ORM::wrt;
102 WRT_DB_SELECT(select, WidgetSecuritySettings, &WrtDatabase::interface())
103 select->Where(Equals<WidgetSecuritySettings::app_id>(widgetHandle));
105 WidgetSecuritySettings::Select::RowList rows = select->GetRowList();
107 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
108 "Cannot find widget. Handle: " << widgetHandle);
112 SQL_CONNECTION_EXCEPTION_HANDLER_END(
113 "Failed in getWidgetSecuritySettingsRow")
116 const int MAX_TIZENID_LENGTH = 10;
118 TizenAppId getTizenAppIdByHandle(const DbWidgetHandle handle)
120 LogDebug("Getting TizenAppId by DbWidgetHandle: " << handle);
122 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
124 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
125 select->Where(Equals<WidgetInfo::app_id>(handle));
126 WidgetInfo::Select::RowList rowList = select->GetRowList();
128 if (rowList.empty()) {
129 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
130 "Failed to get widget by handle");
132 TizenAppId tzAppid = rowList.front().Get_tizen_appid();
136 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
139 TizenAppId getTizenAppIdByPkgId(const TizenPkgId tzPkgid)
141 LogDebug("Getting TizenAppId by pkgid : " << tzPkgid);
142 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
144 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
145 select->Where(Equals<WidgetInfo::tizen_pkgid>(tzPkgid));
146 WidgetInfo::Select::RowList rowList = select->GetRowList();
148 if (rowList.empty()) {
149 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
150 "Failed to get widget by handle");
152 TizenAppId tzAppid = rowList.front().Get_tizen_appid();
156 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
159 TizenPkgId getTizenPkgIdByHandle(const DbWidgetHandle handle)
161 LogDebug("Getting TizenPkgId by DbWidgetHandle: " << handle);
163 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
165 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
166 select->Where(Equals<WidgetInfo::app_id>(handle));
167 WidgetInfo::Select::RowList rowList = select->GetRowList();
169 if (rowList.empty()) {
170 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
171 "Failed to get widget by handle");
173 TizenPkgId tzPkgid = rowList.front().Get_tizen_pkgid();
177 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
180 TizenPkgId getTizenPkgIdByAppId(const TizenAppId tzAppid)
182 LogDebug("Getting TizenPkgId by TizenAppId: " << tzAppid);
184 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
186 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
187 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppid));
188 WidgetInfo::Select::RowList rowList = select->GetRowList();
190 if (rowList.empty()) {
191 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
192 "Failed to get widget by tizen appId");
194 TizenPkgId tzPkgid = rowList.front().Get_tizen_pkgid();
198 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed get pkgId")
202 IWidgetSecurity::~IWidgetSecurity()
205 WidgetDAOReadOnly::WidgetDAOReadOnly(DbWidgetHandle widgetHandle) :
206 m_widgetHandle(widgetHandle)
209 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::OptionalString widgetGUID) :
210 m_widgetHandle(WidgetDAOReadOnly::getHandle(widgetGUID))
213 WidgetDAOReadOnly::WidgetDAOReadOnly(TizenAppId tzAppid) :
214 m_widgetHandle(WidgetDAOReadOnly::getHandle(tzAppid))
217 WidgetDAOReadOnly::~WidgetDAOReadOnly()
220 DbWidgetHandle WidgetDAOReadOnly::getHandle() const
222 return m_widgetHandle;
225 DbWidgetHandle WidgetDAOReadOnly::getHandle(const WidgetGUID GUID)
227 LogDebug("Getting WidgetHandle by GUID [" << GUID << "]");
229 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
231 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
232 select->Where(Equals<WidgetInfo::widget_id>(GUID));
233 WidgetInfo::Select::RowList rowList = select->GetRowList();
235 if (rowList.empty()) {
236 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
237 "Failed to get widget by guid");
239 return rowList.front().Get_app_id();
241 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
244 DbWidgetHandle WidgetDAOReadOnly::getHandle(const DPL::String tzAppId)
246 LogDebug("Getting WidgetHandle by tizen app id [" << tzAppId << "]");
248 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
250 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
251 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
252 WidgetInfo::Select::RowList rowList = select->GetRowList();
254 if (rowList.empty()) {
255 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
256 "Failed to get widget by package name");
258 return rowList.front().Get_app_id();
260 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
263 TizenAppId WidgetDAOReadOnly::getTzAppId() const
265 return getTizenAppIdByHandle(m_widgetHandle);
268 TizenAppId WidgetDAOReadOnly::getTzAppId(const WidgetGUID GUID)
270 return getTizenAppIdByHandle(getHandle(GUID));
273 TizenAppId WidgetDAOReadOnly::getTzAppId(const DbWidgetHandle handle)
275 return getTizenAppIdByHandle(handle);
278 TizenAppId WidgetDAOReadOnly::getTzAppId(const TizenPkgId tzPkgid)
280 return getTizenAppIdByPkgId(tzPkgid);
283 TizenPkgId WidgetDAOReadOnly::getTzPkgId() const
285 return getTizenPkgIdByHandle(m_widgetHandle);
288 TizenPkgId WidgetDAOReadOnly::getTzPkgId(const DbWidgetHandle handle)
290 return getTizenPkgIdByHandle(handle);
293 TizenPkgId WidgetDAOReadOnly::getTzPkgId(const TizenAppId tzAppid)
295 return getTizenPkgIdByAppId(tzAppid);
298 PropertyDAOReadOnly::WidgetPropertyKeyList
299 WidgetDAOReadOnly::getPropertyKeyList() const
301 return PropertyDAOReadOnly::GetPropertyKeyList(getTzAppId());
304 PropertyDAOReadOnly::WidgetPreferenceList
305 WidgetDAOReadOnly::getPropertyList() const
307 return PropertyDAOReadOnly::GetPropertyList(getTzAppId());
310 PropertyDAOReadOnly::WidgetPropertyValue WidgetDAOReadOnly::getPropertyValue(
311 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
313 return PropertyDAOReadOnly::GetPropertyValue(getTzAppId(), key);
316 DPL::OptionalInt WidgetDAOReadOnly::checkPropertyReadFlag(
317 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
319 return PropertyDAOReadOnly::CheckPropertyReadFlag(getTzAppId(), key);
322 DPL::String WidgetDAOReadOnly::getPath() const
324 DPL::String path = *getWidgetInstalledPath();
325 DPL::String srcPath = DPL::FromUTF8String(GlobalConfig::GetWidgetSrcPath());
327 path += srcPath + L"/";
332 DPL::String WidgetDAOReadOnly::getFullPath() const
334 return L"file://" + getPath();
338 WidgetDAOReadOnly::getLocalizedInfo(const DPL::String& languageTag)
341 LogDebug("Getting Localized Info. Handle: " << m_widgetHandle);
342 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
344 ScopedTransaction transaction(&WrtDatabase::interface());
345 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
347 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
349 And(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle),
350 Equals<LocalizedWidgetInfo::widget_locale>(languageTag)));
351 LocalizedWidgetInfo::Row info = select->GetSingleRow();
352 WidgetLocalizedInfo result;
354 result.name = info.Get_widget_name();
355 result.shortName = info.Get_widget_shortname();
356 result.description = info.Get_widget_description();
357 result.license = info.Get_widget_license();
358 result.licenseHref = info.Get_widget_license_href();
360 transaction.Commit();
363 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info")
366 DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const
368 LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle);
369 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
371 ScopedTransaction transaction(&WrtDatabase::interface());
372 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
374 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
375 select->Where(Equals<WidgetFeature::app_id>(m_widgetHandle));
377 DbWidgetFeatureSet resultSet;
378 typedef std::list<WidgetFeature::Row> RowList;
379 RowList list = select->GetRowList();
381 for (RowList::iterator i = list.begin(); i != list.end(); ++i) {
382 DbWidgetFeature feature;
383 feature.name = i->Get_name();
384 feature.rejected = i->Get_rejected();
385 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
386 feature.pluginId = featureDao.GetPluginHandle();
387 resultSet.insert(feature);
389 transaction.Commit();
392 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
395 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
398 "Checking if widget has feature: " << featureName << ". Handle: " <<
400 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
402 ScopedTransaction transaction(&WrtDatabase::interface());
403 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
405 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
406 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
407 Equals<wrt::WidgetFeature::name>(
408 DPL::FromUTF8String(featureName))));
410 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
411 transaction.Commit();
412 return !rows.empty();
414 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
417 HostList WidgetDAOReadOnly::getAccessHostList() const
419 LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle);
420 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
422 ScopedTransaction transaction(&WrtDatabase::interface());
423 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
425 WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface())
426 select->Where(Equals<WidgetAccessHost::app_id>(m_widgetHandle));
427 std::list<WidgetAccessHost::host::ColumnType> values =
428 select->GetValueList<WidgetAccessHost::host>();
431 ret.push_back(DPL::ToUTF8String(*it));
433 transaction.Commit();
436 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
439 bool WidgetDAOReadOnly::getAccessNetworkMode() const
441 //TODO there is no column access_network
442 //it was removed in "Widget localization overhaul
446 DbWidgetHandleList WidgetDAOReadOnly::getHandleList()
448 LogDebug("Getting DbWidgetHandle List");
449 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
451 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
452 return select->GetValueList<WidgetInfo::app_id>();
454 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
457 TizenAppIdList WidgetDAOReadOnly::getTizenAppidList()
459 LogDebug("Getting Pkgname List ");
460 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
462 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
463 return select->GetValueList<WidgetInfo::tizen_appid>();
465 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
468 TizenPkgIdList WidgetDAOReadOnly::getTizenPkgidList()
470 LogDebug("Getting Pkgid List ");
471 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
473 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
474 return select->GetValueList<WidgetInfo::tizen_pkgid>();
476 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgid list")
479 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
481 LogDebug("Getting DbWidget List");
482 DbWidgetDAOReadOnlyList list;
483 FOREACH(iterator, getHandleList()) {
484 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
489 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
491 LogDebug("Checking if widget exist. Handle: " << handle);
492 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
494 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
495 select->Where(Equals<WidgetInfo::app_id>(handle));
497 WidgetInfo::Select::RowList rows = select->GetRowList();
499 return !rows.empty();
501 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
504 bool WidgetDAOReadOnly::isWidgetInstalled(const TizenAppId &tzAppId)
506 LogDebug("Checking if widget exist. tizen app id" << tzAppId);
507 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
509 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
510 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
512 WidgetInfo::Select::RowList rows = select->GetRowList();
514 return !rows.empty();
516 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
519 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
521 LogDebug("Getting WidgetExtranalFiles List");
522 ExternalLocationList result;
523 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
525 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
526 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
527 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
530 result.push_back(DPL::ToUTF8String(it->Get_path()));
533 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
537 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
538 CertificateSource source) const
540 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
543 Equals<WidgetCertificate::app_id>(m_widgetHandle),
544 Equals<WidgetCertificate::cert_source>(source)));
546 std::list<WidgetCertificate::Row> chainList = select->GetRowList();
548 CertificateChainList result;
550 FOREACH(iter, chainList)
551 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
555 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
557 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
560 size.width = row.Get_widget_width();
561 size.height = row.Get_widget_height();
563 LogDebug("Return size wxh = " <<
564 (!!size.width ? *size.width : -1) << " x " <<
565 (!!size.height ? *size.height : -1));
570 WidgetType WidgetDAOReadOnly::getWidgetType() const
572 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
573 DPL::OptionalInt result = row.Get_widget_type();
574 return WidgetType(static_cast<AppType>(*result));
577 WidgetGUID WidgetDAOReadOnly::getGUID() const
579 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
580 return row.Get_widget_id();
583 DPL::OptionalString WidgetDAOReadOnly::getTizenAppId() const
585 return DPL::OptionalString(getTzAppId());
588 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
590 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
591 return row.Get_defaultlocale();
594 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
596 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
597 return row.Get_widget_version();
600 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
602 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
603 return row.Get_author_name();
606 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
608 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
609 return row.Get_author_email();
612 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
614 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
615 return row.Get_author_href();
618 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
620 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
621 return row.Get_min_version();
624 std::string WidgetDAOReadOnly::getShareHref() const
626 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
628 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
629 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
630 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
633 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
634 "Cannot find widget. Handle: " << m_widgetHandle);
637 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
638 std::string ret = "";
639 if (!value.IsNull()) {
640 ret = DPL::ToUTF8String(*value);
644 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
647 bool WidgetDAOReadOnly::getBackSupported() const
649 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
650 return row.Get_back_supported();
653 bool WidgetDAOReadOnly::isRecognized() const
655 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
656 DPL::OptionalInt result = row.Get_recognized();
657 if (result.IsNull()) {
660 return static_cast<bool>(*result);
663 bool WidgetDAOReadOnly::isDistributorSigned() const
665 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
666 DPL::OptionalInt result = row.Get_distributor_signed();
667 if (result.IsNull()) {
670 return static_cast<bool>(*result);
673 bool WidgetDAOReadOnly::isTrusted() const
676 // widget with verified distributor signature is trusted
677 return isDistributorSigned();
680 DPL::OptionalString WidgetDAOReadOnly::getCspPolicy() const
682 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
683 return row.Get_csp_policy();
686 DPL::OptionalString WidgetDAOReadOnly::getCspPolicyReportOnly() const
688 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
689 return row.Get_csp_policy_report_only();
692 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
694 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
695 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
697 if (ret.IsNull() || *ret == 0) {
699 } else { return true;
703 time_t WidgetDAOReadOnly::getInstallTime() const
705 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
707 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
708 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
710 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
712 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
713 "Cannot find widget. Handle: " << m_widgetHandle);
716 return static_cast<time_t>(*rows.front().Get_install_time());
718 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
721 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
723 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
725 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
726 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
728 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
730 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
731 "Cannot find widget. Handle: " << m_widgetHandle);
734 DPL::OptionalString value = rows.front().Get_splash_img_src();
735 if (value.IsNull()) {
736 return DPL::OptionalString::Null;
739 return DPL::OptionalString(getPath() + *value);
741 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
744 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::
745 getLocalizedIconList() const
747 //TODO check widget existance??
748 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
750 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
751 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
753 std::list<WidgetLocalizedIcon::Row> list =
754 select->GetRowList();
755 WidgetLocalizedIconList ret;
758 WidgetLocalizedIconRow icon = { it->Get_app_id(),
760 it->Get_widget_locale() };
765 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
768 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
770 //TODO check widget existance
771 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
773 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
774 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
775 select->OrderBy(DPL::TypeListDecl<OrderingAscending<wrt::WidgetIcon::
778 std::list<WidgetIcon::Row> list =
779 select->GetRowList();
783 WidgetIconRow icon = { it->Get_icon_id(),
786 it->Get_icon_width(),
787 it->Get_icon_height() };
792 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
795 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::
796 getLocalizedStartFileList() const
798 //TODO check widget existance
799 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
801 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
802 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
804 select->OrderBy("start_file_id ASC");
806 std::list<WidgetLocalizedStartFile::Row> list =
807 select->GetRowList();
808 LocalizedStartFileList ret;
811 WidgetLocalizedStartFileRow file = { it->Get_start_file_id(),
813 it->Get_widget_locale(),
815 it->Get_encoding() };
820 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
823 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList()
826 //TODO check widget existance
827 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
829 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
830 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
831 select->OrderBy("start_file_id ASC");
833 std::list<WidgetStartFile::Row> list =
834 select->GetRowList();
835 WidgetStartFileList ret;
838 WidgetStartFileRow file = { it->Get_start_file_id(),
845 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
848 WindowModeList WidgetDAOReadOnly::getWindowModes() const
850 //TODO check widget existance
851 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
853 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
854 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
856 return select->GetValueList<WidgetWindowModes::window_mode>();
858 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
861 std::string WidgetDAOReadOnly::getBaseFolder() const
863 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
864 DPL::Optional<DPL::String> ret = row.Get_base_folder();
865 std::string baseFolder;
867 baseFolder = DPL::ToUTF8String(*ret);
870 if (!baseFolder.empty()) {
877 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
879 //TODO check widget existance
880 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
882 WRT_DB_SELECT(select,
883 WidgetCertificateFingerprint,
884 &WrtDatabase::interface())
885 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
887 select->OrderBy("chainid");
888 WidgetCertificateFingerprint::Select::RowList rows =
889 select->GetRowList();
891 WidgetCertificateDataList outlCertificateData;
894 WidgetCertificateData data;
897 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
899 static_cast <WidgetCertificateData::Type>(it->Get_type());
900 data.chainId = it->Get_chainid();
901 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
902 data.strMD5Fingerprint =
903 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
904 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
905 data.strSHA1Fingerprint =
906 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
907 DPL::Optional<DPL::String> cname = it->Get_common_name();
909 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
911 outlCertificateData.push_back(data);
913 return outlCertificateData;
915 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
918 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
919 WidgetCertificateData::Owner owner,
920 WidgetCertificateData::Type type) const
922 //TODO check widget existance
923 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
925 WRT_DB_SELECT(select,
926 WidgetCertificateFingerprint,
927 &WrtDatabase::interface())
928 select->Where(And(And(
929 Equals<WidgetCertificateFingerprint::app_id>(
931 Equals<WidgetCertificateFingerprint::owner>(owner)),
932 Equals<WidgetCertificateFingerprint::type>(type)));
934 WidgetCertificateFingerprint::Select::RowList rows =
935 select->GetRowList();
937 FingerPrintList keys;
940 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
941 if (!sha1.IsNull()) {
942 keys.push_back(DPL::ToUTF8String(*sha1));
944 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
946 keys.push_back(DPL::ToUTF8String(*md5));
951 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
954 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
955 WidgetCertificateData::Owner owner,
956 WidgetCertificateData::Type type) const
958 //TODO check widget existance
959 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
961 WRT_DB_SELECT(select,
962 WidgetCertificateFingerprint,
963 &WrtDatabase::interface())
964 select->Where(And(And(
965 Equals<WidgetCertificateFingerprint::app_id>(
967 Equals<WidgetCertificateFingerprint::owner>(owner)),
968 Equals<WidgetCertificateFingerprint::type>(type)));
970 WidgetCertificateFingerprint::Select::RowList rows =
971 select->GetRowList();
973 WidgetCertificateCNList out;
976 DPL::Optional<DPL::String> cname = it->Get_common_name();
977 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
981 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
984 void WidgetDAOReadOnly::getWidgetAccessInfo(
985 WidgetAccessInfoList& outAccessInfoList) const
987 //TODO check widget existance
988 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
990 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
991 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
993 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
997 WidgetAccessInfo info;
999 info.strIRI = it->Get_iri();
1000 DPL::OptionalInt access = it->Get_subdomain_access();
1001 if (access.IsNull() || 0 == *access) {
1002 info.bSubDomains = false;
1003 } else if (1 == *access) {
1004 info.bSubDomains = true;
1007 outAccessInfoList.push_back(info);
1010 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
1013 void WidgetDAOReadOnly::getWidgetAllowNavigationInfo(
1014 WidgetAllowNavigationInfoList& allowNavigationList) const
1016 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1018 WRT_DB_SELECT(select, WidgetAllowNavigation, &WrtDatabase::interface())
1019 select->Where(Equals<WidgetAllowNavigation::app_id>(m_widgetHandle));
1020 WidgetAllowNavigation::Select::RowList rows = select->GetRowList();
1023 WidgetAllowNavigationInfo info;
1024 info.scheme = it->Get_scheme();
1025 info.host = it->Get_host();
1026 allowNavigationList.push_back(info);
1029 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get allow-navigation info list")
1032 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
1034 //TODO check widget existance
1035 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1037 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
1038 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
1039 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
1041 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
1044 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
1046 //TODO check widget existance
1047 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
1048 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
1050 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
1053 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
1055 using namespace WrtDB::WidgetConfig;
1056 std::ostringstream path;
1058 TizenAppId tzAppId = getTzAppId();
1060 path << GetWidgetPersistentStoragePath(tzAppId);
1062 path << GlobalConfig::GetCookieDatabaseFile();
1067 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
1069 std::ostringstream path;
1070 TizenAppId tzPkgId = getTizenPkgId();
1071 path << WidgetConfig::GetWidgetWebLocalStoragePath(tzPkgId);
1077 void WidgetDAOReadOnly::getWidgetSettings(
1078 WidgetSettings& outWidgetSettings) const
1080 //TODO check widget existance
1081 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1083 WRT_DB_SELECT(select, SettingsList, &WrtDatabase::interface())
1084 select->Where(Equals<SettingsList::appId>(m_widgetHandle));
1086 SettingsList::Select::RowList rows = select->GetRowList();
1092 info.settingName = it->Get_settingName();
1093 info.settingValue = it->Get_settingValue();
1094 outWidgetSettings.push_back(info);
1097 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1100 void WidgetDAOReadOnly::getAppControlList(
1101 WidgetAppControlList& outAppControlList) const
1103 LogDebug("Getting getAppControlList. Handle: " << m_widgetHandle);
1104 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1106 ScopedTransaction transaction(&WrtDatabase::interface());
1107 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1109 WRT_DB_SELECT(select, AppControlInfo, &WrtDatabase::interface())
1110 select->Where(Equals<AppControlInfo::app_id>(m_widgetHandle));
1112 AppControlInfo::Select::RowList rows = select->GetRowList();
1115 LogDebug("AppControl list is empty. Handle: " <<
1120 WidgetAppControl ret;
1121 ret.src = it->Get_src();
1122 ret.operation = it->Get_operation();
1123 ret.uri = it->Get_uri();
1124 ret.mime = it->Get_mime();
1125 ret.disposition = static_cast<WidgetAppControl::Disposition>(it->Get_disposition());
1126 ret.index = it->Get_execute_index();
1127 outAppControlList.push_back(ret);
1130 transaction.Commit();
1132 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get AppControl list")
1135 PackagingType WidgetDAOReadOnly::getPackagingType() const
1137 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1138 DPL::OptionalInt result = row.Get_pkg_type();
1139 return PackagingType(static_cast<PkgType>(*result));
1142 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList)
1145 //TODO check widget existance
1146 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1147 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1149 typedef std::list<EncryptedResourceList::Row> RowList;
1150 RowList list = select->GetRowList();
1153 EncryptedFileInfo info;
1154 info.fileName = it->Get_resource();
1155 info.fileSize = it->Get_size();
1156 filesList.insert(info);
1160 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1162 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1164 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1165 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1167 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1169 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1170 "Cannot find widget. Handle: " << m_widgetHandle);
1173 return rows.front().Get_background_page();
1175 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1178 TizenPkgId WidgetDAOReadOnly::generatePkgId()
1180 std::string allowed("0123456789"
1181 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1182 "abcdefghijklmnopqrstuvwxyz");
1184 pkgId.resize(MAX_TIZENID_LENGTH);
1186 for (int i = 0; i < MAX_TIZENID_LENGTH; ++i) {
1187 pkgId[i] = allowed[rand_r(&seed) % allowed.length()];
1189 } while (isWidgetInstalled(pkgId));
1193 SettingsType WidgetDAOReadOnly::getSecurityPopupUsage(void) const
1195 WidgetSecuritySettingsRow row =
1196 getWidgetSecuritySettingsRow(m_widgetHandle);
1197 DPL::OptionalInt result = row.Get_security_popup_usage();
1198 return static_cast<SettingsType>(*result);
1201 SettingsType WidgetDAOReadOnly::getGeolocationUsage(void) const
1203 WidgetSecuritySettingsRow row =
1204 getWidgetSecuritySettingsRow(m_widgetHandle);
1205 DPL::OptionalInt result = row.Get_geolocation_usage();
1206 return static_cast<SettingsType>(*result);
1209 SettingsType WidgetDAOReadOnly::getWebNotificationUsage(void) const
1211 WidgetSecuritySettingsRow row =
1212 getWidgetSecuritySettingsRow(m_widgetHandle);
1213 DPL::OptionalInt result = row.Get_web_notification_usage();
1214 return static_cast<SettingsType>(*result);
1217 SettingsType WidgetDAOReadOnly::getWebDatabaseUsage(void) const
1219 WidgetSecuritySettingsRow row =
1220 getWidgetSecuritySettingsRow(m_widgetHandle);
1221 DPL::OptionalInt result = row.Get_web_database_usage();
1222 return static_cast<SettingsType>(*result);
1225 DPL::OptionalString WidgetDAOReadOnly::getWidgetInstalledPath() const
1227 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1229 using namespace DPL::DB::ORM;
1230 using namespace DPL::DB::ORM::wrt;
1231 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1232 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1234 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1236 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1237 "Cannot find widget. Handle: " << m_widgetHandle);
1240 return rows.front().Get_installed_path();
1242 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget installed path")
1245 TizenPkgId WidgetDAOReadOnly::getTizenPkgId() const
1247 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1248 return row.Get_tizen_pkgid();
1251 PrivilegeList WidgetDAOReadOnly::getWidgetPrivilege() const
1253 //TODO check widget existance
1254 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1256 WRT_DB_SELECT(select, WidgetPrivilege, &WrtDatabase::interface())
1257 select->Where(Equals<WidgetPrivilege::app_id>(m_widgetHandle));
1259 return select->GetValueList<WidgetPrivilege::name>();
1261 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get PrivilegeList")
1264 WidgetSecurityModelVersion WidgetDAOReadOnly::getSecurityModelVersion() const
1266 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1267 DPL::OptionalInt result = row.Get_security_model_version();
1268 return static_cast<WidgetSecurityModelVersion>(*result);
1271 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1272 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1273 #undef CHECK_WIDGET_EXISTENCE
1274 } // namespace WrtDB