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 definition of widget dao class.
19 * @file widget_dao.cpp
20 * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
21 * @author Bartosz Janiak (b.janiak@samsung.com)
22 * @author Yang Jie (jie2.yang@samsung.com)
23 * @author Koeun Choi(koeun.choi@samsung.com)
24 * @author Pawel Sikorski(p.sikorski@samsung.com)
26 * @brief This file contains the definition of Configuration.
29 #include <dpl/wrt-dao-rw/widget_dao.h>
32 #include <dpl/log/log.h>
33 #include <dpl/foreach.h>
34 #include <dpl/wrt-dao-ro/webruntime_database.h>
35 #include <dpl/wrt-dao-rw/property_dao.h>
36 #include <orm_generator_wrt.h>
37 #include <dpl/wrt-dao-ro/WrtDatabase.h>
40 //TODO in current solution in each getter there exists a check
41 //"IsWidgetInstalled". Maybe it should be verified, if it could be done
42 //differently (check in WidgetDAO constructor)
44 #define SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN Try
46 #define SQL_CONNECTION_EXCEPTION_HANDLER_END(message) \
47 Catch(DPL::DB::SqlConnection::Exception::Base) { \
49 ReThrowMsg(WidgetDAO::Exception::DatabaseError, \
53 WidgetDAO::WidgetDAO(DPL::OptionalString widgetGUID) :
54 WidgetDAOReadOnly(WidgetDAOReadOnly::getHandle(widgetGUID))
57 WidgetDAO::WidgetDAO(DPL::String tzAppId) :
58 WidgetDAOReadOnly(WidgetDAOReadOnly::getHandle(tzAppId))
61 WidgetDAO::WidgetDAO(DbWidgetHandle handle) :
62 WidgetDAOReadOnly(handle)
65 WidgetDAO::~WidgetDAO()
68 void WidgetDAO::setTizenAppId(const DPL::OptionalString& tzAppId)
70 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
72 using namespace DPL::DB::ORM;
73 wrt::ScopedTransaction transaction(&WrtDatabase::interface());
75 if (!isWidgetInstalled(getHandle())) {
76 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
77 "Cannot find widget. Handle: " << getHandle());
80 wrt::WidgetInfo::Row row;
81 row.Set_tizen_appid(*tzAppId);
83 WRT_DB_UPDATE(update, wrt::WidgetInfo, &WrtDatabase::interface())
85 Equals<wrt::WidgetInfo::app_id>(getHandle()));
91 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to register widget")
94 void WidgetDAO::setSecurityPopupUsage(const SettingsType value)
96 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
98 using namespace DPL::DB::ORM;
99 using namespace DPL::DB::ORM::wrt;
101 ScopedTransaction transaction(&WrtDatabase::interface());
102 if (!isWidgetInstalled(getHandle())) {
103 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
104 "Cannot find widget. Handle: " << getHandle());
107 WidgetSecuritySettings::Row row;
108 row.Set_security_popup_usage(value);
110 WRT_DB_UPDATE(update, WidgetSecuritySettings, &WrtDatabase::interface())
111 update->Where(Equals<WidgetSecuritySettings::app_id>(getHandle()));
115 transaction.Commit();
117 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to set security popup usage")
120 void WidgetDAO::setGeolocationUsage(const SettingsType value)
122 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
124 using namespace DPL::DB::ORM;
125 using namespace DPL::DB::ORM::wrt;
127 ScopedTransaction transaction(&WrtDatabase::interface());
128 if (!isWidgetInstalled(getHandle())) {
129 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
130 "Cannot find widget. Handle: " << getHandle());
133 WidgetSecuritySettings::Row row;
134 row.Set_geolocation_usage(value);
136 WRT_DB_UPDATE(update, WidgetSecuritySettings, &WrtDatabase::interface())
137 update->Where(Equals<WidgetSecuritySettings::app_id>(getHandle()));
141 transaction.Commit();
143 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to set geolocation usage")
146 void WidgetDAO::setWebNotificationUsage(const SettingsType value)
148 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
150 using namespace DPL::DB::ORM;
151 using namespace DPL::DB::ORM::wrt;
153 ScopedTransaction transaction(&WrtDatabase::interface());
154 if (!isWidgetInstalled(getHandle())) {
155 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
156 "Cannot find widget. Handle: " << getHandle());
159 WidgetSecuritySettings::Row row;
160 row.Set_web_notification_usage(value);
162 WRT_DB_UPDATE(update, WidgetSecuritySettings, &WrtDatabase::interface())
163 update->Where(Equals<WidgetSecuritySettings::app_id>(getHandle()));
167 transaction.Commit();
169 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to set web notification usage")
172 void WidgetDAO::setWebDatabaseUsage(const SettingsType value)
174 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
176 using namespace DPL::DB::ORM;
177 using namespace DPL::DB::ORM::wrt;
179 ScopedTransaction transaction(&WrtDatabase::interface());
180 if (!isWidgetInstalled(getHandle())) {
181 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
182 "Cannot find widget. Handle: " << getHandle());
185 WidgetSecuritySettings::Row row;
186 row.Set_web_database_usage(value);
188 WRT_DB_UPDATE(update, WidgetSecuritySettings, &WrtDatabase::interface())
189 update->Where(Equals<WidgetSecuritySettings::app_id>(getHandle()));
193 transaction.Commit();
195 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to set web database usage")
198 void WidgetDAO::setFileSystemUsage(const SettingsType value)
200 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
202 using namespace DPL::DB::ORM;
203 using namespace DPL::DB::ORM::wrt;
205 ScopedTransaction transaction(&WrtDatabase::interface());
206 if (!isWidgetInstalled(getHandle())) {
207 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
208 "Cannot find widget. Handle: " << getHandle());
211 WidgetSecuritySettings::Row row;
212 row.Set_file_system_usage(value);
214 WRT_DB_UPDATE(update, WidgetSecuritySettings, &WrtDatabase::interface())
215 update->Where(Equals<WidgetSecuritySettings::app_id>(getHandle()));
219 transaction.Commit();
221 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to set filesystem usage")
224 void WidgetDAO::registerWidget(
225 const TizenAppId & tzAppId,
226 const WidgetRegisterInfo &widgetRegInfo,
227 const IWacSecurity &wacSecurity)
229 LogDebug("Registering widget");
230 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
232 DPL::DB::ORM::wrt::ScopedTransaction transaction(
233 &WrtDatabase::interface());
234 registerWidgetInternal(tzAppId, widgetRegInfo, wacSecurity);
235 transaction.Commit();
237 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to register widget")
240 DbWidgetHandle WidgetDAO::registerWidget(
241 const WidgetRegisterInfo &pWidgetRegisterInfo,
242 const IWacSecurity &wacSecurity)
244 //make it more precise due to very fast tests
246 gettimeofday(&tv, NULL);
247 DbWidgetHandle widgetHandle;
248 unsigned int seed = time(NULL);
250 widgetHandle = rand_r(&seed);
251 } while (isWidgetInstalled(widgetHandle));
253 registerWidget(*pWidgetRegisterInfo.configInfo.tizenAppId,
259 TizenAppId WidgetDAO::registerWidgetGeneratePkgId(
260 const WidgetRegisterInfo &pWidgetRegisterInfo,
261 const IWacSecurity &wacSecurity)
263 TizenAppId tzAppId = generatePkgId();
264 registerWidget(tzAppId, pWidgetRegisterInfo, wacSecurity);
268 void WidgetDAO::registerWidgetInternal(
269 const TizenAppId & tzAppId,
270 const WidgetRegisterInfo &widgetRegInfo,
271 const IWacSecurity &wacSecurity,
272 const DPL::Optional<DbWidgetHandle> handle)
274 //Register into WidgetInfo has to be first
275 //as all other tables depend upon that
276 DbWidgetHandle widgetHandle = registerWidgetInfo(tzAppId,
281 registerWidgetExtendedInfo(widgetHandle, widgetRegInfo);
283 registerWidgetLocalizedInfo(widgetHandle, widgetRegInfo);
285 registerWidgetIcons(widgetHandle, widgetRegInfo);
287 registerWidgetStartFile(widgetHandle, widgetRegInfo);
289 PropertyDAO::RegisterProperties(tzAppId, widgetRegInfo);
291 registerWidgetFeatures(widgetHandle, widgetRegInfo);
293 registerWidgetPrivilege(widgetHandle, widgetRegInfo);
295 registerWidgetWindowModes(widgetHandle, widgetRegInfo);
297 registerWidgetWarpInfo(widgetHandle, widgetRegInfo);
299 registerWidgetCertificates(widgetHandle, wacSecurity);
301 CertificateChainList list;
302 wacSecurity.getCertificateChainList(list, SIGNATURE_DISTRIBUTOR);
303 registerCertificatesChains(widgetHandle, SIGNATURE_DISTRIBUTOR, list);
306 wacSecurity.getCertificateChainList(list, SIGNATURE_AUTHOR);
307 registerCertificatesChains(widgetHandle, SIGNATURE_AUTHOR, list);
309 registerWidgetSettings(widgetHandle, widgetRegInfo);
311 registerAppService(widgetHandle, widgetRegInfo);
313 registerEncryptedResouceInfo(widgetHandle, widgetRegInfo);
315 registerExternalLocations(widgetHandle, widgetRegInfo.externalLocations);
317 registerWidgetSecuritySettings(widgetHandle);
320 void WidgetDAO::registerOrUpdateWidget(
321 const TizenAppId & widgetName,
322 const WidgetRegisterInfo &widgetRegInfo,
323 const IWacSecurity &wacSecurity)
325 LogDebug("Reregistering widget");
326 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
328 DPL::DB::ORM::wrt::ScopedTransaction transaction(
329 &WrtDatabase::interface());
331 unregisterWidgetInternal(widgetName);
332 registerWidgetInternal(widgetName, widgetRegInfo, wacSecurity);
333 transaction.Commit();
335 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to reregister widget")
338 #define DO_INSERT(row, table) \
340 WRT_DB_INSERT(insert, table, &WrtDatabase::interface()) \
341 insert->Values(row); \
345 void WidgetDAO::registerWidgetExtendedInfo(DbWidgetHandle widgetHandle,
346 const WidgetRegisterInfo ®Info)
348 //Try and transaction not needed
349 using namespace DPL::DB::ORM;
350 using namespace DPL::DB::ORM::wrt;
352 WidgetExtendedInfo::Row row;
353 row.Set_app_id(widgetHandle);
354 // row.Set_share_href (DPL::FromUTF8String(regInfo.shareHref));
355 row.Set_signature_type(regInfo.signatureType);
356 row.Set_test_widget(regInfo.isTestWidget);
357 row.Set_install_time(regInfo.installedTime);
358 row.Set_splash_img_src(regInfo.configInfo.splashImgSrc);
359 row.Set_background_page(regInfo.configInfo.backgroundPage);
360 row.Set_installed_path(regInfo.widgetInstalledPath);
362 DO_INSERT(row, WidgetExtendedInfo)
365 DbWidgetHandle WidgetDAO::registerWidgetInfo(
366 const TizenAppId & tzAppId,
367 const WidgetRegisterInfo ®Info,
368 const IWacSecurity &wacSecurity,
369 const DPL::Optional<DbWidgetHandle> handle)
371 using namespace DPL::DB::ORM;
372 using namespace DPL::DB::ORM::wrt;
373 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
375 // TODO in wrt_db all Columns in WidgetInfo have DEFAULT VALUE set.
376 // Because of that, "Optional" is not used there
380 row.Set_app_id(*handle);
383 row.Set_widget_type(regInfo.webAppType.appType);
385 row.Set_widget_id(widgetConfigurationInfo.widget_id);
386 row.Set_defaultlocale(widgetConfigurationInfo.defaultlocale);
387 row.Set_widget_version(widgetConfigurationInfo.version);
388 row.Set_widget_width(widgetConfigurationInfo.width);
389 row.Set_widget_height(widgetConfigurationInfo.height);
390 row.Set_author_name(widgetConfigurationInfo.authorName);
391 row.Set_author_email(widgetConfigurationInfo.authorEmail);
392 row.Set_author_href(widgetConfigurationInfo.authorHref);
393 row.Set_csp_policy(widgetConfigurationInfo.cspPolicy);
394 row.Set_csp_policy_report_only(widgetConfigurationInfo.cspPolicyReportOnly);
395 row.Set_base_folder(DPL::FromUTF8String(regInfo.baseFolder));
396 row.Set_webkit_plugins_required(widgetConfigurationInfo.flashNeeded);
397 row.Set_recognized(wacSecurity.isRecognized());
398 row.Set_wac_signed(wacSecurity.isWacSigned());
399 row.Set_distributor_signed(wacSecurity.isDistributorSigned());
400 row.Set_tizen_appid(tzAppId);
401 row.Set_tizen_pkgid(regInfo.tzPkgid);
403 std::stringstream tmp;
404 tmp << regInfo.minVersion;
405 row.Set_min_version(DPL::FromUTF8String(tmp.str()));
407 row.Set_back_supported(widgetConfigurationInfo.backSupported);
408 row.Set_access_network(widgetConfigurationInfo.accessNetwork);
409 row.Set_pkg_type(regInfo.packagingType.pkgType);
413 DO_INSERT(row, WidgetInfo);
415 Catch(DPL::DB::SqlConnection::Exception::Base)
417 ReThrowMsg(WidgetDAO::Exception::DatabaseError,
418 "Failed to register widget info.");
422 //get autoincremented value of widgetHandle
423 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
424 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
425 return select->GetSingleValue<WidgetInfo::app_id>();
431 void WidgetDAO::registerWidgetLocalizedInfo(DbWidgetHandle widgetHandle,
432 const WidgetRegisterInfo ®Info)
434 using namespace DPL::DB::ORM;
435 using namespace DPL::DB::ORM::wrt;
437 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
439 FOREACH(it, widgetConfigurationInfo.localizedDataSet)
441 const DPL::String& locale = it->first;
442 const ConfigParserData::LocalizedData& data = it->second;
444 LocalizedWidgetInfo::Row row;
445 row.Set_app_id(widgetHandle);
446 row.Set_widget_locale(locale);
447 row.Set_widget_name(data.name);
448 row.Set_widget_shortname(data.shortName);
449 row.Set_widget_description(data.description);
450 row.Set_widget_license(data.license);
451 row.Set_widget_license_file(data.licenseFile);
452 row.Set_widget_license_href(data.licenseHref);
454 DO_INSERT(row, LocalizedWidgetInfo)
458 void WidgetDAO::registerWidgetIcons(DbWidgetHandle widgetHandle,
459 const WidgetRegisterInfo ®Info)
461 using namespace DPL::DB::ORM;
462 using namespace DPL::DB::ORM::wrt;
464 FOREACH(i, regInfo.localizationData.icons)
466 wrt::WidgetIcon::icon_id::ColumnType icon_id;
468 wrt::WidgetIcon::Row row;
469 row.Set_app_id(widgetHandle);
470 row.Set_icon_src(i->src);
471 row.Set_icon_width(i->width);
472 row.Set_icon_height(i->height);
474 WRT_DB_INSERT(insert, wrt::WidgetIcon, &WrtDatabase::interface())
476 icon_id = static_cast<int>(insert->Execute());
479 FOREACH(j, i->availableLocales)
481 WidgetLocalizedIcon::Row row;
482 row.Set_app_id(widgetHandle);
483 row.Set_icon_id(icon_id);
484 row.Set_widget_locale(*j);
485 DO_INSERT(row, WidgetLocalizedIcon)
490 void WidgetDAO::registerWidgetStartFile(DbWidgetHandle widgetHandle,
491 const WidgetRegisterInfo ®Info)
493 using namespace DPL::DB::ORM;
494 using namespace DPL::DB::ORM::wrt;
496 FOREACH(i, regInfo.localizationData.startFiles)
498 WidgetStartFile::start_file_id::ColumnType startFileID;
500 WidgetStartFile::Row row;
501 row.Set_app_id(widgetHandle);
502 row.Set_src(i->path);
504 WRT_DB_INSERT(insert, WidgetStartFile, &WrtDatabase::interface())
506 startFileID = static_cast<int>(insert->Execute());
509 FOREACH(j, i->propertiesForLocales)
511 WidgetLocalizedStartFile::Row row;
512 row.Set_app_id(widgetHandle);
513 row.Set_start_file_id(startFileID);
514 row.Set_widget_locale(j->first);
515 row.Set_type(j->second.type);
516 row.Set_encoding(j->second.encoding);
518 DO_INSERT(row, WidgetLocalizedStartFile)
523 void WidgetDAO::registerWidgetFeatures(DbWidgetHandle widgetHandle,
524 const WidgetRegisterInfo ®Info)
526 using namespace DPL::DB::ORM;
527 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
529 FOREACH(pWidgetFeature, widgetConfigurationInfo.featuresList)
531 wrt::WidgetFeature::Row widgetFeature;
532 widgetFeature.Set_app_id(widgetHandle);
533 widgetFeature.Set_name(pWidgetFeature->name);
534 widgetFeature.Set_required(pWidgetFeature->required);
535 widgetFeature.Set_rejected(false);
537 wrt::WidgetFeature::widget_feature_id::ColumnType widgetFeatureID;
539 WRT_DB_INSERT(insert, wrt::WidgetFeature, &WrtDatabase::interface())
540 insert->Values(widgetFeature);
541 widgetFeatureID = static_cast<int>(insert->Execute());
544 // Insert into table FeatureParam
545 wrt::FeatureParam::Row featureParam;
546 featureParam.Set_widget_feature_id(widgetFeatureID);
548 FOREACH(iter, pWidgetFeature->paramsList)
550 featureParam.Set_name(iter->name);
551 featureParam.Set_value(iter->value);
553 DO_INSERT(featureParam, wrt::FeatureParam)
558 void WidgetDAO::registerWidgetPrivilege(DbWidgetHandle widgetHandle,
559 const WidgetRegisterInfo ®Info)
561 using namespace DPL::DB::ORM;
562 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
564 FOREACH(it, widgetConfigurationInfo.privilegeList)
566 wrt::WidgetPrivilege::Row widgetPrivilege;
567 widgetPrivilege.Set_app_id(widgetHandle);
568 widgetPrivilege.Set_name(it->name);
570 DO_INSERT(widgetPrivilege, wrt::WidgetPrivilege)
574 void WidgetDAO::updateFeatureRejectStatus(const DbWidgetFeature &widgetFeature)
576 // This function could be merged with registerWidgetFeature but it requires
578 // 1. Check "ace step" in installer must be done before "update database
581 // ConfigurationParserData shouldn't be called "ParserData" any more.
582 using namespace DPL::DB::ORM;
584 wrt::ScopedTransaction transaction(&WrtDatabase::interface());
585 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
586 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
587 Equals<wrt::WidgetFeature::name>(widgetFeature.name)));
589 auto row = select->GetSingleRow();
590 row.Set_rejected(widgetFeature.rejected);
592 WRT_DB_UPDATE(update, wrt::WidgetFeature, &WrtDatabase::interface())
593 update->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
594 Equals<wrt::WidgetFeature::name>(widgetFeature.name)));
597 transaction.Commit();
600 void WidgetDAO::registerWidgetWindowModes(DbWidgetHandle widgetHandle,
601 const WidgetRegisterInfo ®Info)
603 using namespace DPL::DB::ORM;
604 using namespace DPL::DB::ORM::wrt;
605 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
607 FOREACH(i, widgetConfigurationInfo.windowModes)
609 wrt::WidgetWindowModes::Row windowMode;
610 windowMode.Set_app_id(widgetHandle);
611 windowMode.Set_window_mode(*i);
613 DO_INSERT(windowMode, wrt::WidgetWindowModes)
617 void WidgetDAO::registerWidgetWarpInfo(DbWidgetHandle widgetHandle,
618 const WidgetRegisterInfo ®Info)
620 using namespace DPL::DB::ORM;
621 using namespace DPL::DB::ORM::wrt;
622 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
624 FOREACH(AccIt, widgetConfigurationInfo.accessInfoSet)
626 WidgetWARPInfo::Row row;
627 row.Set_app_id(widgetHandle);
628 row.Set_iri(AccIt->m_strIRI);
629 row.Set_subdomain_access(static_cast <int>(
630 AccIt->m_bSubDomainAccess));
632 DO_INSERT(row, WidgetWARPInfo)
636 void WidgetDAO::registerWidgetCertificates(DbWidgetHandle widgetHandle,
637 const IWacSecurity &wacSecurity)
639 using namespace DPL::DB::ORM;
640 using namespace DPL::DB::ORM::wrt;
642 FOREACH(it, wacSecurity.getCertificateList())
644 WidgetCertificateFingerprint::Row row;
645 row.Set_app_id(widgetHandle);
646 row.Set_owner(it->owner);
647 row.Set_chainid(it->chainId);
648 row.Set_type(it->type);
649 row.Set_md5_fingerprint(DPL::FromUTF8String(it->strMD5Fingerprint));
650 row.Set_sha1_fingerprint(DPL::FromUTF8String(it->strSHA1Fingerprint));
651 row.Set_common_name(it->strCommonName);
653 DO_INSERT(row, WidgetCertificateFingerprint)
657 void WidgetDAO::registerCertificatesChains(
658 DbWidgetHandle widgetHandle,
659 CertificateSource certificateSource,
660 const CertificateChainList &
661 certificateChainList)
663 using namespace DPL::DB::ORM;
664 using namespace DPL::DB::ORM::wrt;
665 FOREACH(certChain, certificateChainList)
667 WidgetCertificate::Row row;
668 row.Set_app_id(widgetHandle);
669 row.Set_cert_source(certificateSource);
670 row.Set_encoded_chain(DPL::FromASCIIString(*certChain));
672 DO_INSERT(row, WidgetCertificate);
676 void WidgetDAO::registerWidgetSettings(DbWidgetHandle widgetHandle,
677 const WidgetRegisterInfo ®Info)
679 using namespace DPL::DB::ORM;
680 using namespace DPL::DB::ORM::wrt;
682 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
684 FOREACH(pWidgetSetting, widgetConfigurationInfo.settingsList)
686 SettingsList::Row row;
687 row.Set_appId(widgetHandle);
688 row.Set_settingName(pWidgetSetting->m_name);
689 row.Set_settingValue(pWidgetSetting->m_value);
691 DO_INSERT(row, SettingsList)
695 void WidgetDAO::insertApplicationServiceInfo(DbWidgetHandle handle,
697 DPL::String operation,
701 using namespace DPL::DB::ORM;
702 using namespace DPL::DB::ORM::wrt;
704 ApplicationServiceInfo::Row row;
706 row.Set_app_id(handle);
708 row.Set_operation(operation);
709 row.Set_scheme(scheme);
712 DO_INSERT(row, ApplicationServiceInfo);
715 void WidgetDAO::registerAppService(DbWidgetHandle widgetHandle,
716 const WidgetRegisterInfo ®Info)
718 using namespace DPL::DB::ORM;
719 using namespace DPL::DB::ORM::wrt;
720 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
723 FOREACH(ASIt, widgetConfigurationInfo.appServiceList)
725 ApplicationServiceInfo::Row row;
726 row.Set_app_id(widgetHandle);
727 row.Set_src(ASIt->m_src);
728 row.Set_operation(ASIt->m_operation);
729 row.Set_scheme(ASIt->m_scheme);
730 row.Set_mime(ASIt->m_mime);
731 row.Set_disposition(static_cast<int>(ASIt->m_disposition));
733 DO_INSERT(row, ApplicationServiceInfo)
737 FOREACH(appControl_it, widgetConfigurationInfo.appControlList)
739 DPL::String src = appControl_it->m_src;
740 DPL::String operation = appControl_it->m_operation;
742 if (!appControl_it->m_uriList.empty())
744 FOREACH(uri_it, appControl_it->m_uriList)
746 DPL::String scheme = *uri_it;
748 if (!appControl_it->m_mimeList.empty())
750 FOREACH(mime_it, appControl_it->m_mimeList)
752 DPL::String mime = *mime_it;
754 insertApplicationServiceInfo(widgetHandle, src, operation, scheme, mime);
759 DPL::String mime = L"";
761 insertApplicationServiceInfo(widgetHandle, src, operation, scheme, mime);
767 DPL::String scheme = L"";
769 if (!appControl_it->m_mimeList.empty())
771 FOREACH(mime_it, appControl_it->m_mimeList)
773 DPL::String mime = *mime_it;
775 insertApplicationServiceInfo(widgetHandle, src, operation, scheme, mime);
780 DPL::String mime = L"";
782 insertApplicationServiceInfo(widgetHandle, src, operation, scheme, mime);
788 void WidgetDAO::registerEncryptedResouceInfo(DbWidgetHandle widgetHandle,
789 const WidgetRegisterInfo ®Info)
791 using namespace DPL::DB::ORM;
792 using namespace DPL::DB::ORM::wrt;
794 FOREACH(it, regInfo.encryptedFiles)
796 EncryptedResourceList::Row row;
797 row.Set_app_id(widgetHandle);
798 row.Set_resource(it->fileName);
799 row.Set_size(it->fileSize);
801 DO_INSERT(row, EncryptedResourceList)
805 void WidgetDAO::registerExternalLocations(
806 DbWidgetHandle widgetHandle,
807 const ExternalLocationList &
810 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
812 using namespace DPL::DB::ORM;
813 using namespace DPL::DB::ORM::wrt;
814 DPL::DB::ORM::wrt::ScopedTransaction transaction(
815 &WrtDatabase::interface());
816 LogDebug("Inserting external files for widgetHandle: " << widgetHandle);
817 FOREACH(it, externals)
819 WidgetExternalLocations::Row row;
820 row.Set_app_id(widgetHandle);
821 row.Set_path(DPL::FromUTF8String(*it));
823 DO_INSERT(row, WidgetExternalLocations)
825 transaction.Commit();
827 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to register external files");
830 void WidgetDAO::registerWidgetSecuritySettings(DbWidgetHandle widgetHandle)
832 using namespace DPL::DB::ORM;
833 using namespace DPL::DB::ORM::wrt;
834 WidgetSecuritySettings::Row row;
835 row.Set_app_id(widgetHandle);
836 row.Set_security_popup_usage(SETTINGS_TYPE_ON);
837 row.Set_geolocation_usage(SETTINGS_TYPE_ON);
838 row.Set_web_notification_usage(SETTINGS_TYPE_ON);
839 row.Set_web_database_usage(SETTINGS_TYPE_ON);
840 row.Set_file_system_usage(SETTINGS_TYPE_ON);
842 DO_INSERT(row, WidgetSecuritySettings)
845 void WidgetDAO::unregisterAllExternalLocations()
847 using namespace DPL::DB::ORM;
848 using namespace DPL::DB::ORM::wrt;
849 LogDebug("Deleting external files for widgetHandle: " << m_widgetHandle);
850 WRT_DB_DELETE(del, WidgetExternalLocations, &WrtDatabase::interface());
851 del->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
855 void WidgetDAO::unregisterWidget(const TizenAppId & tzAppId)
857 LogDebug("Unregistering widget from DB. tzAppId: " << tzAppId);
858 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
860 DPL::DB::ORM::wrt::ScopedTransaction transaction(
861 &WrtDatabase::interface());
862 unregisterWidgetInternal(tzAppId);
863 transaction.Commit();
865 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to unregister widget")
868 void WidgetDAO::unregisterWidget(WrtDB::DbWidgetHandle handle)
870 LogDebug("Unregistering widget from DB. Handle: " << handle);
871 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
873 using namespace DPL::DB::ORM;
874 using namespace DPL::DB::ORM::wrt;
875 ScopedTransaction transaction(&WrtDatabase::interface());
877 // Delete from table Widget Info
878 WRT_DB_DELETE(del, WidgetInfo, &WrtDatabase::interface())
879 del->Where(Equals<WidgetInfo::app_id>(handle));
882 transaction.Commit();
884 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to unregister widget")
887 void WidgetDAO::unregisterWidgetInternal(
888 const TizenAppId & tzAppId)
890 using namespace DPL::DB::ORM;
891 using namespace DPL::DB::ORM::wrt;
893 DbWidgetHandle handle = getHandle(tzAppId);
895 // Delete from table Widget Info
896 WRT_DB_DELETE(del, WidgetInfo, &WrtDatabase::interface())
897 del->Where(Equals<WidgetInfo::app_id>(handle));
900 // Deleting in other tables is done via "delete cascade" in SQL
905 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
906 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END