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 //TODO in current solution in each getter there exists a check
42 //"IsWidgetInstalled". Maybe it should be verified, if it could be done
43 //differently (check in WidgetDAOReadOnly constructor)
45 #define SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN Try
47 #define SQL_CONNECTION_EXCEPTION_HANDLER_END(message) \
48 Catch(DPL::DB::SqlConnection::Exception::Base) { \
50 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError, \
54 #define CHECK_WIDGET_EXISTENCE(macro_transaction, macro_handle) \
55 if (!WidgetDAOReadOnly::isWidgetInstalled(macro_handle)) \
57 macro_transaction.Commit(); \
58 LogWarning("Cannot find widget. Handle: " << macro_handle); \
59 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist, \
60 "Cannot find widget. Handle: " << macro_handle); \
63 typedef DPL::DB::ORM::wrt::WidgetInfo::Row WidgetInfoRow;
64 typedef DPL::DB::ORM::wrt::WidgetFeature::widget_feature_id::ColumnType
66 typedef DPL::DB::ORM::wrt::WidgetSecuritySettings::Row
67 WidgetSecuritySettingsRow;
70 using namespace DPL::DB::ORM;
71 using namespace DPL::DB::ORM::wrt;
73 WidgetInfoRow getWidgetInfoRow(int widgetHandle)
75 LogDebug("Getting WidgetInfo row. Handle: " << widgetHandle);
76 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
78 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
79 select->Where(Equals<WidgetInfo::app_id>(widgetHandle));
81 WidgetInfo::Select::RowList rows = select->GetRowList();
83 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
84 "Cannot find widget. Handle: " << widgetHandle);
88 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in GetWidgetInfoRow")
91 WidgetSecuritySettingsRow getWidgetSecuritySettingsRow(int widgetHandle)
93 LogDebug("Getting WidgetSecuritySettings row. Handle: " << widgetHandle);
94 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
96 using namespace DPL::DB::ORM;
97 using namespace DPL::DB::ORM::wrt;
98 WRT_DB_SELECT(select, WidgetSecuritySettings, &WrtDatabase::interface())
99 select->Where(Equals<WidgetSecuritySettings::app_id>(widgetHandle));
101 WidgetSecuritySettings::Select::RowList rows = select->GetRowList();
103 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
104 "Cannot find widget. Handle: " << widgetHandle);
108 SQL_CONNECTION_EXCEPTION_HANDLER_END(
109 "Failed in getWidgetSecuritySettingsRow")
112 const int MAX_TIZENID_LENGTH = 10;
114 TizenAppId getTizenAppIdByHandle(const DbWidgetHandle handle)
116 LogDebug("Getting TizenAppId by DbWidgetHandle: " << handle);
118 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
120 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
121 select->Where(Equals<WidgetInfo::app_id>(handle));
122 WidgetInfo::Select::RowList rowList = select->GetRowList();
124 if (rowList.empty()) {
125 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
126 "Failed to get widget by handle");
128 TizenAppId tzAppid = rowList.front().Get_tizen_appid();
132 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
135 TizenAppId getTizenAppIdByPkgId(const TizenPkgId tzPkgid)
137 LogDebug("Getting TizenAppId by pkgid : " << tzPkgid);
138 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
140 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
141 select->Where(Equals<WidgetInfo::tizen_pkgid>(tzPkgid));
142 WidgetInfo::Select::RowList rowList = select->GetRowList();
144 if (rowList.empty()) {
145 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
146 "Failed to get widget by handle");
148 TizenAppId tzAppid = rowList.front().Get_tizen_appid();
152 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
156 IWacSecurity::~IWacSecurity()
159 WidgetDAOReadOnly::WidgetDAOReadOnly(DbWidgetHandle widgetHandle) :
160 m_widgetHandle(widgetHandle)
163 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::OptionalString widgetGUID) :
164 m_widgetHandle(WidgetDAOReadOnly::getHandle(widgetGUID))
167 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::String tzAppid) :
168 m_widgetHandle(WidgetDAOReadOnly::getHandle(tzAppid))
171 WidgetDAOReadOnly::~WidgetDAOReadOnly()
174 DbWidgetHandle WidgetDAOReadOnly::getHandle() const
176 return m_widgetHandle;
179 DbWidgetHandle WidgetDAOReadOnly::getHandle(const WidgetGUID GUID)
181 LogDebug("Getting WidgetHandle by GUID [" << GUID << "]");
183 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
185 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
186 select->Where(Equals<WidgetInfo::widget_id>(GUID));
187 WidgetInfo::Select::RowList rowList = select->GetRowList();
189 if (rowList.empty()) {
190 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
191 "Failed to get widget by guid");
193 return rowList.front().Get_app_id();
195 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
198 DbWidgetHandle WidgetDAOReadOnly::getHandle(const DPL::String tzAppId)
200 LogDebug("Getting WidgetHandle by tizen app id [" << tzAppId << "]");
202 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
204 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
205 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
206 WidgetInfo::Select::RowList rowList = select->GetRowList();
208 if (rowList.empty()) {
209 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
210 "Failed to get widget by package name");
212 return rowList.front().Get_app_id();
214 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
217 WidgetPkgName WidgetDAOReadOnly::getPkgName() const
222 WidgetPkgName WidgetDAOReadOnly::getPkgName(const WidgetGUID GUID)
224 return getTzAppId(GUID);
227 WidgetPkgName WidgetDAOReadOnly::getPkgName(const DbWidgetHandle handle)
229 return getTzAppId(handle);
232 TizenAppId WidgetDAOReadOnly::getTzAppId() const
234 return getTizenAppIdByHandle(m_widgetHandle);
237 TizenAppId WidgetDAOReadOnly::getTzAppId(const WidgetGUID GUID)
239 return getTizenAppIdByHandle(getHandle(GUID));
242 TizenAppId WidgetDAOReadOnly::getTzAppId(const DbWidgetHandle handle)
244 return getTizenAppIdByHandle(handle);
247 TizenAppId WidgetDAOReadOnly::getTzAppId(const TizenPkgId tzPkgid)
249 return getTizenAppIdByPkgId(tzPkgid);
252 PropertyDAOReadOnly::WidgetPropertyKeyList
253 WidgetDAOReadOnly::getPropertyKeyList() const
255 return PropertyDAOReadOnly::GetPropertyKeyList(getTzAppId());
258 PropertyDAOReadOnly::WidgetPreferenceList
259 WidgetDAOReadOnly::getPropertyList() const
261 return PropertyDAOReadOnly::GetPropertyList(getTzAppId());
264 PropertyDAOReadOnly::WidgetPropertyValue WidgetDAOReadOnly::getPropertyValue(
265 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
267 return PropertyDAOReadOnly::GetPropertyValue(getTzAppId(), key);
270 DPL::OptionalInt WidgetDAOReadOnly::checkPropertyReadFlag(
271 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
273 return PropertyDAOReadOnly::CheckPropertyReadFlag(getTzAppId(), key);
276 DPL::String WidgetDAOReadOnly::getPath() const
278 DPL::String path = *getWidgetInstalledPath();
279 DPL::String srcPath = DPL::FromUTF8String(GlobalConfig::GetWidgetSrcPath());
281 path += srcPath + L"/";
286 DPL::String WidgetDAOReadOnly::getFullPath() const
288 return L"file://" + getPath();
292 WidgetDAOReadOnly::getLocalizedInfo(const DPL::String& languageTag)
295 LogDebug("Getting Localized Info. Handle: " << m_widgetHandle);
296 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
298 ScopedTransaction transaction(&WrtDatabase::interface());
299 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
301 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
303 And(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle),
304 Equals<LocalizedWidgetInfo::widget_locale>(languageTag)));
305 LocalizedWidgetInfo::Row info = select->GetSingleRow();
306 WidgetLocalizedInfo result;
308 result.name = info.Get_widget_name();
309 result.shortName = info.Get_widget_shortname();
310 result.description = info.Get_widget_description();
311 result.license = info.Get_widget_license();
312 result.licenseHref = info.Get_widget_license_href();
314 transaction.Commit();
317 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info")
320 DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const
322 LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle);
323 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
325 ScopedTransaction transaction(&WrtDatabase::interface());
326 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
328 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
329 select->Where(Equals<WidgetFeature::app_id>(m_widgetHandle));
331 DbWidgetFeatureSet resultSet;
332 typedef std::list<WidgetFeature::Row> RowList;
333 RowList list = select->GetRowList();
335 for (RowList::iterator i = list.begin(); i != list.end(); ++i) {
336 DbWidgetFeature feature;
337 feature.name = i->Get_name();
338 feature.required = i->Get_required();
339 feature.rejected = i->Get_rejected();
340 feature.params = getFeatureParams(i->Get_widget_feature_id());
341 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
342 feature.pluginId = featureDao.GetPluginHandle();
343 resultSet.insert(feature);
345 transaction.Commit();
348 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
351 WidgetParamMap WidgetDAOReadOnly::getFeatureParams(int id)
353 WidgetFeatureId widgetFeatureId(id);
354 LogDebug("Getting feature Params. featureId: " << widgetFeatureId);
355 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
357 WRT_DB_SELECT(select, FeatureParam, &WrtDatabase::interface())
358 select->Where(Equals<FeatureParam::widget_feature_id>(
361 WidgetParamMap resultMap;
362 typedef std::list<FeatureParam::Row> RowList;
363 RowList list = select->GetRowList();
366 resultMap.insert(std::make_pair(i->Get_name(), i->Get_value()));
370 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get feature params")
373 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
376 "Checking if widget has feature: " << featureName << ". Handle: " <<
378 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
380 ScopedTransaction transaction(&WrtDatabase::interface());
381 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
383 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
384 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
385 Equals<wrt::WidgetFeature::name>(
386 DPL::FromUTF8String(featureName))));
388 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
389 transaction.Commit();
390 return !rows.empty();
392 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
395 HostList WidgetDAOReadOnly::getAccessHostList() const
397 LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle);
398 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
400 ScopedTransaction transaction(&WrtDatabase::interface());
401 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
403 WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface())
404 select->Where(Equals<WidgetAccessHost::app_id>(m_widgetHandle));
405 std::list<WidgetAccessHost::host::ColumnType> values =
406 select->GetValueList<WidgetAccessHost::host>();
409 ret.push_back(DPL::ToUTF8String(*it));
411 transaction.Commit();
414 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
417 bool WidgetDAOReadOnly::getAccessNetworkMode() const
419 //TODO there is no column access_network
420 //it was removed in "Widget localization overhaul
424 DbWidgetHandleList WidgetDAOReadOnly::getHandleList()
426 LogDebug("Getting DbWidgetHandle List");
427 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
429 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
430 return select->GetValueList<WidgetInfo::app_id>();
432 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
435 WidgetPkgNameList WidgetDAOReadOnly::getPkgnameList()
437 LogDebug("Getting Pkgname List ");
438 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
440 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
441 return select->GetValueList<WidgetInfo::tizen_appid>();
443 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
446 TizenAppIdList WidgetDAOReadOnly::getTizenAppidList()
448 LogDebug("Getting Pkgname List ");
449 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
451 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
452 return select->GetValueList<WidgetInfo::tizen_appid>();
454 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
457 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
459 LogDebug("Getting DbWidget List");
460 DbWidgetDAOReadOnlyList list;
461 FOREACH(iterator, getHandleList()) {
462 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
467 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
469 LogDebug("Checking if widget exist. Handle: " << handle);
470 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
472 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
473 select->Where(Equals<WidgetInfo::app_id>(handle));
475 WidgetInfo::Select::RowList rows = select->GetRowList();
477 return !rows.empty();
479 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
482 bool WidgetDAOReadOnly::isWidgetInstalled(const TizenAppId &tzAppId)
484 LogDebug("Checking if widget exist. tizen app id" << tzAppId);
485 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
487 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
488 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
490 WidgetInfo::Select::RowList rows = select->GetRowList();
492 return !rows.empty();
494 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
497 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
499 LogDebug("Getting WidgetExtranalFiles List");
500 ExternalLocationList result;
501 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
503 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
504 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
505 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
508 result.push_back(DPL::ToUTF8String(it->Get_path()));
511 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
515 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
516 CertificateSource source) const
518 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
521 Equals<WidgetCertificate::app_id>(m_widgetHandle),
522 Equals<WidgetCertificate::cert_source>(source)));
524 std::list<WidgetCertificate::Row> chainList = select->GetRowList();
526 CertificateChainList result;
528 FOREACH(iter, chainList)
529 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
533 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
535 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
538 size.width = row.Get_widget_width();
539 size.height = row.Get_widget_height();
541 LogDebug("Return size wxh = " <<
542 (!!size.width ? *size.width : -1) << " x " <<
543 (!!size.height ? *size.height : -1));
548 WidgetType WidgetDAOReadOnly::getWidgetType() const
550 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
551 DPL::OptionalInt result = row.Get_widget_type();
552 return WidgetType(static_cast<AppType>(*result));
555 WidgetGUID WidgetDAOReadOnly::getGUID() const
557 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
558 return row.Get_widget_id();
561 DPL::OptionalString WidgetDAOReadOnly::getTizenAppId() const
563 return DPL::OptionalString(getTzAppId());
566 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
568 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
569 return row.Get_defaultlocale();
572 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
574 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
575 return row.Get_widget_version();
578 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
580 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
581 return row.Get_author_name();
584 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
586 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
587 return row.Get_author_email();
590 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
592 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
593 return row.Get_author_href();
596 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
598 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
599 return row.Get_min_version();
602 std::string WidgetDAOReadOnly::getShareHref() const
604 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
606 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
607 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
608 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
611 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
612 "Cannot find widget. Handle: " << m_widgetHandle);
615 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
616 std::string ret = "";
617 if (!value.IsNull()) {
618 ret = DPL::ToUTF8String(*value);
622 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
625 bool WidgetDAOReadOnly::getBackSupported() const
627 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
628 return row.Get_back_supported();
631 bool WidgetDAOReadOnly::isRecognized() const
633 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
634 DPL::OptionalInt result = row.Get_recognized();
635 if (result.IsNull()) {
638 return static_cast<bool>(*result);
641 bool WidgetDAOReadOnly::isWacSigned() const
643 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
644 DPL::OptionalInt result = row.Get_wac_signed();
645 if (result.IsNull()) {
648 return static_cast<bool>(*result);
651 bool WidgetDAOReadOnly::isDistributorSigned() const
653 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
654 DPL::OptionalInt result = row.Get_distributor_signed();
655 if (result.IsNull()) {
658 return static_cast<bool>(*result);
661 bool WidgetDAOReadOnly::isTrusted() const
664 // widget with verified distributor signature is trusted
665 return isDistributorSigned();
668 bool WidgetDAOReadOnly::isTestWidget() const
671 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
672 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
674 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
676 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
677 "Cannot find widget. Handle: " << m_widgetHandle);
680 return static_cast<bool>(rows.front().Get_test_widget());
682 Catch(DPL::DB::SqlConnection::Exception::Base){
683 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
684 "Failed to check IsTestWidget");
688 DPL::OptionalString WidgetDAOReadOnly::getCspPolicy() const
690 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
691 return row.Get_csp_policy();
694 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
696 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
697 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
699 if (ret.IsNull() || *ret == 0) {
701 } else { return true;
705 time_t WidgetDAOReadOnly::getInstallTime() const
707 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
709 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
710 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
712 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
714 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
715 "Cannot find widget. Handle: " << m_widgetHandle);
718 return static_cast<time_t>(*rows.front().Get_install_time());
720 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
723 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
725 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
727 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
728 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
730 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
732 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
733 "Cannot find widget. Handle: " << m_widgetHandle);
736 DPL::OptionalString value = rows.front().Get_splash_img_src();
737 if (value.IsNull()) {
738 return DPL::OptionalString::Null;
741 return DPL::OptionalString(getPath() + *value);
743 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
746 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::
747 getLocalizedIconList() const
749 //TODO check widget existance??
750 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
752 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
753 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
755 std::list<WidgetLocalizedIcon::Row> list =
756 select->GetRowList();
757 WidgetLocalizedIconList ret;
760 WidgetLocalizedIconRow icon = { it->Get_app_id(),
762 it->Get_widget_locale() };
767 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
770 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
772 //TODO check widget existance
773 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
775 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
776 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
777 select->OrderBy(DPL::TypeListDecl<OrderingAscending<wrt::WidgetIcon::
780 std::list<WidgetIcon::Row> list =
781 select->GetRowList();
785 WidgetIconRow icon = { it->Get_icon_id(),
788 it->Get_icon_width(),
789 it->Get_icon_height() };
794 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
797 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::
798 getLocalizedStartFileList() const
800 //TODO check widget existance
801 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
803 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
804 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
806 select->OrderBy("start_file_id ASC");
808 std::list<WidgetLocalizedStartFile::Row> list =
809 select->GetRowList();
810 LocalizedStartFileList ret;
813 WidgetLocalizedStartFileRow file = { it->Get_start_file_id(),
815 it->Get_widget_locale(),
817 it->Get_encoding() };
822 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
825 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList()
828 //TODO check widget existance
829 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
831 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
832 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
833 select->OrderBy("start_file_id ASC");
835 std::list<WidgetStartFile::Row> list =
836 select->GetRowList();
837 WidgetStartFileList ret;
840 WidgetStartFileRow file = { it->Get_start_file_id(),
847 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
850 WindowModeList WidgetDAOReadOnly::getWindowModes() const
852 //TODO check widget existance
853 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
855 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
856 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
858 return select->GetValueList<WidgetWindowModes::window_mode>();
860 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
863 std::string WidgetDAOReadOnly::getBaseFolder() const
865 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
866 DPL::Optional<DPL::String> ret = row.Get_base_folder();
867 std::string baseFolder;
869 baseFolder = DPL::ToUTF8String(*ret);
872 if (!baseFolder.empty()) {
879 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
881 //TODO check widget existance
882 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
884 WRT_DB_SELECT(select,
885 WidgetCertificateFingerprint,
886 &WrtDatabase::interface())
887 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
889 select->OrderBy("chainid");
890 WidgetCertificateFingerprint::Select::RowList rows =
891 select->GetRowList();
893 WidgetCertificateDataList outlCertificateData;
896 WidgetCertificateData data;
899 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
901 static_cast <WidgetCertificateData::Type>(it->Get_type());
902 data.chainId = it->Get_chainid();
903 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
904 data.strMD5Fingerprint =
905 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
906 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
907 data.strSHA1Fingerprint =
908 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
909 DPL::Optional<DPL::String> cname = it->Get_common_name();
911 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
913 outlCertificateData.push_back(data);
915 return outlCertificateData;
917 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
920 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
921 WidgetCertificateData::Owner owner,
922 WidgetCertificateData::Type type) const
924 //TODO check widget existance
925 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
927 WRT_DB_SELECT(select,
928 WidgetCertificateFingerprint,
929 &WrtDatabase::interface())
930 select->Where(And(And(
931 Equals<WidgetCertificateFingerprint::app_id>(
933 Equals<WidgetCertificateFingerprint::owner>(owner)),
934 Equals<WidgetCertificateFingerprint::type>(type)));
936 WidgetCertificateFingerprint::Select::RowList rows =
937 select->GetRowList();
939 FingerPrintList keys;
942 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
943 if (!sha1.IsNull()) {
944 keys.push_back(DPL::ToUTF8String(*sha1));
946 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
948 keys.push_back(DPL::ToUTF8String(*md5));
953 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
956 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
957 WidgetCertificateData::Owner owner,
958 WidgetCertificateData::Type type) const
960 //TODO check widget existance
961 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
963 WRT_DB_SELECT(select,
964 WidgetCertificateFingerprint,
965 &WrtDatabase::interface())
966 select->Where(And(And(
967 Equals<WidgetCertificateFingerprint::app_id>(
969 Equals<WidgetCertificateFingerprint::owner>(owner)),
970 Equals<WidgetCertificateFingerprint::type>(type)));
972 WidgetCertificateFingerprint::Select::RowList rows =
973 select->GetRowList();
975 WidgetCertificateCNList out;
978 DPL::Optional<DPL::String> cname = it->Get_common_name();
979 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
983 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
986 ResourceAttributeList WidgetDAOReadOnly::getResourceAttribute(
987 const std::string &resourceId) const
989 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
990 select->Where(And(Equals<WidgetFeature::app_id>(m_widgetHandle),
991 Equals<WidgetFeature::name>(
992 DPL::FromUTF8String(resourceId))));
994 std::list<WidgetFeature::Row> list = select->GetRowList();
995 ResourceAttributeList result;
997 int widgetFeatureId = list.begin()->Get_widget_feature_id();
998 WidgetParamMap map = getFeatureParams(widgetFeatureId);
1001 result.push_back(DPL::ToUTF8String(i->first));
1006 void WidgetDAOReadOnly::getWidgetAccessInfo(
1007 WidgetAccessInfoList& outAccessInfoList) const
1009 //TODO check widget existance
1010 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1012 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
1013 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
1015 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
1019 WidgetAccessInfo info;
1021 info.strIRI = it->Get_iri();
1022 DPL::OptionalInt access = it->Get_subdomain_access();
1023 if (access.IsNull() || 0 == *access) {
1024 info.bSubDomains = false;
1025 } else if (1 == *access) {
1026 info.bSubDomains = true;
1029 outAccessInfoList.push_back(info);
1032 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
1035 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
1037 //TODO check widget existance
1038 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1040 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
1041 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
1042 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
1044 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
1047 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
1049 //TODO check widget existance
1050 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
1051 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
1053 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
1056 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
1058 using namespace WrtDB::WidgetConfig;
1059 std::ostringstream path;
1061 TizenAppId tzAppId = getTzAppId();
1063 path << GetWidgetPersistentStoragePath(tzAppId);
1065 path << GlobalConfig::GetCookieDatabaseFile();
1070 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
1072 std::ostringstream path;
1073 TizenAppId tzAppId = getTzAppId();
1074 path << WidgetConfig::GetWidgetWebLocalStoragePath(tzAppId);
1080 void WidgetDAOReadOnly::getWidgetSettings(
1081 WidgetSettings& outWidgetSettings) const
1083 //TODO check widget existance
1084 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1086 WRT_DB_SELECT(select, SettingsList, &WrtDatabase::interface())
1087 select->Where(Equals<SettingsList::appId>(m_widgetHandle));
1089 SettingsList::Select::RowList rows = select->GetRowList();
1095 info.settingName = it->Get_settingName();
1096 info.settingValue = it->Get_settingValue();
1097 outWidgetSettings.push_back(info);
1100 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1103 void WidgetDAOReadOnly::getAppServiceList(
1104 WidgetApplicationServiceList& outAppServiceList) const
1106 LogDebug("Getting getAppServiceList. Handle: " << m_widgetHandle);
1107 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1109 ScopedTransaction transaction(&WrtDatabase::interface());
1110 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1112 WRT_DB_SELECT(select, ApplicationServiceInfo, &WrtDatabase::interface())
1113 select->Where(Equals<ApplicationServiceInfo::app_id>(m_widgetHandle));
1115 ApplicationServiceInfo::Select::RowList rows = select->GetRowList();
1118 LogDebug("Application Service list is empty. Handle: " <<
1123 WidgetApplicationService ret;
1124 ret.src = it->Get_src();
1125 ret.operation = it->Get_operation();
1126 ret.scheme = it->Get_scheme();
1127 ret.mime = it->Get_mime();
1128 outAppServiceList.push_back(ret);
1131 transaction.Commit();
1133 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
1136 PackagingType WidgetDAOReadOnly::getPackagingType() const
1138 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1139 DPL::OptionalInt result = row.Get_pkg_type();
1140 return PackagingType(static_cast<PkgType>(*result));
1143 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList)
1146 //TODO check widget existance
1147 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1148 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1150 typedef std::list<EncryptedResourceList::Row> RowList;
1151 RowList list = select->GetRowList();
1154 EncryptedFileInfo info;
1155 info.fileName = it->Get_resource();
1156 info.fileSize = it->Get_size();
1157 filesList.insert(info);
1161 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1163 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1165 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1166 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1168 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1170 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1171 "Cannot find widget. Handle: " << m_widgetHandle);
1174 return rows.front().Get_background_page();
1176 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1179 TizenPkgId WidgetDAOReadOnly::generatePkgId()
1181 std::string allowed("0123456789"
1182 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1183 "abcdefghijklmnopqrstuvwxyz");
1185 pkgId.resize(MAX_TIZENID_LENGTH);
1187 for (int i = 0; i < MAX_TIZENID_LENGTH; ++i) {
1188 pkgId[i] = allowed[rand() % allowed.length()];
1190 } while (isWidgetInstalled(pkgId));
1194 SettingsType WidgetDAOReadOnly::getSecurityPopupUsage(void) const
1196 WidgetSecuritySettingsRow row =
1197 getWidgetSecuritySettingsRow(m_widgetHandle);
1198 DPL::OptionalInt result = row.Get_security_popup_usage();
1199 return static_cast<SettingsType>(*result);
1202 SettingsType WidgetDAOReadOnly::getGeolocationUsage(void) const
1204 WidgetSecuritySettingsRow row =
1205 getWidgetSecuritySettingsRow(m_widgetHandle);
1206 DPL::OptionalInt result = row.Get_geolocation_usage();
1207 return static_cast<SettingsType>(*result);
1210 SettingsType WidgetDAOReadOnly::getWebNotificationUsage(void) const
1212 WidgetSecuritySettingsRow row =
1213 getWidgetSecuritySettingsRow(m_widgetHandle);
1214 DPL::OptionalInt result = row.Get_web_notification_usage();
1215 return static_cast<SettingsType>(*result);
1218 SettingsType WidgetDAOReadOnly::getWebDatabaseUsage(void) const
1220 WidgetSecuritySettingsRow row =
1221 getWidgetSecuritySettingsRow(m_widgetHandle);
1222 DPL::OptionalInt result = row.Get_web_database_usage();
1223 return static_cast<SettingsType>(*result);
1226 SettingsType WidgetDAOReadOnly::getFileSystemUsage(void) const
1228 WidgetSecuritySettingsRow row =
1229 getWidgetSecuritySettingsRow(m_widgetHandle);
1230 DPL::OptionalInt result = row.Get_file_system_usage();
1231 return static_cast<SettingsType>(*result);
1234 DPL::OptionalString WidgetDAOReadOnly::getWidgetInstalledPath() const
1236 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1238 using namespace DPL::DB::ORM;
1239 using namespace DPL::DB::ORM::wrt;
1240 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1241 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1243 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1245 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1246 "Cannot find widget. Handle: " << m_widgetHandle);
1249 return rows.front().Get_installed_path();
1251 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget installed path")
1254 TizenPkgId WidgetDAOReadOnly::getTizenPkgId() const
1256 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1257 return row.Get_tizen_pkgid();
1260 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1261 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1262 #undef CHECK_WIDGET_EXISTENCE
1263 } // namespace WrtDB