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")
416 WidgetPkgNameList_TEMPORARY_API WidgetDAOReadOnly::getPkgnameList_TEMPORARY_API()
418 LogDebug("Getting Pkgname List ");
419 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
421 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
422 return select->GetValueList<WidgetInfo::pkgname>();
424 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
427 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
429 LogDebug("Getting DbWidget List");
430 DbWidgetDAOReadOnlyList list;
431 FOREACH(iterator, getHandleList()) {
432 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
437 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
439 LogDebug("Checking if widget exist. Handle: " << handle);
440 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
442 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
443 select->Where(Equals<WidgetInfo::app_id>(handle));
445 WidgetInfo::Select::RowList rows = select->GetRowList();
447 return !rows.empty();
449 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
452 bool WidgetDAOReadOnly::isWidgetInstalled(const WidgetPkgName & pkgName)
454 LogDebug("Checking if widget exist. package name " << pkgName);
455 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
457 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
458 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
460 WidgetInfo::Select::RowList rows = select->GetRowList();
462 return !rows.empty();
464 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
467 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
469 LogDebug("Getting WidgetExtranalFiles List");
470 ExternalLocationList result;
471 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
473 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
474 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
475 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
478 result.push_back(DPL::ToUTF8String(it->Get_path()));
481 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
485 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
486 CertificateSource source) const
488 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
491 Equals<WidgetCertificate::app_id>(m_widgetHandle),
492 Equals<WidgetCertificate::cert_source>(source)));
494 std::list<WidgetCertificate::Row> chainList = select->GetRowList();
496 CertificateChainList result;
498 FOREACH(iter, chainList)
499 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
503 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
505 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
508 size.width = row.Get_widget_width();
509 size.height = row.Get_widget_height();
511 LogDebug("Return size wxh = " <<
512 (!!size.width ? *size.width : -1) << " x " <<
513 (!!size.height ? *size.height : -1));
518 WidgetType WidgetDAOReadOnly::getWidgetType() const
520 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
521 DPL::OptionalInt result = row.Get_widget_type();
522 return WidgetType(static_cast<AppType>(*result));
525 WidgetGUID WidgetDAOReadOnly::getGUID() const
527 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
528 return row.Get_widget_id();
531 DPL::OptionalString WidgetDAOReadOnly::getPkgname() const
533 return DPL::OptionalString(getPkgName());
536 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
538 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
539 return row.Get_defaultlocale();
542 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
544 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
545 return row.Get_widget_version();
548 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
550 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
551 return row.Get_author_name();
554 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
556 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
557 return row.Get_author_email();
560 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
562 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
563 return row.Get_author_href();
566 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
568 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
569 return row.Get_min_version();
572 std::string WidgetDAOReadOnly::getShareHref() const
574 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
576 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
577 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
578 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
581 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
582 "Cannot find widget. Handle: " << m_widgetHandle);
585 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
586 std::string ret = "";
587 if (!value.IsNull()) {
588 ret = DPL::ToUTF8String(*value);
592 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
595 bool WidgetDAOReadOnly::getBackSupported() const
597 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
598 return row.Get_back_supported();
601 bool WidgetDAOReadOnly::isRecognized() const
603 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
604 DPL::OptionalInt result = row.Get_recognized();
605 if (result.IsNull()) {
608 return static_cast<bool>(*result);
611 bool WidgetDAOReadOnly::isWacSigned() const
613 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
614 DPL::OptionalInt result = row.Get_wac_signed();
615 if (result.IsNull()) {
618 return static_cast<bool>(*result);
621 bool WidgetDAOReadOnly::isDistributorSigned() const
623 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
624 DPL::OptionalInt result = row.Get_distributor_signed();
625 if (result.IsNull()) {
628 return static_cast<bool>(*result);
631 bool WidgetDAOReadOnly::isTrusted() const
634 // widget with verified distributor signature is trusted
635 return isDistributorSigned();
638 bool WidgetDAOReadOnly::isTestWidget() const
641 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
642 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
644 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
646 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
647 "Cannot find widget. Handle: " << m_widgetHandle);
650 return static_cast<bool>(rows.front().Get_test_widget());
652 Catch(DPL::DB::SqlConnection::Exception::Base){
653 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
654 "Failed to check IsTestWidget");
658 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
660 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
661 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
663 if (ret.IsNull() || *ret == 0) { return false; } else { return true; }
666 time_t WidgetDAOReadOnly::getInstallTime() const
668 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
670 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
671 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
673 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
675 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
676 "Cannot find widget. Handle: " << m_widgetHandle);
679 return static_cast<time_t>(*rows.front().Get_install_time());
681 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
684 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
686 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
688 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
689 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
691 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
693 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
694 "Cannot find widget. Handle: " << m_widgetHandle);
697 DPL::OptionalString value = rows.front().Get_splash_img_src();
698 if (value.IsNull()) {
699 return DPL::OptionalString::Null;
702 return DPL::OptionalString(getPath() + *value);
704 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
707 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::getLocalizedIconList() const
709 //TODO check widget existance??
710 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
712 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
713 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
715 std::list<WidgetLocalizedIcon::Row> list =
716 select->GetRowList();
717 WidgetLocalizedIconList ret;
720 WidgetLocalizedIconRow icon = {it->Get_app_id(),
722 it->Get_widget_locale()};
727 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
730 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
732 //TODO check widget existance
733 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
735 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
736 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
738 std::list<WidgetIcon::Row> list =
739 select->GetRowList();
743 WidgetIconRow icon = {it->Get_icon_id(),
746 it->Get_icon_width(),
747 it->Get_icon_height()};
752 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
755 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::getLocalizedStartFileList() const
757 //TODO check widget existance
758 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
760 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
761 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
763 select->OrderBy("start_file_id ASC");
765 std::list<WidgetLocalizedStartFile::Row> list =
766 select->GetRowList();
767 LocalizedStartFileList ret;
770 WidgetLocalizedStartFileRow file = {it->Get_start_file_id(),
772 it->Get_widget_locale(),
779 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
782 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList() const
784 //TODO check widget existance
785 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
787 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
788 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
789 select->OrderBy("start_file_id ASC");
791 std::list<WidgetStartFile::Row> list =
792 select->GetRowList();
793 WidgetStartFileList ret;
796 WidgetStartFileRow file = {it->Get_start_file_id(),
803 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
806 WindowModeList WidgetDAOReadOnly::getWindowModes() const
808 //TODO check widget existance
809 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
811 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
812 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
814 return select->GetValueList<WidgetWindowModes::window_mode>();
816 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
819 std::string WidgetDAOReadOnly::getBaseFolder() const
821 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
822 DPL::Optional<DPL::String> ret = row.Get_base_folder();
823 std::string baseFolder;
825 baseFolder = DPL::ToUTF8String(*ret);
828 if (!baseFolder.empty()) {
835 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
837 //TODO check widget existance
838 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
840 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
841 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
843 select->OrderBy("chainid");
844 WidgetCertificateFingerprint::Select::RowList rows =
845 select->GetRowList();
847 WidgetCertificateDataList outlCertificateData;
850 WidgetCertificateData data;
853 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
855 static_cast <WidgetCertificateData::Type>(it->Get_type());
856 data.chainId = it->Get_chainid();
857 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
858 data.strMD5Fingerprint =
859 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
860 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
861 data.strSHA1Fingerprint =
862 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
863 DPL::Optional<DPL::String> cname = it->Get_common_name();
865 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
867 outlCertificateData.push_back(data);
869 return outlCertificateData;
871 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
874 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
875 WidgetCertificateData::Owner owner,
876 WidgetCertificateData::Type type) const
878 //TODO check widget existance
879 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
881 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
882 select->Where(And(And(
883 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
884 Equals<WidgetCertificateFingerprint::owner>(owner)),
885 Equals<WidgetCertificateFingerprint::type>(type)));
887 WidgetCertificateFingerprint::Select::RowList rows =
888 select->GetRowList();
890 FingerPrintList keys;
893 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
894 if (!sha1.IsNull()) {
895 keys.push_back(DPL::ToUTF8String(*sha1));
897 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
899 keys.push_back(DPL::ToUTF8String(*md5));
904 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
907 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
908 WidgetCertificateData::Owner owner,
909 WidgetCertificateData::Type type) const
911 //TODO check widget existance
912 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
914 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
915 select->Where(And(And(
916 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
917 Equals<WidgetCertificateFingerprint::owner>(owner)),
918 Equals<WidgetCertificateFingerprint::type>(type)));
920 WidgetCertificateFingerprint::Select::RowList rows =
921 select->GetRowList();
923 WidgetCertificateCNList out;
926 DPL::Optional<DPL::String> cname = it->Get_common_name();
927 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
931 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
934 ResourceAttributeList WidgetDAOReadOnly::getResourceAttribute(
935 const std::string &resourceId) const
937 WRT_DB_SELECT(select, WidgetFeature, &WrtDatabase::interface())
938 select->Where(And(Equals<WidgetFeature::app_id>(m_widgetHandle),
939 Equals<WidgetFeature::name>(
940 DPL::FromUTF8String(resourceId))));
942 std::list<WidgetFeature::Row> list = select->GetRowList();
943 ResourceAttributeList result;
945 int widgetFeatureId = list.begin()->Get_widget_feature_id();
946 WidgetParamMap map = getFeatureParams(widgetFeatureId);
949 result.push_back(DPL::ToUTF8String(i->first));
954 void WidgetDAOReadOnly::getWidgetAccessInfo(
955 WidgetAccessInfoList& outAccessInfoList) const
957 //TODO check widget existance
958 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
960 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
961 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
963 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
967 WidgetAccessInfo info;
969 info.strIRI = it->Get_iri();
970 DPL::OptionalInt access = it->Get_subdomain_access();
971 if (access.IsNull() || 0 == *access) {
972 info.bSubDomains = false;
973 } else if (1 == *access) {
974 info.bSubDomains = true;
977 outAccessInfoList.push_back(info);
980 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
983 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
985 //TODO check widget existance
986 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
988 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
989 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
990 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
992 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
995 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
997 //TODO check widget existance
998 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
999 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
1001 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
1004 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
1006 using namespace WrtDB::WidgetConfig;
1007 std::ostringstream path;
1009 WidgetPkgName pkgname = getPkgName();
1011 path << GetWidgetPersistentStoragePath(pkgname);
1013 path << GlobalConfig::GetCookieDatabaseFile();
1018 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
1020 std::ostringstream path;
1021 WidgetPkgName pkgname = getPkgName();
1022 path << WidgetConfig::GetWidgetWebLocalStoragePath(pkgname);
1028 void WidgetDAOReadOnly::getWidgetSettings(
1029 WidgetSettings& outWidgetSettings) const
1031 //TODO check widget existance
1032 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1034 WRT_DB_SELECT(select, SettingsList, &WrtDatabase::interface())
1035 select->Where(Equals<SettingsList::appId>(m_widgetHandle));
1037 SettingsList::Select::RowList rows = select->GetRowList();
1043 info.settingName = it->Get_settingName();
1044 info.settingValue = it->Get_settingValue();
1045 outWidgetSettings.push_back(info);
1048 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1051 void WidgetDAOReadOnly::getAppServiceList(
1052 WidgetApplicationServiceList& outAppServiceList) const
1054 LogDebug("Getting getAppServiceList. Handle: " << m_widgetHandle);
1055 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1057 ScopedTransaction transaction(&WrtDatabase::interface());
1058 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1060 WRT_DB_SELECT(select, ApplicationServiceInfo, &WrtDatabase::interface())
1061 select->Where(Equals<ApplicationServiceInfo::app_id>(m_widgetHandle));
1063 ApplicationServiceInfo::Select::RowList rows = select->GetRowList();
1066 LogDebug("Application Service list is empty. Handle: " <<
1071 WidgetApplicationService ret;
1072 ret.src = it->Get_src();
1073 ret.operation = it->Get_operation();
1074 ret.scheme = it->Get_scheme();
1075 ret.mime = it->Get_mime();
1076 outAppServiceList.push_back(ret);
1079 transaction.Commit();
1081 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
1084 PackagingType WidgetDAOReadOnly::getPackagingType() const
1086 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1087 DPL::OptionalInt result = row.Get_pkg_type();
1088 return PackagingType(static_cast<PkgType>(*result));
1091 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList) const
1093 //TODO check widget existance
1094 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1095 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1097 typedef std::list<EncryptedResourceList::Row> RowList;
1098 RowList list = select->GetRowList();
1101 EncryptedFileInfo info;
1102 info.fileName = it->Get_resource();
1103 info.fileSize = it->Get_size();
1104 filesList.insert(info);
1108 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1110 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1112 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1113 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1115 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1117 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1118 "Cannot find widget. Handle: " << m_widgetHandle);
1121 return rows.front().Get_background_page();
1123 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1126 WidgetPkgName WidgetDAOReadOnly::generateTizenId() {
1127 std::string allowed("0123456789"
1128 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1129 "abcdefghijklmnopqrstuvwxyz");
1130 WidgetPkgName tizenId;
1131 tizenId.resize(MAX_TIZENID_LENGTH);
1133 for (int i = 0; i < MAX_TIZENID_LENGTH; ++i) {
1134 tizenId[i] = allowed[rand() % allowed.length()];
1136 } while (isWidgetInstalled(tizenId));
1140 SettingsType WidgetDAOReadOnly::getSecurityPopupUsage(void) const
1142 WidgetSecuritySettingsRow row =
1143 getWidgetSecuritySettingsRow(m_widgetHandle);
1144 DPL::OptionalInt result = row.Get_security_popup_usage();
1145 return static_cast<SettingsType>(*result);
1148 SettingsType WidgetDAOReadOnly::getGeolocationUsage(void) const
1150 WidgetSecuritySettingsRow row =
1151 getWidgetSecuritySettingsRow(m_widgetHandle);
1152 DPL::OptionalInt result = row.Get_geolocation_usage();
1153 return static_cast<SettingsType>(*result);
1156 SettingsType WidgetDAOReadOnly::getWebNotificationUsage(void) const
1158 WidgetSecuritySettingsRow row =
1159 getWidgetSecuritySettingsRow(m_widgetHandle);
1160 DPL::OptionalInt result = row.Get_web_notification_usage();
1161 return static_cast<SettingsType>(*result);
1164 SettingsType WidgetDAOReadOnly::getWebDatabaseUsage(void) const
1166 WidgetSecuritySettingsRow row =
1167 getWidgetSecuritySettingsRow(m_widgetHandle);
1168 DPL::OptionalInt result = row.Get_web_database_usage();
1169 return static_cast<SettingsType>(*result);
1172 SettingsType WidgetDAOReadOnly::getFileSystemUsage(void) const
1174 WidgetSecuritySettingsRow row =
1175 getWidgetSecuritySettingsRow(m_widgetHandle);
1176 DPL::OptionalInt result = row.Get_file_system_usage();
1177 return static_cast<SettingsType>(*result);
1180 DPL::OptionalString WidgetDAOReadOnly::getWidgetInstalledPath() const
1182 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1184 using namespace DPL::DB::ORM;
1185 using namespace DPL::DB::ORM::wrt;
1186 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1187 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1189 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1191 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1192 "Cannot find widget. Handle: " << m_widgetHandle);
1195 return rows.front().Get_installed_path();
1197 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget installed path")
1199 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1200 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1201 #undef CHECK_WIDGET_EXISTENCE
1203 } // namespace WrtDB