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")
181 IWacSecurity::~IWacSecurity()
184 WidgetDAOReadOnly::WidgetDAOReadOnly(DbWidgetHandle widgetHandle) :
185 m_widgetHandle(widgetHandle)
188 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::OptionalString widgetGUID) :
189 m_widgetHandle(WidgetDAOReadOnly::getHandle(widgetGUID))
192 WidgetDAOReadOnly::WidgetDAOReadOnly(TizenAppId tzAppid) :
193 m_widgetHandle(WidgetDAOReadOnly::getHandle(tzAppid))
196 WidgetDAOReadOnly::~WidgetDAOReadOnly()
199 DbWidgetHandle WidgetDAOReadOnly::getHandle() const
201 return m_widgetHandle;
204 DbWidgetHandle WidgetDAOReadOnly::getHandle(const WidgetGUID GUID)
206 LogDebug("Getting WidgetHandle by GUID [" << GUID << "]");
208 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
210 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
211 select->Where(Equals<WidgetInfo::widget_id>(GUID));
212 WidgetInfo::Select::RowList rowList = select->GetRowList();
214 if (rowList.empty()) {
215 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
216 "Failed to get widget by guid");
218 return rowList.front().Get_app_id();
220 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
223 DbWidgetHandle WidgetDAOReadOnly::getHandle(const DPL::String tzAppId)
225 LogDebug("Getting WidgetHandle by tizen app id [" << tzAppId << "]");
227 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
229 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
230 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
231 WidgetInfo::Select::RowList rowList = select->GetRowList();
233 if (rowList.empty()) {
234 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
235 "Failed to get widget by package name");
237 return rowList.front().Get_app_id();
239 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
242 TizenAppId WidgetDAOReadOnly::getTzAppId() const
244 return getTizenAppIdByHandle(m_widgetHandle);
247 TizenAppId WidgetDAOReadOnly::getTzAppId(const WidgetGUID GUID)
249 return getTizenAppIdByHandle(getHandle(GUID));
252 TizenAppId WidgetDAOReadOnly::getTzAppId(const DbWidgetHandle handle)
254 return getTizenAppIdByHandle(handle);
257 TizenAppId WidgetDAOReadOnly::getTzAppId(const TizenPkgId tzPkgid)
259 return getTizenAppIdByPkgId(tzPkgid);
262 TizenPkgId WidgetDAOReadOnly::getTzPkgId() const
264 return getTizenPkgIdByHandle(m_widgetHandle);
267 PropertyDAOReadOnly::WidgetPropertyKeyList
268 WidgetDAOReadOnly::getPropertyKeyList() const
270 return PropertyDAOReadOnly::GetPropertyKeyList(getTzAppId());
273 PropertyDAOReadOnly::WidgetPreferenceList
274 WidgetDAOReadOnly::getPropertyList() const
276 return PropertyDAOReadOnly::GetPropertyList(getTzAppId());
279 PropertyDAOReadOnly::WidgetPropertyValue WidgetDAOReadOnly::getPropertyValue(
280 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
282 return PropertyDAOReadOnly::GetPropertyValue(getTzAppId(), key);
285 DPL::OptionalInt WidgetDAOReadOnly::checkPropertyReadFlag(
286 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
288 return PropertyDAOReadOnly::CheckPropertyReadFlag(getTzAppId(), key);
291 DPL::String WidgetDAOReadOnly::getPath() const
293 DPL::String path = *getWidgetInstalledPath();
294 DPL::String srcPath = DPL::FromUTF8String(GlobalConfig::GetWidgetSrcPath());
296 path += srcPath + L"/";
301 DPL::String WidgetDAOReadOnly::getFullPath() const
303 return L"file://" + getPath();
307 WidgetDAOReadOnly::getLocalizedInfo(const DPL::String& languageTag)
310 LogDebug("Getting Localized Info. Handle: " << m_widgetHandle);
311 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
313 ScopedTransaction transaction(&WrtDatabase::interface());
314 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
316 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
318 And(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle),
319 Equals<LocalizedWidgetInfo::widget_locale>(languageTag)));
320 LocalizedWidgetInfo::Row info = select->GetSingleRow();
321 WidgetLocalizedInfo result;
323 result.name = info.Get_widget_name();
324 result.shortName = info.Get_widget_shortname();
325 result.description = info.Get_widget_description();
326 result.license = info.Get_widget_license();
327 result.licenseHref = info.Get_widget_license_href();
329 transaction.Commit();
332 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info")
335 DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const
337 LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle);
338 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
340 ScopedTransaction transaction(&WrtDatabase::interface());
341 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
343 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
344 select->Where(Equals<WidgetFeature::app_id>(m_widgetHandle));
346 DbWidgetFeatureSet resultSet;
347 typedef std::list<WidgetFeature::Row> RowList;
348 RowList list = select->GetRowList();
350 for (RowList::iterator i = list.begin(); i != list.end(); ++i) {
351 DbWidgetFeature feature;
352 feature.name = i->Get_name();
353 feature.rejected = i->Get_rejected();
354 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
355 feature.pluginId = featureDao.GetPluginHandle();
356 resultSet.insert(feature);
358 transaction.Commit();
361 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
364 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
367 "Checking if widget has feature: " << featureName << ". Handle: " <<
369 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
371 ScopedTransaction transaction(&WrtDatabase::interface());
372 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
374 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
375 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
376 Equals<wrt::WidgetFeature::name>(
377 DPL::FromUTF8String(featureName))));
379 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
380 transaction.Commit();
381 return !rows.empty();
383 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
386 HostList WidgetDAOReadOnly::getAccessHostList() const
388 LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle);
389 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
391 ScopedTransaction transaction(&WrtDatabase::interface());
392 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
394 WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface())
395 select->Where(Equals<WidgetAccessHost::app_id>(m_widgetHandle));
396 std::list<WidgetAccessHost::host::ColumnType> values =
397 select->GetValueList<WidgetAccessHost::host>();
400 ret.push_back(DPL::ToUTF8String(*it));
402 transaction.Commit();
405 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
408 bool WidgetDAOReadOnly::getAccessNetworkMode() const
410 //TODO there is no column access_network
411 //it was removed in "Widget localization overhaul
415 DbWidgetHandleList WidgetDAOReadOnly::getHandleList()
417 LogDebug("Getting DbWidgetHandle List");
418 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
420 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
421 return select->GetValueList<WidgetInfo::app_id>();
423 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
426 TizenAppIdList WidgetDAOReadOnly::getTizenAppidList()
428 LogDebug("Getting Pkgname List ");
429 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
431 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
432 return select->GetValueList<WidgetInfo::tizen_appid>();
434 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
437 TizenPkgIdList WidgetDAOReadOnly::getTizenPkgidList()
439 LogDebug("Getting Pkgid List ");
440 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
442 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
443 return select->GetValueList<WidgetInfo::tizen_pkgid>();
445 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgid list")
448 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
450 LogDebug("Getting DbWidget List");
451 DbWidgetDAOReadOnlyList list;
452 FOREACH(iterator, getHandleList()) {
453 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
458 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
460 LogDebug("Checking if widget exist. Handle: " << handle);
461 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
463 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
464 select->Where(Equals<WidgetInfo::app_id>(handle));
466 WidgetInfo::Select::RowList rows = select->GetRowList();
468 return !rows.empty();
470 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
473 bool WidgetDAOReadOnly::isWidgetInstalled(const TizenAppId &tzAppId)
475 LogDebug("Checking if widget exist. tizen app id" << tzAppId);
476 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
478 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
479 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
481 WidgetInfo::Select::RowList rows = select->GetRowList();
483 return !rows.empty();
485 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
488 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
490 LogDebug("Getting WidgetExtranalFiles List");
491 ExternalLocationList result;
492 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
494 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
495 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
496 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
499 result.push_back(DPL::ToUTF8String(it->Get_path()));
502 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
506 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
507 CertificateSource source) const
509 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
512 Equals<WidgetCertificate::app_id>(m_widgetHandle),
513 Equals<WidgetCertificate::cert_source>(source)));
515 std::list<WidgetCertificate::Row> chainList = select->GetRowList();
517 CertificateChainList result;
519 FOREACH(iter, chainList)
520 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
524 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
526 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
529 size.width = row.Get_widget_width();
530 size.height = row.Get_widget_height();
532 LogDebug("Return size wxh = " <<
533 (!!size.width ? *size.width : -1) << " x " <<
534 (!!size.height ? *size.height : -1));
539 WidgetType WidgetDAOReadOnly::getWidgetType() const
541 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
542 DPL::OptionalInt result = row.Get_widget_type();
543 return WidgetType(static_cast<AppType>(*result));
546 WidgetGUID WidgetDAOReadOnly::getGUID() const
548 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
549 return row.Get_widget_id();
552 DPL::OptionalString WidgetDAOReadOnly::getTizenAppId() const
554 return DPL::OptionalString(getTzAppId());
557 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
559 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
560 return row.Get_defaultlocale();
563 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
565 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
566 return row.Get_widget_version();
569 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
571 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
572 return row.Get_author_name();
575 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
577 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
578 return row.Get_author_email();
581 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
583 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
584 return row.Get_author_href();
587 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
589 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
590 return row.Get_min_version();
593 std::string WidgetDAOReadOnly::getShareHref() const
595 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
597 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
598 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
599 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
602 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
603 "Cannot find widget. Handle: " << m_widgetHandle);
606 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
607 std::string ret = "";
608 if (!value.IsNull()) {
609 ret = DPL::ToUTF8String(*value);
613 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
616 bool WidgetDAOReadOnly::getBackSupported() const
618 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
619 return row.Get_back_supported();
622 bool WidgetDAOReadOnly::isRecognized() const
624 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
625 DPL::OptionalInt result = row.Get_recognized();
626 if (result.IsNull()) {
629 return static_cast<bool>(*result);
632 bool WidgetDAOReadOnly::isWacSigned() const
634 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
635 DPL::OptionalInt result = row.Get_wac_signed();
636 if (result.IsNull()) {
639 return static_cast<bool>(*result);
642 bool WidgetDAOReadOnly::isDistributorSigned() const
644 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
645 DPL::OptionalInt result = row.Get_distributor_signed();
646 if (result.IsNull()) {
649 return static_cast<bool>(*result);
652 bool WidgetDAOReadOnly::isTrusted() const
655 // widget with verified distributor signature is trusted
656 return isDistributorSigned();
659 bool WidgetDAOReadOnly::isTestWidget() const
662 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
663 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
665 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
667 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
668 "Cannot find widget. Handle: " << m_widgetHandle);
671 return static_cast<bool>(rows.front().Get_test_widget());
673 Catch(DPL::DB::SqlConnection::Exception::Base){
674 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
675 "Failed to check IsTestWidget");
679 DPL::OptionalString WidgetDAOReadOnly::getCspPolicy() const
681 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
682 return row.Get_csp_policy();
685 DPL::OptionalString WidgetDAOReadOnly::getCspPolicyReportOnly() const
687 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
688 return row.Get_csp_policy_report_only();
691 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
693 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
694 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
696 if (ret.IsNull() || *ret == 0) {
698 } else { return true;
702 time_t WidgetDAOReadOnly::getInstallTime() const
704 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
706 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
707 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
709 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
711 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
712 "Cannot find widget. Handle: " << m_widgetHandle);
715 return static_cast<time_t>(*rows.front().Get_install_time());
717 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
720 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
722 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
724 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
725 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
727 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
729 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
730 "Cannot find widget. Handle: " << m_widgetHandle);
733 DPL::OptionalString value = rows.front().Get_splash_img_src();
734 if (value.IsNull()) {
735 return DPL::OptionalString::Null;
738 return DPL::OptionalString(getPath() + *value);
740 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
743 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::
744 getLocalizedIconList() const
746 //TODO check widget existance??
747 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
749 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
750 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
752 std::list<WidgetLocalizedIcon::Row> list =
753 select->GetRowList();
754 WidgetLocalizedIconList ret;
757 WidgetLocalizedIconRow icon = { it->Get_app_id(),
759 it->Get_widget_locale() };
764 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
767 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
769 //TODO check widget existance
770 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
772 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
773 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
774 select->OrderBy(DPL::TypeListDecl<OrderingAscending<wrt::WidgetIcon::
777 std::list<WidgetIcon::Row> list =
778 select->GetRowList();
782 WidgetIconRow icon = { it->Get_icon_id(),
785 it->Get_icon_width(),
786 it->Get_icon_height() };
791 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
794 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::
795 getLocalizedStartFileList() const
797 //TODO check widget existance
798 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
800 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
801 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
803 select->OrderBy("start_file_id ASC");
805 std::list<WidgetLocalizedStartFile::Row> list =
806 select->GetRowList();
807 LocalizedStartFileList ret;
810 WidgetLocalizedStartFileRow file = { it->Get_start_file_id(),
812 it->Get_widget_locale(),
814 it->Get_encoding() };
819 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
822 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList()
825 //TODO check widget existance
826 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
828 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
829 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
830 select->OrderBy("start_file_id ASC");
832 std::list<WidgetStartFile::Row> list =
833 select->GetRowList();
834 WidgetStartFileList ret;
837 WidgetStartFileRow file = { it->Get_start_file_id(),
844 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
847 WindowModeList WidgetDAOReadOnly::getWindowModes() const
849 //TODO check widget existance
850 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
852 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
853 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
855 return select->GetValueList<WidgetWindowModes::window_mode>();
857 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
860 std::string WidgetDAOReadOnly::getBaseFolder() const
862 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
863 DPL::Optional<DPL::String> ret = row.Get_base_folder();
864 std::string baseFolder;
866 baseFolder = DPL::ToUTF8String(*ret);
869 if (!baseFolder.empty()) {
876 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
878 //TODO check widget existance
879 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
881 WRT_DB_SELECT(select,
882 WidgetCertificateFingerprint,
883 &WrtDatabase::interface())
884 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
886 select->OrderBy("chainid");
887 WidgetCertificateFingerprint::Select::RowList rows =
888 select->GetRowList();
890 WidgetCertificateDataList outlCertificateData;
893 WidgetCertificateData data;
896 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
898 static_cast <WidgetCertificateData::Type>(it->Get_type());
899 data.chainId = it->Get_chainid();
900 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
901 data.strMD5Fingerprint =
902 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
903 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
904 data.strSHA1Fingerprint =
905 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
906 DPL::Optional<DPL::String> cname = it->Get_common_name();
908 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
910 outlCertificateData.push_back(data);
912 return outlCertificateData;
914 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
917 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
918 WidgetCertificateData::Owner owner,
919 WidgetCertificateData::Type type) const
921 //TODO check widget existance
922 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
924 WRT_DB_SELECT(select,
925 WidgetCertificateFingerprint,
926 &WrtDatabase::interface())
927 select->Where(And(And(
928 Equals<WidgetCertificateFingerprint::app_id>(
930 Equals<WidgetCertificateFingerprint::owner>(owner)),
931 Equals<WidgetCertificateFingerprint::type>(type)));
933 WidgetCertificateFingerprint::Select::RowList rows =
934 select->GetRowList();
936 FingerPrintList keys;
939 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
940 if (!sha1.IsNull()) {
941 keys.push_back(DPL::ToUTF8String(*sha1));
943 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
945 keys.push_back(DPL::ToUTF8String(*md5));
950 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
953 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
954 WidgetCertificateData::Owner owner,
955 WidgetCertificateData::Type type) const
957 //TODO check widget existance
958 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
960 WRT_DB_SELECT(select,
961 WidgetCertificateFingerprint,
962 &WrtDatabase::interface())
963 select->Where(And(And(
964 Equals<WidgetCertificateFingerprint::app_id>(
966 Equals<WidgetCertificateFingerprint::owner>(owner)),
967 Equals<WidgetCertificateFingerprint::type>(type)));
969 WidgetCertificateFingerprint::Select::RowList rows =
970 select->GetRowList();
972 WidgetCertificateCNList out;
975 DPL::Optional<DPL::String> cname = it->Get_common_name();
976 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
980 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
983 void WidgetDAOReadOnly::getWidgetAccessInfo(
984 WidgetAccessInfoList& outAccessInfoList) const
986 //TODO check widget existance
987 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
989 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
990 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
992 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
996 WidgetAccessInfo info;
998 info.strIRI = it->Get_iri();
999 DPL::OptionalInt access = it->Get_subdomain_access();
1000 if (access.IsNull() || 0 == *access) {
1001 info.bSubDomains = false;
1002 } else if (1 == *access) {
1003 info.bSubDomains = true;
1006 outAccessInfoList.push_back(info);
1009 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
1012 void WidgetDAOReadOnly::getWidgetAllowNavigationInfo(
1013 WidgetAllowNavigationInfoList& allowNavigationList) const
1015 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1017 WRT_DB_SELECT(select, WidgetAllowNavigation, &WrtDatabase::interface())
1018 select->Where(Equals<WidgetAllowNavigation::app_id>(m_widgetHandle));
1019 WidgetAllowNavigation::Select::RowList rows = select->GetRowList();
1022 WidgetAllowNavigationInfo info;
1023 info.scheme = it->Get_scheme();
1024 info.host = it->Get_host();
1025 allowNavigationList.push_back(info);
1028 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get allow-navigation info list")
1031 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
1033 //TODO check widget existance
1034 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1036 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
1037 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
1038 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
1040 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
1043 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
1045 //TODO check widget existance
1046 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
1047 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
1049 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
1052 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
1054 using namespace WrtDB::WidgetConfig;
1055 std::ostringstream path;
1057 TizenAppId tzAppId = getTzAppId();
1059 path << GetWidgetPersistentStoragePath(tzAppId);
1061 path << GlobalConfig::GetCookieDatabaseFile();
1066 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
1068 std::ostringstream path;
1069 TizenAppId tzPkgId = getTizenPkgId();
1070 path << WidgetConfig::GetWidgetWebLocalStoragePath(tzPkgId);
1076 void WidgetDAOReadOnly::getWidgetSettings(
1077 WidgetSettings& outWidgetSettings) const
1079 //TODO check widget existance
1080 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1082 WRT_DB_SELECT(select, SettingsList, &WrtDatabase::interface())
1083 select->Where(Equals<SettingsList::appId>(m_widgetHandle));
1085 SettingsList::Select::RowList rows = select->GetRowList();
1091 info.settingName = it->Get_settingName();
1092 info.settingValue = it->Get_settingValue();
1093 outWidgetSettings.push_back(info);
1096 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1099 void WidgetDAOReadOnly::getAppControlList(
1100 WidgetAppControlList& outAppControlList) const
1102 LogDebug("Getting getAppControlList. Handle: " << m_widgetHandle);
1103 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1105 ScopedTransaction transaction(&WrtDatabase::interface());
1106 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1108 WRT_DB_SELECT(select, AppControlInfo, &WrtDatabase::interface())
1109 select->Where(Equals<AppControlInfo::app_id>(m_widgetHandle));
1111 AppControlInfo::Select::RowList rows = select->GetRowList();
1114 LogDebug("AppControl list is empty. Handle: " <<
1119 WidgetAppControl ret;
1120 ret.src = it->Get_src();
1121 ret.operation = it->Get_operation();
1122 ret.uri = it->Get_uri();
1123 ret.mime = it->Get_mime();
1124 ret.disposition = static_cast<WidgetAppControl::Disposition>(it->Get_disposition());
1125 ret.index = it->Get_execute_index();
1126 outAppControlList.push_back(ret);
1129 transaction.Commit();
1131 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get AppControl list")
1134 PackagingType WidgetDAOReadOnly::getPackagingType() const
1136 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1137 DPL::OptionalInt result = row.Get_pkg_type();
1138 return PackagingType(static_cast<PkgType>(*result));
1141 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList)
1144 //TODO check widget existance
1145 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1146 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1148 typedef std::list<EncryptedResourceList::Row> RowList;
1149 RowList list = select->GetRowList();
1152 EncryptedFileInfo info;
1153 info.fileName = it->Get_resource();
1154 info.fileSize = it->Get_size();
1155 filesList.insert(info);
1159 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1161 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1163 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1164 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1166 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1168 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1169 "Cannot find widget. Handle: " << m_widgetHandle);
1172 return rows.front().Get_background_page();
1174 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1177 TizenPkgId WidgetDAOReadOnly::generatePkgId()
1179 std::string allowed("0123456789"
1180 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1181 "abcdefghijklmnopqrstuvwxyz");
1183 pkgId.resize(MAX_TIZENID_LENGTH);
1185 for (int i = 0; i < MAX_TIZENID_LENGTH; ++i) {
1186 pkgId[i] = allowed[rand_r(&seed) % allowed.length()];
1188 } while (isWidgetInstalled(pkgId));
1192 SettingsType WidgetDAOReadOnly::getSecurityPopupUsage(void) const
1194 WidgetSecuritySettingsRow row =
1195 getWidgetSecuritySettingsRow(m_widgetHandle);
1196 DPL::OptionalInt result = row.Get_security_popup_usage();
1197 return static_cast<SettingsType>(*result);
1200 SettingsType WidgetDAOReadOnly::getGeolocationUsage(void) const
1202 WidgetSecuritySettingsRow row =
1203 getWidgetSecuritySettingsRow(m_widgetHandle);
1204 DPL::OptionalInt result = row.Get_geolocation_usage();
1205 return static_cast<SettingsType>(*result);
1208 SettingsType WidgetDAOReadOnly::getWebNotificationUsage(void) const
1210 WidgetSecuritySettingsRow row =
1211 getWidgetSecuritySettingsRow(m_widgetHandle);
1212 DPL::OptionalInt result = row.Get_web_notification_usage();
1213 return static_cast<SettingsType>(*result);
1216 SettingsType WidgetDAOReadOnly::getWebDatabaseUsage(void) const
1218 WidgetSecuritySettingsRow row =
1219 getWidgetSecuritySettingsRow(m_widgetHandle);
1220 DPL::OptionalInt result = row.Get_web_database_usage();
1221 return static_cast<SettingsType>(*result);
1224 SettingsType WidgetDAOReadOnly::getFileSystemUsage(void) const
1226 WidgetSecuritySettingsRow row =
1227 getWidgetSecuritySettingsRow(m_widgetHandle);
1228 DPL::OptionalInt result = row.Get_file_system_usage();
1229 return static_cast<SettingsType>(*result);
1232 DPL::OptionalString WidgetDAOReadOnly::getWidgetInstalledPath() const
1234 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1236 using namespace DPL::DB::ORM;
1237 using namespace DPL::DB::ORM::wrt;
1238 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1239 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1241 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1243 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1244 "Cannot find widget. Handle: " << m_widgetHandle);
1247 return rows.front().Get_installed_path();
1249 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget installed path")
1252 TizenPkgId WidgetDAOReadOnly::getTizenPkgId() const
1254 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1255 return row.Get_tizen_pkgid();
1258 PrivilegeList WidgetDAOReadOnly::getWidgetPrivilege() const
1260 //TODO check widget existance
1261 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1263 WRT_DB_SELECT(select, WidgetPrivilege, &WrtDatabase::interface())
1264 select->Where(Equals<WidgetPrivilege::app_id>(m_widgetHandle));
1266 return select->GetValueList<WidgetPrivilege::name>();
1268 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get PrivilegeList")
1271 WidgetSecurityModelVersion WidgetDAOReadOnly::getSecurityModelVersion() const
1273 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1274 DPL::OptionalInt result = row.Get_security_model_version();
1275 return static_cast<WidgetSecurityModelVersion>(*result);
1278 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1279 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1280 #undef CHECK_WIDGET_EXISTENCE
1281 } // namespace WrtDB