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>
42 //TODO in current solution in each getter there exists a check
43 //"IsWidgetInstalled". Maybe it should be verified, if it could be done
44 //differently (check in WidgetDAOReadOnly constructor)
46 #define SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN Try
48 #define SQL_CONNECTION_EXCEPTION_HANDLER_END(message) \
49 Catch(DPL::DB::SqlConnection::Exception::Base) { \
51 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError, \
55 #define CHECK_WIDGET_EXISTENCE(macro_transaction, macro_handle) \
56 if (!WidgetDAOReadOnly::isWidgetInstalled(macro_handle)) \
58 macro_transaction.Commit(); \
59 LogWarning("Cannot find widget. Handle: " << macro_handle); \
60 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist, \
61 "Cannot find widget. Handle: " << macro_handle); \
65 typedef DPL::DB::ORM::wrt::WidgetInfo::Row WidgetInfoRow;
66 typedef DPL::DB::ORM::wrt::WidgetFeature::widget_feature_id::ColumnType
68 typedef DPL::DB::ORM::wrt::WidgetSecuritySettings::Row
69 WidgetSecuritySettingsRow;
73 using namespace DPL::DB::ORM;
74 using namespace DPL::DB::ORM::wrt;
76 WidgetInfoRow getWidgetInfoRow(int widgetHandle)
78 LogDebug("Getting WidgetInfo row. Handle: " << widgetHandle);
79 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
81 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
82 select->Where(Equals<WidgetInfo::app_id>(widgetHandle));
84 WidgetInfo::Select::RowList rows = select->GetRowList();
86 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
87 "Cannot find widget. Handle: " << widgetHandle);
91 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in GetWidgetInfoRow")
94 WidgetSecuritySettingsRow getWidgetSecuritySettingsRow(int widgetHandle)
96 LogDebug("Getting WidgetSecuritySettings row. Handle: " << widgetHandle);
97 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
99 using namespace DPL::DB::ORM;
100 using namespace DPL::DB::ORM::wrt;
101 WRT_DB_SELECT(select, WidgetSecuritySettings, &WrtDatabase::interface())
102 select->Where(Equals<WidgetSecuritySettings::app_id>(widgetHandle));
104 WidgetSecuritySettings::Select::RowList rows = select->GetRowList();
106 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
107 "Cannot find widget. Handle: " << widgetHandle);
111 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getWidgetSecuritySettingsRow")
114 const int MAX_TIZENID_LENGTH = 10;
116 WidgetPkgName getPkgNameByHandle(const DbWidgetHandle handle)
118 LogDebug("Getting WidgetPkgName by DbWidgetHandle: " << handle);
120 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
122 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
123 select->Where(Equals<WidgetInfo::app_id>(handle));
124 WidgetInfo::Select::RowList rowList = select->GetRowList();
126 if (rowList.empty()) {
127 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
128 "Failed to get widget by handle");
130 WidgetPkgName pkgname = rowList.front().Get_pkgname();
135 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
140 IWacSecurity::~IWacSecurity()
144 WidgetDAOReadOnly::WidgetDAOReadOnly(DbWidgetHandle widgetHandle) :
145 m_widgetHandle(widgetHandle)
149 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::OptionalString widgetGUID) :
150 m_widgetHandle(WidgetDAOReadOnly::getHandle(widgetGUID))
154 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::String pkgName) :
155 m_widgetHandle(WidgetDAOReadOnly::getHandle(pkgName))
160 WidgetDAOReadOnly::~WidgetDAOReadOnly()
164 DbWidgetHandle WidgetDAOReadOnly::getHandle() const
166 return m_widgetHandle;
169 DbWidgetHandle WidgetDAOReadOnly::getHandle(const WidgetGUID GUID)
171 LogDebug("Getting WidgetHandle by GUID [" << GUID << "]");
173 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
175 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
176 select->Where(Equals<WidgetInfo::widget_id>(GUID));
177 WidgetInfo::Select::RowList rowList = select->GetRowList();
179 if (rowList.empty()) {
180 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
181 "Failed to get widget by guid");
183 return rowList.front().Get_app_id();
185 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
188 DbWidgetHandle WidgetDAOReadOnly::getHandle(const DPL::String pkgName)
190 LogDebug("Getting WidgetHandle by Package Name [" << pkgName << "]");
192 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
194 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
195 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
196 WidgetInfo::Select::RowList rowList = select->GetRowList();
198 if (rowList.empty()) {
199 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
200 "Failed to get widget by package name");
202 return rowList.front().Get_app_id();
204 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
207 WidgetPkgName WidgetDAOReadOnly::getPkgName() const
209 return getPkgNameByHandle(m_widgetHandle);
212 WidgetPkgName WidgetDAOReadOnly::getPkgName(const WidgetGUID GUID)
214 return getPkgNameByHandle(getHandle(GUID));
217 WidgetPkgName WidgetDAOReadOnly::getPkgName(const DbWidgetHandle handle)
219 return getPkgNameByHandle(handle);
222 PropertyDAOReadOnly::WidgetPropertyKeyList
223 WidgetDAOReadOnly::getPropertyKeyList() const
225 return PropertyDAOReadOnly::GetPropertyKeyList(getPkgName());
228 PropertyDAOReadOnly::WidgetPreferenceList
229 WidgetDAOReadOnly::getPropertyList() const
231 return PropertyDAOReadOnly::GetPropertyList(getPkgName());
234 PropertyDAOReadOnly::WidgetPropertyValue WidgetDAOReadOnly::getPropertyValue(
235 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
237 return PropertyDAOReadOnly::GetPropertyValue(getPkgName(), key);
240 DPL::OptionalInt WidgetDAOReadOnly::checkPropertyReadFlag(
241 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
243 return PropertyDAOReadOnly::CheckPropertyReadFlag(getPkgName(), key);
246 DPL::String WidgetDAOReadOnly::getPath() const
248 DPL::String path = *getWidgetInstalledPath();
249 DPL::String srcPath = DPL::FromUTF8String(GlobalConfig::GetWidgetSrcPath());
251 path += srcPath + L"/";
256 DPL::String WidgetDAOReadOnly::getFullPath() const
258 return L"file://" + getPath();
262 WidgetDAOReadOnly::getLocalizedInfo(const DPL::String& languageTag)
265 LogDebug("Getting Localized Info. Handle: " << m_widgetHandle);
266 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
268 ScopedTransaction transaction(&WrtDatabase::interface());
269 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
271 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
273 And(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle),
274 Equals<LocalizedWidgetInfo::widget_locale>(languageTag)));
275 LocalizedWidgetInfo::Row info = select->GetSingleRow();
276 WidgetLocalizedInfo result;
278 result.name = info.Get_widget_name();
279 result.shortName = info.Get_widget_shortname();
280 result.description = info.Get_widget_description();
281 result.license = info.Get_widget_license();
282 result.licenseHref = info.Get_widget_license_href();
284 transaction.Commit();
287 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info")
290 DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const
292 LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle);
293 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
295 ScopedTransaction transaction(&WrtDatabase::interface());
296 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
298 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
299 select->Where(Equals<WidgetFeature::app_id>(m_widgetHandle));
301 DbWidgetFeatureSet resultSet;
302 typedef std::list<WidgetFeature::Row> RowList;
303 RowList list = select->GetRowList();
305 for (RowList::iterator i = list.begin(); i != list.end(); ++i) {
306 DbWidgetFeature feature;
307 feature.name = i->Get_name();
308 feature.required = i->Get_required();
309 feature.rejected = i->Get_rejected();
310 feature.params = getFeatureParams(i->Get_widget_feature_id());
311 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
312 feature.pluginId = featureDao.GetPluginHandle();
313 resultSet.insert(feature);
315 transaction.Commit();
318 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
321 WidgetParamMap WidgetDAOReadOnly::getFeatureParams(int id)
323 WidgetFeatureId widgetFeatureId(id);
324 LogDebug("Getting feature Params. featureId: " << widgetFeatureId);
325 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
327 WRT_DB_SELECT(select, FeatureParam, &WrtDatabase::interface())
328 select->Where(Equals<FeatureParam::widget_feature_id>(
331 WidgetParamMap resultMap;
332 typedef std::list<FeatureParam::Row> RowList;
333 RowList list = select->GetRowList();
336 resultMap.insert(std::make_pair(i->Get_name(), i->Get_value()));
340 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get feature params")
343 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
346 "Checking if widget has feature: " << featureName << ". Handle: " <<
348 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
350 ScopedTransaction transaction(&WrtDatabase::interface());
351 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
353 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
354 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
355 Equals<wrt::WidgetFeature::name>(
356 DPL::FromUTF8String(featureName))));
358 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
359 transaction.Commit();
360 return !rows.empty();
362 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
365 HostList WidgetDAOReadOnly::getAccessHostList() const
367 LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle);
368 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
370 ScopedTransaction transaction(&WrtDatabase::interface());
371 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
373 WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface())
374 select->Where(Equals<WidgetAccessHost::app_id>(m_widgetHandle));
375 std::list<WidgetAccessHost::host::ColumnType> values =
376 select->GetValueList<WidgetAccessHost::host>();
379 ret.push_back(DPL::ToUTF8String(*it));
381 transaction.Commit();
384 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
387 bool WidgetDAOReadOnly::getAccessNetworkMode() const
389 //TODO there is no column access_network
390 //it was removed in "Widget localization overhaul
394 DbWidgetHandleList WidgetDAOReadOnly::getHandleList()
396 LogDebug("Getting DbWidgetHandle List");
397 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
399 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
400 return select->GetValueList<WidgetInfo::app_id>();
402 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
405 WidgetPkgNameList WidgetDAOReadOnly::getPkgnameList()
407 LogDebug("Getting Pkgname List ");
408 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
410 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
411 return select->GetValueList<WidgetInfo::pkgname>();
413 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
417 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
419 LogDebug("Getting DbWidget List");
420 DbWidgetDAOReadOnlyList list;
421 FOREACH(iterator, getHandleList()) {
422 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
427 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
429 LogDebug("Checking if widget exist. Handle: " << handle);
430 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
432 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
433 select->Where(Equals<WidgetInfo::app_id>(handle));
435 WidgetInfo::Select::RowList rows = select->GetRowList();
437 return !rows.empty();
439 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
442 bool WidgetDAOReadOnly::isWidgetInstalled(const WidgetPkgName & pkgName)
444 LogDebug("Checking if widget exist. package name " << pkgName);
445 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
447 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
448 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
450 WidgetInfo::Select::RowList rows = select->GetRowList();
452 return !rows.empty();
454 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
457 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
459 LogDebug("Getting WidgetExtranalFiles List");
460 ExternalLocationList result;
461 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
463 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
464 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
465 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
468 result.push_back(DPL::ToUTF8String(it->Get_path()));
471 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
475 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
476 CertificateSource source) const
478 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
481 Equals<WidgetCertificate::app_id>(m_widgetHandle),
482 Equals<WidgetCertificate::cert_source>(source)));
484 std::list<WidgetCertificate::Row> chainList = select->GetRowList();
486 CertificateChainList result;
488 FOREACH(iter, chainList)
489 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
493 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
495 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
498 size.width = row.Get_widget_width();
499 size.height = row.Get_widget_height();
501 LogDebug("Return size wxh = " <<
502 (!!size.width ? *size.width : -1) << " x " <<
503 (!!size.height ? *size.height : -1));
508 WidgetType WidgetDAOReadOnly::getWidgetType() const
510 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
511 DPL::OptionalInt result = row.Get_widget_type();
512 return WidgetType(static_cast<AppType>(*result));
515 WidgetGUID WidgetDAOReadOnly::getGUID() const
517 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
518 return row.Get_widget_id();
521 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
523 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
524 return row.Get_defaultlocale();
527 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
529 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
530 return row.Get_widget_version();
533 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
535 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
536 return row.Get_author_name();
539 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
541 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
542 return row.Get_author_email();
545 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
547 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
548 return row.Get_author_href();
551 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
553 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
554 return row.Get_min_version();
557 std::string WidgetDAOReadOnly::getShareHref() const
559 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
561 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
562 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
563 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
566 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
567 "Cannot find widget. Handle: " << m_widgetHandle);
570 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
571 std::string ret = "";
572 if (!value.IsNull()) {
573 ret = DPL::ToUTF8String(*value);
577 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
580 bool WidgetDAOReadOnly::getBackSupported() const
582 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
583 return row.Get_back_supported();
586 bool WidgetDAOReadOnly::isRecognized() const
588 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
589 DPL::OptionalInt result = row.Get_recognized();
590 if (result.IsNull()) {
593 return static_cast<bool>(*result);
596 bool WidgetDAOReadOnly::isWacSigned() const
598 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
599 DPL::OptionalInt result = row.Get_wac_signed();
600 if (result.IsNull()) {
603 return static_cast<bool>(*result);
606 bool WidgetDAOReadOnly::isDistributorSigned() const
608 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
609 DPL::OptionalInt result = row.Get_distributor_signed();
610 if (result.IsNull()) {
613 return static_cast<bool>(*result);
616 bool WidgetDAOReadOnly::isTrusted() const
619 // widget with verified distributor signature is trusted
620 return isDistributorSigned();
623 bool WidgetDAOReadOnly::isTestWidget() const
626 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
627 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
629 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
631 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
632 "Cannot find widget. Handle: " << m_widgetHandle);
635 return static_cast<bool>(rows.front().Get_test_widget());
637 Catch(DPL::DB::SqlConnection::Exception::Base){
638 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
639 "Failed to check IsTestWidget");
643 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
645 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
646 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
648 if (ret.IsNull() || *ret == 0) { return false; } else { return true; }
651 time_t WidgetDAOReadOnly::getInstallTime() const
653 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
655 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
656 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
658 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
660 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
661 "Cannot find widget. Handle: " << m_widgetHandle);
664 return static_cast<time_t>(*rows.front().Get_install_time());
666 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
669 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
671 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
673 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
674 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
676 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
678 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
679 "Cannot find widget. Handle: " << m_widgetHandle);
682 DPL::OptionalString value = rows.front().Get_splash_img_src();
683 if (value.IsNull()) {
684 return DPL::OptionalString::Null;
687 return DPL::OptionalString(getPath() + *value);
689 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
692 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::getLocalizedIconList() const
694 //TODO check widget existance??
695 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
697 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
698 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
700 std::list<WidgetLocalizedIcon::Row> list =
701 select->GetRowList();
702 WidgetLocalizedIconList ret;
705 WidgetLocalizedIconRow icon = {it->Get_app_id(),
707 it->Get_widget_locale()};
712 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
715 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
717 //TODO check widget existance
718 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
720 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
721 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
723 std::list<WidgetIcon::Row> list =
724 select->GetRowList();
728 WidgetIconRow icon = {it->Get_icon_id(),
731 it->Get_icon_width(),
732 it->Get_icon_height()};
737 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
740 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::getLocalizedStartFileList() const
742 //TODO check widget existance
743 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
745 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
746 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
748 select->OrderBy("start_file_id ASC");
750 std::list<WidgetLocalizedStartFile::Row> list =
751 select->GetRowList();
752 LocalizedStartFileList ret;
755 WidgetLocalizedStartFileRow file = {it->Get_start_file_id(),
757 it->Get_widget_locale(),
764 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
767 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList() const
769 //TODO check widget existance
770 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
772 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
773 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
774 select->OrderBy("start_file_id ASC");
776 std::list<WidgetStartFile::Row> list =
777 select->GetRowList();
778 WidgetStartFileList ret;
781 WidgetStartFileRow file = {it->Get_start_file_id(),
788 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
791 WindowModeList WidgetDAOReadOnly::getWindowModes() const
793 //TODO check widget existance
794 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
796 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
797 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
799 return select->GetValueList<WidgetWindowModes::window_mode>();
801 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
804 std::string WidgetDAOReadOnly::getBaseFolder() const
806 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
807 DPL::Optional<DPL::String> ret = row.Get_base_folder();
808 std::string baseFolder;
810 baseFolder = DPL::ToUTF8String(*ret);
813 if (!baseFolder.empty()) {
820 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
822 //TODO check widget existance
823 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
825 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
826 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
828 select->OrderBy("chainid");
829 WidgetCertificateFingerprint::Select::RowList rows =
830 select->GetRowList();
832 WidgetCertificateDataList outlCertificateData;
835 WidgetCertificateData data;
838 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
840 static_cast <WidgetCertificateData::Type>(it->Get_type());
841 data.chainId = it->Get_chainid();
842 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
843 data.strMD5Fingerprint =
844 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
845 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
846 data.strSHA1Fingerprint =
847 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
848 DPL::Optional<DPL::String> cname = it->Get_common_name();
850 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
852 outlCertificateData.push_back(data);
854 return outlCertificateData;
856 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
859 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
860 WidgetCertificateData::Owner owner,
861 WidgetCertificateData::Type type) const
863 //TODO check widget existance
864 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
866 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
867 select->Where(And(And(
868 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
869 Equals<WidgetCertificateFingerprint::owner>(owner)),
870 Equals<WidgetCertificateFingerprint::type>(type)));
872 WidgetCertificateFingerprint::Select::RowList rows =
873 select->GetRowList();
875 FingerPrintList keys;
878 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
879 if (!sha1.IsNull()) {
880 keys.push_back(DPL::ToUTF8String(*sha1));
882 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
884 keys.push_back(DPL::ToUTF8String(*md5));
889 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
892 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
893 WidgetCertificateData::Owner owner,
894 WidgetCertificateData::Type type) const
896 //TODO check widget existance
897 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
899 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
900 select->Where(And(And(
901 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
902 Equals<WidgetCertificateFingerprint::owner>(owner)),
903 Equals<WidgetCertificateFingerprint::type>(type)));
905 WidgetCertificateFingerprint::Select::RowList rows =
906 select->GetRowList();
908 WidgetCertificateCNList out;
911 DPL::Optional<DPL::String> cname = it->Get_common_name();
912 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
916 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
919 ResourceAttributeList WidgetDAOReadOnly::getResourceAttribute(
920 const std::string &resourceId) const
922 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
923 select->Where(And(Equals<WidgetFeature::app_id>(m_widgetHandle),
924 Equals<WidgetFeature::name>(
925 DPL::FromUTF8String(resourceId))));
927 std::list<WidgetFeature::Row> list = select->GetRowList();
928 ResourceAttributeList result;
930 int widgetFeatureId = list.begin()->Get_widget_feature_id();
931 WidgetParamMap map = getFeatureParams(widgetFeatureId);
934 result.push_back(DPL::ToUTF8String(i->first));
939 void WidgetDAOReadOnly::getWidgetAccessInfo(
940 WidgetAccessInfoList& outAccessInfoList) const
942 //TODO check widget existance
943 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
945 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
946 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
948 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
952 WidgetAccessInfo info;
954 info.strIRI = it->Get_iri();
955 DPL::OptionalInt access = it->Get_subdomain_access();
956 if (access.IsNull() || 0 == *access) {
957 info.bSubDomains = false;
958 } else if (1 == *access) {
959 info.bSubDomains = true;
962 outAccessInfoList.push_back(info);
965 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
968 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
970 //TODO check widget existance
971 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
973 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
974 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
975 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
977 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
980 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
982 //TODO check widget existance
983 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
984 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
986 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
989 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
991 using namespace WrtDB::WidgetConfig;
992 std::ostringstream path;
994 WidgetPkgName pkgname = getPkgName();
996 path << GetWidgetPersistentStoragePath(pkgname);
998 path << GlobalConfig::GetCookieDatabaseFile();
1003 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
1005 std::ostringstream path;
1006 WidgetPkgName pkgname = getPkgName();
1007 path << WidgetConfig::GetWidgetWebLocalStoragePath(pkgname);
1013 void WidgetDAOReadOnly::getWidgetSettings(
1014 WidgetSettings& outWidgetSettings) const
1016 //TODO check widget existance
1017 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1019 WRT_DB_SELECT(select, SettingsList, &WrtDatabase::interface())
1020 select->Where(Equals<SettingsList::appId>(m_widgetHandle));
1022 SettingsList::Select::RowList rows = select->GetRowList();
1028 info.settingName = it->Get_settingName();
1029 info.settingValue = it->Get_settingValue();
1030 outWidgetSettings.push_back(info);
1033 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1036 void WidgetDAOReadOnly::getAppServiceList(
1037 WidgetApplicationServiceList& outAppServiceList) const
1039 LogDebug("Getting getAppServiceList. Handle: " << m_widgetHandle);
1040 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1042 ScopedTransaction transaction(&WrtDatabase::interface());
1043 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1045 WRT_DB_SELECT(select, ApplicationServiceInfo, &WrtDatabase::interface())
1046 select->Where(Equals<ApplicationServiceInfo::app_id>(m_widgetHandle));
1048 ApplicationServiceInfo::Select::RowList rows = select->GetRowList();
1051 LogDebug("Application Service list is empty. Handle: " <<
1056 WidgetApplicationService ret;
1057 ret.src = it->Get_src();
1058 ret.operation = it->Get_operation();
1059 ret.scheme = it->Get_scheme();
1060 ret.mime = it->Get_mime();
1061 outAppServiceList.push_back(ret);
1064 transaction.Commit();
1066 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
1069 PackagingType WidgetDAOReadOnly::getPackagingType() const
1071 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1072 DPL::OptionalInt result = row.Get_pkg_type();
1073 return PackagingType(static_cast<PkgType>(*result));
1076 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList) const
1078 //TODO check widget existance
1079 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1080 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1082 typedef std::list<EncryptedResourceList::Row> RowList;
1083 RowList list = select->GetRowList();
1086 EncryptedFileInfo info;
1087 info.fileName = it->Get_resource();
1088 info.fileSize = it->Get_size();
1089 filesList.insert(info);
1093 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1095 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1097 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1098 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1100 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1102 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1103 "Cannot find widget. Handle: " << m_widgetHandle);
1106 return rows.front().Get_background_page();
1108 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1111 WidgetPkgName WidgetDAOReadOnly::generateTizenId() {
1112 std::string allowed("0123456789"
1113 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1114 "abcdefghijklmnopqrstuvwxyz");
1115 WidgetPkgName tizenId;
1116 tizenId.resize(MAX_TIZENID_LENGTH);
1118 for (int i = 0; i < MAX_TIZENID_LENGTH; ++i) {
1119 tizenId[i] = allowed[rand() % allowed.length()];
1121 } while (isWidgetInstalled(tizenId));
1125 SettingsType WidgetDAOReadOnly::getSecurityPopupUsage(void) const
1127 WidgetSecuritySettingsRow row =
1128 getWidgetSecuritySettingsRow(m_widgetHandle);
1129 DPL::OptionalInt result = row.Get_security_popup_usage();
1130 return static_cast<SettingsType>(*result);
1133 SettingsType WidgetDAOReadOnly::getGeolocationUsage(void) const
1135 WidgetSecuritySettingsRow row =
1136 getWidgetSecuritySettingsRow(m_widgetHandle);
1137 DPL::OptionalInt result = row.Get_geolocation_usage();
1138 return static_cast<SettingsType>(*result);
1141 SettingsType WidgetDAOReadOnly::getWebNotificationUsage(void) const
1143 WidgetSecuritySettingsRow row =
1144 getWidgetSecuritySettingsRow(m_widgetHandle);
1145 DPL::OptionalInt result = row.Get_web_notification_usage();
1146 return static_cast<SettingsType>(*result);
1149 SettingsType WidgetDAOReadOnly::getWebDatabaseUsage(void) const
1151 WidgetSecuritySettingsRow row =
1152 getWidgetSecuritySettingsRow(m_widgetHandle);
1153 DPL::OptionalInt result = row.Get_web_database_usage();
1154 return static_cast<SettingsType>(*result);
1157 SettingsType WidgetDAOReadOnly::getFileSystemUsage(void) const
1159 WidgetSecuritySettingsRow row =
1160 getWidgetSecuritySettingsRow(m_widgetHandle);
1161 DPL::OptionalInt result = row.Get_file_system_usage();
1162 return static_cast<SettingsType>(*result);
1165 DPL::OptionalString WidgetDAOReadOnly::getWidgetInstalledPath() const
1167 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1169 using namespace DPL::DB::ORM;
1170 using namespace DPL::DB::ORM::wrt;
1171 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1172 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1174 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1176 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1177 "Cannot find widget. Handle: " << m_widgetHandle);
1180 return rows.front().Get_installed_path();
1182 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget installed path")
1184 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1185 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1186 #undef CHECK_WIDGET_EXISTENCE
1188 } // namespace WrtDB