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 TizenAppId getTizenAppIdByHandle(const DbWidgetHandle handle)
118 LogDebug("Getting TizenAppId 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 TizenAppId tzAppid = rowList.front().Get_tizen_appid();
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 tzAppid) :
155 m_widgetHandle(WidgetDAOReadOnly::getHandle(tzAppid))
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 tzAppId)
190 LogDebug("Getting WidgetHandle by tizen app id [" << tzAppId << "]");
192 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
194 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
195 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
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
212 WidgetPkgName WidgetDAOReadOnly::getPkgName(const WidgetGUID GUID)
214 return getTzAppId(GUID);
217 WidgetPkgName WidgetDAOReadOnly::getPkgName(const DbWidgetHandle handle)
219 return getTzAppId(handle);
222 TizenAppId WidgetDAOReadOnly::getTzAppId() const
224 return getTizenAppIdByHandle(m_widgetHandle);
227 TizenAppId WidgetDAOReadOnly::getTzAppId(const WidgetGUID GUID)
229 return getTizenAppIdByHandle(getHandle(GUID));
232 TizenAppId WidgetDAOReadOnly::getTzAppId(const DbWidgetHandle handle)
234 return getTizenAppIdByHandle(handle);
237 PropertyDAOReadOnly::WidgetPropertyKeyList
238 WidgetDAOReadOnly::getPropertyKeyList() const
240 return PropertyDAOReadOnly::GetPropertyKeyList(getTzAppId());
243 PropertyDAOReadOnly::WidgetPreferenceList
244 WidgetDAOReadOnly::getPropertyList() const
246 return PropertyDAOReadOnly::GetPropertyList(getTzAppId());
249 PropertyDAOReadOnly::WidgetPropertyValue WidgetDAOReadOnly::getPropertyValue(
250 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
252 return PropertyDAOReadOnly::GetPropertyValue(getTzAppId(), key);
255 DPL::OptionalInt WidgetDAOReadOnly::checkPropertyReadFlag(
256 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
258 return PropertyDAOReadOnly::CheckPropertyReadFlag(getTzAppId(), key);
261 DPL::String WidgetDAOReadOnly::getPath() const
263 DPL::String path = *getWidgetInstalledPath();
264 DPL::String srcPath = DPL::FromUTF8String(GlobalConfig::GetWidgetSrcPath());
266 path += srcPath + L"/";
271 DPL::String WidgetDAOReadOnly::getFullPath() const
273 return L"file://" + getPath();
277 WidgetDAOReadOnly::getLocalizedInfo(const DPL::String& languageTag)
280 LogDebug("Getting Localized Info. Handle: " << m_widgetHandle);
281 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
283 ScopedTransaction transaction(&WrtDatabase::interface());
284 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
286 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
288 And(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle),
289 Equals<LocalizedWidgetInfo::widget_locale>(languageTag)));
290 LocalizedWidgetInfo::Row info = select->GetSingleRow();
291 WidgetLocalizedInfo result;
293 result.name = info.Get_widget_name();
294 result.shortName = info.Get_widget_shortname();
295 result.description = info.Get_widget_description();
296 result.license = info.Get_widget_license();
297 result.licenseHref = info.Get_widget_license_href();
299 transaction.Commit();
302 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info")
305 DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const
307 LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle);
308 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
310 ScopedTransaction transaction(&WrtDatabase::interface());
311 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
313 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
314 select->Where(Equals<WidgetFeature::app_id>(m_widgetHandle));
316 DbWidgetFeatureSet resultSet;
317 typedef std::list<WidgetFeature::Row> RowList;
318 RowList list = select->GetRowList();
320 for (RowList::iterator i = list.begin(); i != list.end(); ++i) {
321 DbWidgetFeature feature;
322 feature.name = i->Get_name();
323 feature.required = i->Get_required();
324 feature.rejected = i->Get_rejected();
325 feature.params = getFeatureParams(i->Get_widget_feature_id());
326 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
327 feature.pluginId = featureDao.GetPluginHandle();
328 resultSet.insert(feature);
330 transaction.Commit();
333 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
336 WidgetParamMap WidgetDAOReadOnly::getFeatureParams(int id)
338 WidgetFeatureId widgetFeatureId(id);
339 LogDebug("Getting feature Params. featureId: " << widgetFeatureId);
340 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
342 WRT_DB_SELECT(select, FeatureParam, &WrtDatabase::interface())
343 select->Where(Equals<FeatureParam::widget_feature_id>(
346 WidgetParamMap resultMap;
347 typedef std::list<FeatureParam::Row> RowList;
348 RowList list = select->GetRowList();
351 resultMap.insert(std::make_pair(i->Get_name(), i->Get_value()));
355 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get feature params")
358 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
361 "Checking if widget has feature: " << featureName << ". Handle: " <<
363 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
365 ScopedTransaction transaction(&WrtDatabase::interface());
366 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
368 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
369 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
370 Equals<wrt::WidgetFeature::name>(
371 DPL::FromUTF8String(featureName))));
373 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
374 transaction.Commit();
375 return !rows.empty();
377 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
380 HostList WidgetDAOReadOnly::getAccessHostList() const
382 LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle);
383 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
385 ScopedTransaction transaction(&WrtDatabase::interface());
386 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
388 WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface())
389 select->Where(Equals<WidgetAccessHost::app_id>(m_widgetHandle));
390 std::list<WidgetAccessHost::host::ColumnType> values =
391 select->GetValueList<WidgetAccessHost::host>();
394 ret.push_back(DPL::ToUTF8String(*it));
396 transaction.Commit();
399 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
402 bool WidgetDAOReadOnly::getAccessNetworkMode() const
404 //TODO there is no column access_network
405 //it was removed in "Widget localization overhaul
409 DbWidgetHandleList WidgetDAOReadOnly::getHandleList()
411 LogDebug("Getting DbWidgetHandle List");
412 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
414 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
415 return select->GetValueList<WidgetInfo::app_id>();
417 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
420 WidgetPkgNameList WidgetDAOReadOnly::getPkgnameList()
422 LogDebug("Getting Pkgname List ");
423 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
425 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
426 return select->GetValueList<WidgetInfo::tizen_appid>();
428 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
431 TizenAppIdList WidgetDAOReadOnly::getTizenAppidList()
433 LogDebug("Getting Pkgname List ");
434 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
436 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
437 return select->GetValueList<WidgetInfo::tizen_appid>();
439 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
442 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
444 LogDebug("Getting DbWidget List");
445 DbWidgetDAOReadOnlyList list;
446 FOREACH(iterator, getHandleList()) {
447 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
452 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
454 LogDebug("Checking if widget exist. Handle: " << handle);
455 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
457 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
458 select->Where(Equals<WidgetInfo::app_id>(handle));
460 WidgetInfo::Select::RowList rows = select->GetRowList();
462 return !rows.empty();
464 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
467 bool WidgetDAOReadOnly::isWidgetInstalled(const TizenAppId &tzAppId)
469 LogDebug("Checking if widget exist. tizen app id" << tzAppId);
470 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
472 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
473 select->Where(Equals<WidgetInfo::tizen_appid>(tzAppId));
475 WidgetInfo::Select::RowList rows = select->GetRowList();
477 return !rows.empty();
479 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
482 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
484 LogDebug("Getting WidgetExtranalFiles List");
485 ExternalLocationList result;
486 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
488 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
489 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
490 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
493 result.push_back(DPL::ToUTF8String(it->Get_path()));
496 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
500 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
501 CertificateSource source) const
503 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
506 Equals<WidgetCertificate::app_id>(m_widgetHandle),
507 Equals<WidgetCertificate::cert_source>(source)));
509 std::list<WidgetCertificate::Row> chainList = select->GetRowList();
511 CertificateChainList result;
513 FOREACH(iter, chainList)
514 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
518 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
520 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
523 size.width = row.Get_widget_width();
524 size.height = row.Get_widget_height();
526 LogDebug("Return size wxh = " <<
527 (!!size.width ? *size.width : -1) << " x " <<
528 (!!size.height ? *size.height : -1));
533 WidgetType WidgetDAOReadOnly::getWidgetType() const
535 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
536 DPL::OptionalInt result = row.Get_widget_type();
537 return WidgetType(static_cast<AppType>(*result));
540 WidgetGUID WidgetDAOReadOnly::getGUID() const
542 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
543 return row.Get_widget_id();
546 DPL::OptionalString WidgetDAOReadOnly::getTizenAppId() const
548 return DPL::OptionalString(getTzAppId());
551 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
553 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
554 return row.Get_defaultlocale();
557 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
559 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
560 return row.Get_widget_version();
563 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
565 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
566 return row.Get_author_name();
569 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
571 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
572 return row.Get_author_email();
575 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
577 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
578 return row.Get_author_href();
581 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
583 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
584 return row.Get_min_version();
587 std::string WidgetDAOReadOnly::getShareHref() const
589 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
591 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
592 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
593 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
596 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
597 "Cannot find widget. Handle: " << m_widgetHandle);
600 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
601 std::string ret = "";
602 if (!value.IsNull()) {
603 ret = DPL::ToUTF8String(*value);
607 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
610 bool WidgetDAOReadOnly::getBackSupported() const
612 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
613 return row.Get_back_supported();
616 bool WidgetDAOReadOnly::isRecognized() const
618 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
619 DPL::OptionalInt result = row.Get_recognized();
620 if (result.IsNull()) {
623 return static_cast<bool>(*result);
626 bool WidgetDAOReadOnly::isWacSigned() const
628 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
629 DPL::OptionalInt result = row.Get_wac_signed();
630 if (result.IsNull()) {
633 return static_cast<bool>(*result);
636 bool WidgetDAOReadOnly::isDistributorSigned() const
638 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
639 DPL::OptionalInt result = row.Get_distributor_signed();
640 if (result.IsNull()) {
643 return static_cast<bool>(*result);
646 bool WidgetDAOReadOnly::isTrusted() const
649 // widget with verified distributor signature is trusted
650 return isDistributorSigned();
653 bool WidgetDAOReadOnly::isTestWidget() const
656 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
657 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
659 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
661 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
662 "Cannot find widget. Handle: " << m_widgetHandle);
665 return static_cast<bool>(rows.front().Get_test_widget());
667 Catch(DPL::DB::SqlConnection::Exception::Base){
668 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
669 "Failed to check IsTestWidget");
673 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
675 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
676 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
678 if (ret.IsNull() || *ret == 0) { return false; } else { return true; }
681 time_t WidgetDAOReadOnly::getInstallTime() const
683 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
685 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
686 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
688 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
690 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
691 "Cannot find widget. Handle: " << m_widgetHandle);
694 return static_cast<time_t>(*rows.front().Get_install_time());
696 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
699 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
701 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
703 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
704 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
706 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
708 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
709 "Cannot find widget. Handle: " << m_widgetHandle);
712 DPL::OptionalString value = rows.front().Get_splash_img_src();
713 if (value.IsNull()) {
714 return DPL::OptionalString::Null;
717 return DPL::OptionalString(getPath() + *value);
719 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
722 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::getLocalizedIconList() const
724 //TODO check widget existance??
725 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
727 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
728 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
730 std::list<WidgetLocalizedIcon::Row> list =
731 select->GetRowList();
732 WidgetLocalizedIconList ret;
735 WidgetLocalizedIconRow icon = {it->Get_app_id(),
737 it->Get_widget_locale()};
742 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
745 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
747 //TODO check widget existance
748 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
750 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
751 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
752 select->OrderBy(DPL::TypeListDecl<OrderingAscending<wrt::WidgetIcon::icon_id> >());
754 std::list<WidgetIcon::Row> list =
755 select->GetRowList();
759 WidgetIconRow icon = {it->Get_icon_id(),
762 it->Get_icon_width(),
763 it->Get_icon_height()};
768 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
771 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::getLocalizedStartFileList() const
773 //TODO check widget existance
774 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
776 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
777 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
779 select->OrderBy("start_file_id ASC");
781 std::list<WidgetLocalizedStartFile::Row> list =
782 select->GetRowList();
783 LocalizedStartFileList ret;
786 WidgetLocalizedStartFileRow file = {it->Get_start_file_id(),
788 it->Get_widget_locale(),
795 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
798 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList() const
800 //TODO check widget existance
801 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
803 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
804 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
805 select->OrderBy("start_file_id ASC");
807 std::list<WidgetStartFile::Row> list =
808 select->GetRowList();
809 WidgetStartFileList ret;
812 WidgetStartFileRow file = {it->Get_start_file_id(),
819 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
822 WindowModeList WidgetDAOReadOnly::getWindowModes() const
824 //TODO check widget existance
825 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
827 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
828 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
830 return select->GetValueList<WidgetWindowModes::window_mode>();
832 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
835 std::string WidgetDAOReadOnly::getBaseFolder() const
837 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
838 DPL::Optional<DPL::String> ret = row.Get_base_folder();
839 std::string baseFolder;
841 baseFolder = DPL::ToUTF8String(*ret);
844 if (!baseFolder.empty()) {
851 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
853 //TODO check widget existance
854 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
856 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
857 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
859 select->OrderBy("chainid");
860 WidgetCertificateFingerprint::Select::RowList rows =
861 select->GetRowList();
863 WidgetCertificateDataList outlCertificateData;
866 WidgetCertificateData data;
869 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
871 static_cast <WidgetCertificateData::Type>(it->Get_type());
872 data.chainId = it->Get_chainid();
873 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
874 data.strMD5Fingerprint =
875 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
876 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
877 data.strSHA1Fingerprint =
878 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
879 DPL::Optional<DPL::String> cname = it->Get_common_name();
881 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
883 outlCertificateData.push_back(data);
885 return outlCertificateData;
887 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
890 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
891 WidgetCertificateData::Owner owner,
892 WidgetCertificateData::Type type) const
894 //TODO check widget existance
895 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
897 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
898 select->Where(And(And(
899 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
900 Equals<WidgetCertificateFingerprint::owner>(owner)),
901 Equals<WidgetCertificateFingerprint::type>(type)));
903 WidgetCertificateFingerprint::Select::RowList rows =
904 select->GetRowList();
906 FingerPrintList keys;
909 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
910 if (!sha1.IsNull()) {
911 keys.push_back(DPL::ToUTF8String(*sha1));
913 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
915 keys.push_back(DPL::ToUTF8String(*md5));
920 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
923 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
924 WidgetCertificateData::Owner owner,
925 WidgetCertificateData::Type type) const
927 //TODO check widget existance
928 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
930 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
931 select->Where(And(And(
932 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
933 Equals<WidgetCertificateFingerprint::owner>(owner)),
934 Equals<WidgetCertificateFingerprint::type>(type)));
936 WidgetCertificateFingerprint::Select::RowList rows =
937 select->GetRowList();
939 WidgetCertificateCNList out;
942 DPL::Optional<DPL::String> cname = it->Get_common_name();
943 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
947 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
950 ResourceAttributeList WidgetDAOReadOnly::getResourceAttribute(
951 const std::string &resourceId) const
953 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
954 select->Where(And(Equals<WidgetFeature::app_id>(m_widgetHandle),
955 Equals<WidgetFeature::name>(
956 DPL::FromUTF8String(resourceId))));
958 std::list<WidgetFeature::Row> list = select->GetRowList();
959 ResourceAttributeList result;
961 int widgetFeatureId = list.begin()->Get_widget_feature_id();
962 WidgetParamMap map = getFeatureParams(widgetFeatureId);
965 result.push_back(DPL::ToUTF8String(i->first));
970 void WidgetDAOReadOnly::getWidgetAccessInfo(
971 WidgetAccessInfoList& outAccessInfoList) const
973 //TODO check widget existance
974 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
976 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
977 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
979 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
983 WidgetAccessInfo info;
985 info.strIRI = it->Get_iri();
986 DPL::OptionalInt access = it->Get_subdomain_access();
987 if (access.IsNull() || 0 == *access) {
988 info.bSubDomains = false;
989 } else if (1 == *access) {
990 info.bSubDomains = true;
993 outAccessInfoList.push_back(info);
996 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
999 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
1001 //TODO check widget existance
1002 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1004 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
1005 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
1006 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
1008 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
1011 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
1013 //TODO check widget existance
1014 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
1015 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
1017 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
1020 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
1022 using namespace WrtDB::WidgetConfig;
1023 std::ostringstream path;
1025 TizenAppId tzAppId = getTzAppId();
1027 path << GetWidgetPersistentStoragePath(tzAppId);
1029 path << GlobalConfig::GetCookieDatabaseFile();
1034 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
1036 std::ostringstream path;
1037 TizenAppId tzAppId = getTzAppId();
1038 path << WidgetConfig::GetWidgetWebLocalStoragePath(tzAppId);
1044 void WidgetDAOReadOnly::getWidgetSettings(
1045 WidgetSettings& outWidgetSettings) const
1047 //TODO check widget existance
1048 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1050 WRT_DB_SELECT(select, SettingsList, &WrtDatabase::interface())
1051 select->Where(Equals<SettingsList::appId>(m_widgetHandle));
1053 SettingsList::Select::RowList rows = select->GetRowList();
1059 info.settingName = it->Get_settingName();
1060 info.settingValue = it->Get_settingValue();
1061 outWidgetSettings.push_back(info);
1064 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1067 void WidgetDAOReadOnly::getAppServiceList(
1068 WidgetApplicationServiceList& outAppServiceList) const
1070 LogDebug("Getting getAppServiceList. Handle: " << m_widgetHandle);
1071 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1073 ScopedTransaction transaction(&WrtDatabase::interface());
1074 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1076 WRT_DB_SELECT(select, ApplicationServiceInfo, &WrtDatabase::interface())
1077 select->Where(Equals<ApplicationServiceInfo::app_id>(m_widgetHandle));
1079 ApplicationServiceInfo::Select::RowList rows = select->GetRowList();
1082 LogDebug("Application Service list is empty. Handle: " <<
1087 WidgetApplicationService ret;
1088 ret.src = it->Get_src();
1089 ret.operation = it->Get_operation();
1090 ret.scheme = it->Get_scheme();
1091 ret.mime = it->Get_mime();
1092 outAppServiceList.push_back(ret);
1095 transaction.Commit();
1097 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
1100 PackagingType WidgetDAOReadOnly::getPackagingType() const
1102 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1103 DPL::OptionalInt result = row.Get_pkg_type();
1104 return PackagingType(static_cast<PkgType>(*result));
1107 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList) const
1109 //TODO check widget existance
1110 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1111 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1113 typedef std::list<EncryptedResourceList::Row> RowList;
1114 RowList list = select->GetRowList();
1117 EncryptedFileInfo info;
1118 info.fileName = it->Get_resource();
1119 info.fileSize = it->Get_size();
1120 filesList.insert(info);
1124 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1126 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1128 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1129 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1131 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1133 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1134 "Cannot find widget. Handle: " << m_widgetHandle);
1137 return rows.front().Get_background_page();
1139 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1142 TizenPkgId WidgetDAOReadOnly::generatePkgId() {
1143 std::string allowed("0123456789"
1144 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1145 "abcdefghijklmnopqrstuvwxyz");
1147 pkgId.resize(MAX_TIZENID_LENGTH);
1149 for (int i = 0; i < MAX_TIZENID_LENGTH; ++i) {
1150 pkgId[i] = allowed[rand() % allowed.length()];
1152 } while (isWidgetInstalled(pkgId));
1156 SettingsType WidgetDAOReadOnly::getSecurityPopupUsage(void) const
1158 WidgetSecuritySettingsRow row =
1159 getWidgetSecuritySettingsRow(m_widgetHandle);
1160 DPL::OptionalInt result = row.Get_security_popup_usage();
1161 return static_cast<SettingsType>(*result);
1164 SettingsType WidgetDAOReadOnly::getGeolocationUsage(void) const
1166 WidgetSecuritySettingsRow row =
1167 getWidgetSecuritySettingsRow(m_widgetHandle);
1168 DPL::OptionalInt result = row.Get_geolocation_usage();
1169 return static_cast<SettingsType>(*result);
1172 SettingsType WidgetDAOReadOnly::getWebNotificationUsage(void) const
1174 WidgetSecuritySettingsRow row =
1175 getWidgetSecuritySettingsRow(m_widgetHandle);
1176 DPL::OptionalInt result = row.Get_web_notification_usage();
1177 return static_cast<SettingsType>(*result);
1180 SettingsType WidgetDAOReadOnly::getWebDatabaseUsage(void) const
1182 WidgetSecuritySettingsRow row =
1183 getWidgetSecuritySettingsRow(m_widgetHandle);
1184 DPL::OptionalInt result = row.Get_web_database_usage();
1185 return static_cast<SettingsType>(*result);
1188 SettingsType WidgetDAOReadOnly::getFileSystemUsage(void) const
1190 WidgetSecuritySettingsRow row =
1191 getWidgetSecuritySettingsRow(m_widgetHandle);
1192 DPL::OptionalInt result = row.Get_file_system_usage();
1193 return static_cast<SettingsType>(*result);
1196 DPL::OptionalString WidgetDAOReadOnly::getWidgetInstalledPath() const
1198 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1200 using namespace DPL::DB::ORM;
1201 using namespace DPL::DB::ORM::wrt;
1202 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1203 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1205 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1207 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1208 "Cannot find widget. Handle: " << m_widgetHandle);
1211 return rows.front().Get_installed_path();
1213 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget installed path")
1216 TizenPkgId WidgetDAOReadOnly::getTizenPkgId() const
1218 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1219 return row.Get_tizen_pkgid();
1222 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1223 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1224 #undef CHECK_WIDGET_EXISTENCE
1226 } // namespace WrtDB