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
71 WidgetInfoRow getWidgetInfoRow(int widgetHandle)
73 LogDebug("Getting WidgetInfo row. Handle: " << widgetHandle);
74 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
76 using namespace DPL::DB::ORM;
77 using namespace DPL::DB::ORM::wrt;
78 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
79 select->Where(Equals<WidgetInfo::app_id>(widgetHandle));
81 WidgetInfo::Select::RowList rows = select->GetRowList();
83 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
84 "Cannot find widget. Handle: " << widgetHandle);
88 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in GetWidgetInfoRow")
94 IWacSecurity::~IWacSecurity()
98 WidgetDAOReadOnly::WidgetDAOReadOnly(DbWidgetHandle widgetHandle) :
99 m_widgetHandle(widgetHandle)
103 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::OptionalString widgetGUID) :
104 m_widgetHandle(WidgetDAOReadOnly::getHandle(widgetGUID))
108 WidgetDAOReadOnly::WidgetDAOReadOnly(DPL::String pkgName) :
109 m_widgetHandle(WidgetDAOReadOnly::getHandle(pkgName))
114 WidgetDAOReadOnly::~WidgetDAOReadOnly()
118 DbWidgetHandle WidgetDAOReadOnly::getHandle() const
120 return m_widgetHandle;
123 DbWidgetHandle WidgetDAOReadOnly::getHandle(const WidgetGUID GUID)
125 LogDebug("Getting WidgetHandle by GUID [" << GUID << "]");
127 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
129 using namespace DPL::DB::ORM;
130 using namespace DPL::DB::ORM::wrt;
131 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
132 select->Where(Equals<WidgetInfo::widget_id>(GUID));
133 WidgetInfo::Select::RowList rowList = select->GetRowList();
135 if (rowList.empty()) {
136 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
137 "Failed to get widget by guid");
139 return rowList.front().Get_app_id();
141 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
143 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
144 "Failed to get widget by guid");
147 DbWidgetHandle WidgetDAOReadOnly::getHandle(const DPL::String pkgName)
149 LogDebug("Getting WidgetHandle by Package Name [" << pkgName << "]");
151 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
153 using namespace DPL::DB::ORM;
154 using namespace DPL::DB::ORM::wrt;
155 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
156 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
157 WidgetInfo::Select::RowList rowList = select->GetRowList();
159 if (rowList.empty()) {
160 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
161 "Failed to get widget by package name");
163 return rowList.front().Get_app_id();
165 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
167 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
168 "Failed to get widget by package name");
171 PropertyDAOReadOnly::WidgetPropertyKeyList
172 WidgetDAOReadOnly::getPropertyKeyList() const
174 return PropertyDAOReadOnly::GetPropertyKeyList(m_widgetHandle);
177 PropertyDAOReadOnly::WidgetPreferenceList
178 WidgetDAOReadOnly::getPropertyList() const
180 return PropertyDAOReadOnly::GetPropertyList(m_widgetHandle);
183 PropertyDAOReadOnly::WidgetPropertyValue WidgetDAOReadOnly::getPropertyValue(
184 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
186 return PropertyDAOReadOnly::GetPropertyValue(m_widgetHandle, key);
189 DPL::OptionalInt WidgetDAOReadOnly::checkPropertyReadFlag(
190 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
192 return PropertyDAOReadOnly::CheckPropertyReadFlag(m_widgetHandle, key);
195 DPL::String WidgetDAOReadOnly::getPath() const
197 DPL::String path = DPL::FromUTF8String(
198 GlobalConfig::GetUserInstalledWidgetPath());
199 DPL::String srcPath = DPL::FromUTF8String(GlobalConfig::GetWidgetSrcPath());
201 DPL::OStringStream strAppId;
202 strAppId << m_widgetHandle;
203 DPL::OptionalString pkgname = getPkgname();
204 path += L"/" + *pkgname;
205 path += srcPath + L"/";
210 DPL::String WidgetDAOReadOnly::getFullPath() const
212 return L"file://" + getPath();
216 WidgetDAOReadOnly::getLocalizedInfo(const DPL::String& languageTag)
219 LogDebug("Getting Localized Info. Handle: " << m_widgetHandle);
220 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
222 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
223 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
225 using namespace DPL::DB::ORM;
226 using namespace DPL::DB::ORM::wrt;
227 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
229 And(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle),
230 Equals<LocalizedWidgetInfo::widget_locale>(languageTag)));
231 LocalizedWidgetInfo::Row info = select->GetSingleRow();
232 WidgetLocalizedInfo result;
234 result.name = info.Get_widget_name();
235 result.shortName = info.Get_widget_shortname();
236 result.description = info.Get_widget_description();
237 result.license = info.Get_widget_license();
238 result.licenseHref = info.Get_widget_license_href();
240 transaction.Commit();
243 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info")
246 DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const
248 LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle);
249 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
251 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
252 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
254 using namespace DPL::DB::ORM;
255 using namespace DPL::DB::ORM::wrt;
256 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::WidgetFeature, &WrtDatabase::interface())
257 select->Where(Equals<DPL::DB::ORM::wrt::WidgetFeature::app_id>(m_widgetHandle));
259 DbWidgetFeatureSet resultSet;
260 typedef std::list<DPL::DB::ORM::wrt::WidgetFeature::Row> RowList;
261 RowList list = select->GetRowList();
263 for (RowList::iterator i = list.begin(); i != list.end(); ++i) {
264 DbWidgetFeature feature;
265 feature.name = i->Get_name();
266 feature.required = i->Get_required();
267 feature.rejected = i->Get_rejected();
268 feature.params = getFeatureParams(i->Get_widget_feature_id());
269 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
270 feature.pluginId = featureDao.GetPluginHandle();
271 resultSet.insert(feature);
273 transaction.Commit();
276 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
279 WidgetParamMap WidgetDAOReadOnly::getFeatureParams(int id)
281 WidgetFeatureId widgetFeatureId(id);
282 LogDebug("Getting feature Params. featureId: " << widgetFeatureId);
283 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
285 using namespace DPL::DB::ORM;
286 using namespace DPL::DB::ORM::wrt;
287 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::FeatureParam, &WrtDatabase::interface())
288 select->Where(Equals<DPL::DB::ORM::wrt::FeatureParam::widget_feature_id>(
291 WidgetParamMap resultMap;
292 typedef std::list<DPL::DB::ORM::wrt::FeatureParam::Row> RowList;
293 RowList list = select->GetRowList();
296 resultMap.insert(std::make_pair(i->Get_name(), i->Get_value()));
300 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get feature params")
303 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
306 "Checking if widget has feature: " << featureName << ". Handle: " <<
308 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
310 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
311 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
313 using namespace DPL::DB::ORM;
314 using namespace DPL::DB::ORM::wrt;
315 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
316 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
317 Equals<wrt::WidgetFeature::name>(
318 DPL::FromUTF8String(featureName))));
320 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
321 transaction.Commit();
322 return !rows.empty();
324 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
327 HostList WidgetDAOReadOnly::getAccessHostList() const
329 LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle);
330 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
332 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
333 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
335 using namespace DPL::DB::ORM;
336 using namespace DPL::DB::ORM::wrt;
337 WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface())
338 select->Where(Equals<WidgetAccessHost::app_id>(m_widgetHandle));
339 std::list<WidgetAccessHost::host::ColumnType> values =
340 select->GetValueList<WidgetAccessHost::host>();
343 ret.push_back(DPL::ToUTF8String(*it));
345 transaction.Commit();
348 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
351 bool WidgetDAOReadOnly::getAccessNetworkMode() const
353 //TODO there is no column access_network
354 //it was removed in "Widget localization overhaul
358 DbWidgetHandleList WidgetDAOReadOnly::getHandleList()
360 LogDebug("Getting DbWidgetHandle List");
361 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
363 using namespace DPL::DB::ORM;
364 using namespace DPL::DB::ORM::wrt;
365 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
366 return select->GetValueList<WidgetInfo::app_id>();
368 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
371 WidgetPkgNameList WidgetDAOReadOnly::getPkgnameList()
373 LogDebug("Getting Pkgname List");
374 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
376 using namespace DPL::DB::ORM;
377 using namespace DPL::DB::ORM::wrt;
378 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
379 return select->GetValueList<WidgetInfo::pkgname>();
381 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get Pkgname list")
384 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
386 LogDebug("Getting DbWidget List");
387 DbWidgetDAOReadOnlyList list;
388 FOREACH(iterator, getHandleList()) {
389 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
394 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
396 LogDebug("Checking if widget exist. Handle: " << handle);
397 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
399 using namespace DPL::DB::ORM;
400 using namespace DPL::DB::ORM::wrt;
401 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
402 select->Where(Equals<WidgetInfo::app_id>(handle));
404 WidgetInfo::Select::RowList rows = select->GetRowList();
406 return !rows.empty();
408 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
411 bool WidgetDAOReadOnly::isWidgetInstalled(DPL::String pkgName)
413 LogDebug("Checking if widget exist. package name " << pkgName);
414 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
416 using namespace DPL::DB::ORM;
417 using namespace DPL::DB::ORM::wrt;
418 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
419 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
421 WidgetInfo::Select::RowList rows = select->GetRowList();
423 return !rows.empty();
425 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
428 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
430 LogDebug("Getting WidgetExtranalFiles List");
431 ExternalLocationList result;
432 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
434 using namespace DPL::DB::ORM;
435 using namespace DPL::DB::ORM::wrt;
436 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
437 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
438 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
441 result.push_back(DPL::ToUTF8String(it->Get_path()));
444 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
448 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
449 CertificateSource source) const
451 using namespace DPL::DB::ORM;
452 using namespace DPL::DB::ORM::wrt;
453 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
456 Equals<WidgetCertificate::app_id>(m_widgetHandle),
457 Equals<WidgetCertificate::cert_source>(source)));
459 std::list<DPL::DB::ORM::wrt::WidgetCertificate::Row> chainList = select->GetRowList();
461 CertificateChainList result;
463 FOREACH(iter, chainList)
464 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
468 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
470 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
473 size.width = row.Get_widget_width();
474 size.height = row.Get_widget_height();
476 LogDebug("Return size wxh = " <<
477 (!!size.width ? *size.width : -1) << " x " <<
478 (!!size.height ? *size.height : -1));
483 WidgetType WidgetDAOReadOnly::getWidgetType() const
485 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
486 DPL::OptionalInt result = row.Get_widget_type();
487 return WidgetType(static_cast<AppType>(*result));
490 WidgetGUID WidgetDAOReadOnly::getGUID() const
492 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
493 return row.Get_widget_id();
496 DPL::OptionalString WidgetDAOReadOnly::getPkgname() const
498 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
499 return row.Get_pkgname();
502 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
504 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
505 return row.Get_defaultlocale();
508 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
510 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
511 return row.Get_widget_version();
514 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
516 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
517 return row.Get_author_name();
520 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
522 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
523 return row.Get_author_email();
526 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
528 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
529 return row.Get_author_href();
532 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
534 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
535 return row.Get_min_version();
538 std::string WidgetDAOReadOnly::getShareHref() const
540 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
542 using namespace DPL::DB::ORM;
543 using namespace DPL::DB::ORM::wrt;
544 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
545 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
546 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
549 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
550 "Cannot find widget. Handle: " << m_widgetHandle);
553 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
554 std::string ret = "";
555 if (!value.IsNull()) {
556 ret = DPL::ToUTF8String(*value);
560 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
563 bool WidgetDAOReadOnly::getBackSupported() const
565 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
566 return row.Get_back_supported();
569 bool WidgetDAOReadOnly::isRecognized() const
571 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
572 DPL::OptionalInt result = row.Get_recognized();
573 if (result.IsNull()) {
576 return static_cast<bool>(*result);
579 bool WidgetDAOReadOnly::isWacSigned() const
581 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
582 DPL::OptionalInt result = row.Get_wac_signed();
583 if (result.IsNull()) {
586 return static_cast<bool>(*result);
589 bool WidgetDAOReadOnly::isDistributorSigned() const
591 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
592 DPL::OptionalInt result = row.Get_distributor_signed();
593 if (result.IsNull()) {
596 return static_cast<bool>(*result);
599 bool WidgetDAOReadOnly::isTrusted() const
602 // widget with verified distributor signature is trusted
603 return isDistributorSigned();
606 bool WidgetDAOReadOnly::isTestWidget() const
609 using namespace DPL::DB::ORM;
610 using namespace DPL::DB::ORM::wrt;
611 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
612 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
614 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
616 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
617 "Cannot find widget. Handle: " << m_widgetHandle);
620 return static_cast<bool>(rows.front().Get_test_widget());
622 Catch(DPL::DB::SqlConnection::Exception::Base){
623 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
624 "Failed to check IsTestWidget");
628 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
630 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
631 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
633 if (ret.IsNull() || *ret == 0) { return false; } else { return true; }
636 time_t WidgetDAOReadOnly::getInstallTime() const
638 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
640 using namespace DPL::DB::ORM;
641 using namespace DPL::DB::ORM::wrt;
642 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
643 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
645 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
647 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
648 "Cannot find widget. Handle: " << m_widgetHandle);
651 return static_cast<time_t>(*rows.front().Get_install_time());
653 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
656 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
658 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
660 using namespace DPL::DB::ORM;
661 using namespace DPL::DB::ORM::wrt;
662 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
663 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
665 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
667 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
668 "Cannot find widget. Handle: " << m_widgetHandle);
671 DPL::OptionalString value = rows.front().Get_splash_img_src();
672 if (value.IsNull()) {
673 return DPL::OptionalString::Null;
676 return DPL::OptionalString(getPath() + *value);
678 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
681 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::getLocalizedIconList() const
683 //TODO check widget existance??
684 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
686 using namespace DPL::DB::ORM;
687 using namespace DPL::DB::ORM::wrt;
688 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
689 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
691 std::list<DPL::DB::ORM::wrt::WidgetLocalizedIcon::Row> list =
692 select->GetRowList();
693 WidgetLocalizedIconList ret;
696 WidgetLocalizedIconRow icon = {it->Get_app_id(),
698 it->Get_widget_locale()};
703 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
706 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
708 //TODO check widget existance
709 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
711 using namespace DPL::DB::ORM;
712 using namespace DPL::DB::ORM::wrt;
713 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
714 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
716 std::list<DPL::DB::ORM::wrt::WidgetIcon::Row> list =
717 select->GetRowList();
721 WidgetIconRow icon = {it->Get_icon_id(),
724 it->Get_icon_width(),
725 it->Get_icon_height()};
730 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
733 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::getLocalizedStartFileList() const
735 //TODO check widget existance
736 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
738 using namespace DPL::DB::ORM;
739 using namespace DPL::DB::ORM::wrt;
740 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
741 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
743 select->OrderBy("start_file_id ASC");
745 std::list<DPL::DB::ORM::wrt::WidgetLocalizedStartFile::Row> list =
746 select->GetRowList();
747 LocalizedStartFileList ret;
750 WidgetLocalizedStartFileRow file = {it->Get_start_file_id(),
752 it->Get_widget_locale(),
759 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
762 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList() const
764 //TODO check widget existance
765 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
767 using namespace DPL::DB::ORM;
768 using namespace DPL::DB::ORM::wrt;
769 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
770 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
771 select->OrderBy("start_file_id ASC");
773 std::list<DPL::DB::ORM::wrt::WidgetStartFile::Row> list =
774 select->GetRowList();
775 WidgetStartFileList ret;
778 WidgetStartFileRow file = {it->Get_start_file_id(),
785 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
788 WindowModeList WidgetDAOReadOnly::getWindowModes() const
790 //TODO check widget existance
791 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
793 using namespace DPL::DB::ORM;
794 using namespace DPL::DB::ORM::wrt;
795 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
796 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
798 return select->GetValueList<WidgetWindowModes::window_mode>();
800 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
803 std::string WidgetDAOReadOnly::getBaseFolder() const
805 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
806 DPL::Optional<DPL::String> ret = row.Get_base_folder();
807 std::string baseFolder;
809 baseFolder = DPL::ToUTF8String(*ret);
812 if (!baseFolder.empty()) {
819 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
821 //TODO check widget existance
822 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
824 using namespace DPL::DB::ORM;
825 using namespace DPL::DB::ORM::wrt;
826 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
827 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
829 select->OrderBy("chainid");
830 WidgetCertificateFingerprint::Select::RowList rows =
831 select->GetRowList();
833 WidgetCertificateDataList outlCertificateData;
836 WidgetCertificateData data;
839 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
841 static_cast <WidgetCertificateData::Type>(it->Get_type());
842 data.chainId = it->Get_chainid();
843 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
844 data.strMD5Fingerprint =
845 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
846 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
847 data.strSHA1Fingerprint =
848 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
849 DPL::Optional<DPL::String> cname = it->Get_common_name();
851 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
853 outlCertificateData.push_back(data);
855 return outlCertificateData;
857 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
860 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
861 WidgetCertificateData::Owner owner,
862 WidgetCertificateData::Type type) const
864 //TODO check widget existance
865 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
867 using namespace DPL::DB::ORM;
868 using namespace DPL::DB::ORM::wrt;
869 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
870 select->Where(And(And(
871 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
872 Equals<WidgetCertificateFingerprint::owner>(owner)),
873 Equals<WidgetCertificateFingerprint::type>(type)));
875 WidgetCertificateFingerprint::Select::RowList rows =
876 select->GetRowList();
878 FingerPrintList keys;
881 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
882 if (!sha1.IsNull()) {
883 keys.push_back(DPL::ToUTF8String(*sha1));
885 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
887 keys.push_back(DPL::ToUTF8String(*md5));
892 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
895 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
896 WidgetCertificateData::Owner owner,
897 WidgetCertificateData::Type type) const
899 //TODO check widget existance
900 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
902 using namespace DPL::DB::ORM;
903 using namespace DPL::DB::ORM::wrt;
904 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
905 select->Where(And(And(
906 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
907 Equals<WidgetCertificateFingerprint::owner>(owner)),
908 Equals<WidgetCertificateFingerprint::type>(type)));
910 WidgetCertificateFingerprint::Select::RowList rows =
911 select->GetRowList();
913 WidgetCertificateCNList out;
916 DPL::Optional<DPL::String> cname = it->Get_common_name();
917 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
921 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
924 ResourceAttributeList WidgetDAOReadOnly::getResourceAttribute(
925 const std::string &resourceId) const
927 using namespace DPL::DB::ORM;
928 using namespace DPL::DB::ORM::wrt;
929 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::WidgetFeature, &WrtDatabase::interface())
930 select->Where(And(Equals<DPL::DB::ORM::wrt::WidgetFeature::app_id>(m_widgetHandle),
931 Equals<DPL::DB::ORM::wrt::WidgetFeature::name>(
932 DPL::FromUTF8String(resourceId))));
934 std::list<DPL::DB::ORM::wrt::WidgetFeature::Row> list = select->GetRowList();
935 ResourceAttributeList result;
937 int widgetFeatureId = list.begin()->Get_widget_feature_id();
938 WidgetParamMap map = getFeatureParams(widgetFeatureId);
941 result.push_back(DPL::ToUTF8String(i->first));
946 void WidgetDAOReadOnly::getWidgetAccessInfo(
947 WidgetAccessInfoList& outAccessInfoList) const
949 //TODO check widget existance
950 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
952 using namespace DPL::DB::ORM;
953 using namespace DPL::DB::ORM::wrt;
954 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
955 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
957 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
961 WidgetAccessInfo info;
963 info.strIRI = it->Get_iri();
964 DPL::OptionalInt access = it->Get_subdomain_access();
965 if (access.IsNull() || 0 == *access) {
966 info.bSubDomains = false;
967 } else if (1 == *access) {
968 info.bSubDomains = true;
971 outAccessInfoList.push_back(info);
974 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
977 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
979 //TODO check widget existance
980 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
982 using namespace DPL::DB::ORM;
983 using namespace DPL::DB::ORM::wrt;
984 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
985 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
986 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
988 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
991 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
993 //TODO check widget existance
994 using namespace DPL::DB::ORM;
995 using namespace DPL::DB::ORM::wrt;
996 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
997 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
999 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
1002 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
1004 using namespace WrtDB::WidgetConfig;
1005 std::ostringstream path;
1007 DPL::OptionalString pkgname = getPkgname();
1009 path << GetWidgetPersistentStoragePath(*pkgname);
1011 path << GlobalConfig::GetCookieDatabaseFile();
1016 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
1018 std::ostringstream path;
1019 DPL::OptionalString pkgname = getPkgname();
1020 path << WidgetConfig::GetWidgetWebLocalStoragePath(*pkgname);
1026 void WidgetDAOReadOnly::getWidgetSettings(
1027 WidgetSettings& outWidgetSettings) const
1029 //TODO check widget existance
1030 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1032 using namespace DPL::DB::ORM;
1033 using namespace DPL::DB::ORM::wrt;
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 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
1058 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1060 using namespace DPL::DB::ORM;
1061 using namespace DPL::DB::ORM::wrt;
1062 WRT_DB_SELECT(select, ApplicationServiceInfo, &WrtDatabase::interface())
1063 select->Where(Equals<ApplicationServiceInfo::app_id>(m_widgetHandle));
1065 ApplicationServiceInfo::Select::RowList rows = select->GetRowList();
1068 LogDebug("Application Service list is empty. Handle: " <<
1073 WidgetApplicationService ret;
1074 ret.src = it->Get_src();
1075 ret.operation = it->Get_operation();
1076 ret.scheme = it->Get_scheme();
1077 ret.mime = it->Get_mime();
1078 outAppServiceList.push_back(ret);
1081 transaction.Commit();
1083 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
1086 PkgType WidgetDAOReadOnly::getPkgType() const
1088 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1089 DPL::OptionalInt result = row.Get_pkg_type();
1090 return PkgType(static_cast<PackagingType>(*result));
1093 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList) const
1095 //TODO check widget existance
1096 using namespace DPL::DB::ORM;
1097 using namespace DPL::DB::ORM::wrt;
1098 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1099 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1101 typedef std::list<DPL::DB::ORM::wrt::EncryptedResourceList::Row> RowList;
1102 RowList list = select->GetRowList();
1105 EncryptedFileInfo info;
1106 info.fileName = it->Get_resource();
1107 info.fileSize = it->Get_size();
1108 filesList.insert(info);
1112 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1114 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1116 using namespace DPL::DB::ORM;
1117 using namespace DPL::DB::ORM::wrt;
1118 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1119 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1121 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1123 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1124 "Cannot find widget. Handle: " << m_widgetHandle);
1127 return rows.front().Get_background_page();
1129 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1132 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1133 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1134 #undef CHECK_WIDGET_EXISTENCE
1136 } // namespace WrtDB