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 bool isFactoryWidget = isFactory();
203 if (isFactoryWidget) {
204 WidgetGUID widgetGUID = getGUID();
206 Throw(WidgetDAOReadOnly::Exception::GUIDisNull);
208 path += L"/" + *widgetGUID + L"/";
210 // if the widget is a "downloaded widget",
211 // use unique package name.
212 DPL::OStringStream strAppId;
213 strAppId << m_widgetHandle;
214 DPL::OptionalString pkgname = getPkgname();
215 path += L"/" + *pkgname;
216 path += srcPath + L"/";
222 DPL::String WidgetDAOReadOnly::getFullPath() const
224 return L"file://" + getPath();
228 WidgetDAOReadOnly::getLocalizedInfo(const DPL::String& languageTag)
231 LogDebug("Getting Localized Info. Handle: " << m_widgetHandle);
232 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
234 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
235 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
237 using namespace DPL::DB::ORM;
238 using namespace DPL::DB::ORM::wrt;
239 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
241 And(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle),
242 Equals<LocalizedWidgetInfo::widget_locale>(languageTag)));
243 LocalizedWidgetInfo::Row info = select->GetSingleRow();
244 WidgetLocalizedInfo result;
246 result.name = info.Get_widget_name();
247 result.shortName = info.Get_widget_shortname();
248 result.description = info.Get_widget_description();
249 result.license = info.Get_widget_license();
250 result.licenseHref = info.Get_widget_license_href();
252 transaction.Commit();
255 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get localized info")
258 DbWidgetFeatureSet WidgetDAOReadOnly::getFeaturesList() const
260 LogDebug("Getting FeaturesList. Handle: " << m_widgetHandle);
261 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
263 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
264 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
266 using namespace DPL::DB::ORM;
267 using namespace DPL::DB::ORM::wrt;
268 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::WidgetFeature, &WrtDatabase::interface())
269 select->Where(Equals<DPL::DB::ORM::wrt::WidgetFeature::app_id>(m_widgetHandle));
271 DbWidgetFeatureSet resultSet;
272 typedef std::list<DPL::DB::ORM::wrt::WidgetFeature::Row> RowList;
273 RowList list = select->GetRowList();
275 for (RowList::iterator i = list.begin(); i != list.end(); ++i) {
276 DbWidgetFeature feature;
277 feature.name = i->Get_name();
278 feature.required = i->Get_required();
279 feature.rejected = i->Get_rejected();
280 feature.params = getFeatureParams(i->Get_widget_feature_id());
281 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
282 feature.pluginId = featureDao.GetPluginHandle();
283 resultSet.insert(feature);
285 transaction.Commit();
288 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
291 WidgetParamMap WidgetDAOReadOnly::getFeatureParams(int id)
293 WidgetFeatureId widgetFeatureId(id);
294 LogDebug("Getting feature Params. featureId: " << widgetFeatureId);
295 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
297 using namespace DPL::DB::ORM;
298 using namespace DPL::DB::ORM::wrt;
299 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::FeatureParam, &WrtDatabase::interface())
300 select->Where(Equals<DPL::DB::ORM::wrt::FeatureParam::widget_feature_id>(
303 WidgetParamMap resultMap;
304 typedef std::list<DPL::DB::ORM::wrt::FeatureParam::Row> RowList;
305 RowList list = select->GetRowList();
308 resultMap.insert(std::make_pair(i->Get_name(), i->Get_value()));
312 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get feature params")
315 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
318 "Checking if widget has feature: " << featureName << ". Handle: " <<
320 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
322 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
323 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
325 using namespace DPL::DB::ORM;
326 using namespace DPL::DB::ORM::wrt;
327 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
328 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
329 Equals<wrt::WidgetFeature::name>(
330 DPL::FromUTF8String(featureName))));
332 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
333 transaction.Commit();
334 return !rows.empty();
336 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
339 HostList WidgetDAOReadOnly::getAccessHostList() const
341 LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle);
342 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
344 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
345 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
347 using namespace DPL::DB::ORM;
348 using namespace DPL::DB::ORM::wrt;
349 WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface())
350 select->Where(Equals<WidgetAccessHost::app_id>(m_widgetHandle));
351 std::list<WidgetAccessHost::host::ColumnType> values =
352 select->GetValueList<WidgetAccessHost::host>();
355 ret.push_back(DPL::ToUTF8String(*it));
357 transaction.Commit();
360 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
363 bool WidgetDAOReadOnly::getAccessNetworkMode() const
365 //TODO there is no column access_network
366 //it was removed in "Widget localization overhaul
370 DbWidgetHandleList WidgetDAOReadOnly::getHandleList()
372 LogDebug("Getting DbWidgetHandle List");
373 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
375 using namespace DPL::DB::ORM;
376 using namespace DPL::DB::ORM::wrt;
377 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
378 return select->GetValueList<WidgetInfo::app_id>();
380 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
383 DbWidgetDAOReadOnlyList WidgetDAOReadOnly::getWidgetList()
385 LogDebug("Getting DbWidget List");
386 DbWidgetDAOReadOnlyList list;
387 FOREACH(iterator, getHandleList()) {
388 list.push_back(WidgetDAOReadOnlyPtr(new WidgetDAOReadOnly(*iterator)));
393 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
395 LogDebug("Checking if widget exist. Handle: " << handle);
396 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
398 using namespace DPL::DB::ORM;
399 using namespace DPL::DB::ORM::wrt;
400 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
401 select->Where(Equals<WidgetInfo::app_id>(handle));
403 WidgetInfo::Select::RowList rows = select->GetRowList();
405 return !rows.empty();
407 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
410 bool WidgetDAOReadOnly::isWidgetInstalled(DPL::String pkgName)
412 LogDebug("Checking if widget exist. package name " << pkgName);
413 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
415 using namespace DPL::DB::ORM;
416 using namespace DPL::DB::ORM::wrt;
417 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
418 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
420 WidgetInfo::Select::RowList rows = select->GetRowList();
422 return !rows.empty();
424 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
427 ExternalLocationList WidgetDAOReadOnly::getWidgetExternalLocations() const
429 LogDebug("Getting WidgetExtranalFiles List");
430 ExternalLocationList result;
431 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
433 using namespace DPL::DB::ORM;
434 using namespace DPL::DB::ORM::wrt;
435 WRT_DB_SELECT(select, WidgetExternalLocations, &WrtDatabase::interface());
436 select->Where(Equals<WidgetExternalLocations::app_id>(m_widgetHandle));
437 WidgetExternalLocations::Select::RowList rows = select->GetRowList();
440 result.push_back(DPL::ToUTF8String(it->Get_path()));
443 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
447 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate(
448 CertificateSource source) const
450 using namespace DPL::DB::ORM;
451 using namespace DPL::DB::ORM::wrt;
452 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
455 Equals<WidgetCertificate::app_id>(m_widgetHandle),
456 Equals<WidgetCertificate::cert_source>(source)));
458 std::list<DPL::DB::ORM::wrt::WidgetCertificate::Row> chainList = select->GetRowList();
460 CertificateChainList result;
462 FOREACH(iter, chainList)
463 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
467 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
469 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
472 size.width = row.Get_widget_width();
473 size.height = row.Get_widget_height();
475 LogDebug("Return size wxh = " <<
476 (!!size.width ? *size.width : -1) << " x " <<
477 (!!size.height ? *size.height : -1));
482 WidgetType WidgetDAOReadOnly::getWidgetType() const
484 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
485 DPL::OptionalInt result = row.Get_widget_type();
486 return WidgetType(static_cast<AppType>(*result));
489 WidgetGUID WidgetDAOReadOnly::getGUID() const
491 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
492 return row.Get_widget_id();
495 DPL::OptionalString WidgetDAOReadOnly::getPkgname() const
497 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
498 return row.Get_pkgname();
501 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
503 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
504 return row.Get_defaultlocale();
507 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
509 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
510 return row.Get_widget_version();
513 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
515 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
516 return row.Get_author_name();
519 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
521 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
522 return row.Get_author_email();
525 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
527 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
528 return row.Get_author_href();
531 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
533 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
534 return row.Get_min_version();
537 std::string WidgetDAOReadOnly::getShareHref() const
539 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
541 using namespace DPL::DB::ORM;
542 using namespace DPL::DB::ORM::wrt;
543 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
544 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
545 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
548 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
549 "Cannot find widget. Handle: " << m_widgetHandle);
552 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
553 std::string ret = "";
554 if (!value.IsNull()) {
555 ret = DPL::ToUTF8String(*value);
559 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
562 bool WidgetDAOReadOnly::getBackSupported() const
564 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
565 return row.Get_back_supported();
568 bool WidgetDAOReadOnly::isRecognized() const
570 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
571 DPL::OptionalInt result = row.Get_recognized();
572 if (result.IsNull()) {
575 return static_cast<bool>(*result);
578 bool WidgetDAOReadOnly::isWacSigned() const
580 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
581 DPL::OptionalInt result = row.Get_wac_signed();
582 if (result.IsNull()) {
585 return static_cast<bool>(*result);
588 bool WidgetDAOReadOnly::isDistributorSigned() const
590 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
591 DPL::OptionalInt result = row.Get_distributor_signed();
592 if (result.IsNull()) {
595 return static_cast<bool>(*result);
598 bool WidgetDAOReadOnly::isTrusted() const
601 // widget with verified distributor signature is trusted
602 return isDistributorSigned();
605 bool WidgetDAOReadOnly::isTestWidget() const
608 using namespace DPL::DB::ORM;
609 using namespace DPL::DB::ORM::wrt;
610 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
611 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
613 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
615 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
616 "Cannot find widget. Handle: " << m_widgetHandle);
619 return static_cast<bool>(rows.front().Get_test_widget());
621 Catch(DPL::DB::SqlConnection::Exception::Base){
622 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
623 "Failed to check IsTestWidget");
627 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
629 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
630 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
632 if (ret.IsNull() || *ret == 0) { return false; } else { return true; }
635 bool WidgetDAOReadOnly::isFactory() const
637 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
639 using namespace DPL::DB::ORM;
640 using namespace DPL::DB::ORM::wrt;
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 DPL::OptionalInt ret = rows.front().Get_factory_widget();
654 return static_cast<bool>(*ret);
656 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get isFactory")
659 time_t WidgetDAOReadOnly::getInstallTime() const
661 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
663 using namespace DPL::DB::ORM;
664 using namespace DPL::DB::ORM::wrt;
665 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
666 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
668 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
670 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
671 "Cannot find widget. Handle: " << m_widgetHandle);
674 return static_cast<time_t>(*rows.front().Get_install_time());
676 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
679 DPL::OptionalString WidgetDAOReadOnly::getSplashImgSrc() const
681 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
683 using namespace DPL::DB::ORM;
684 using namespace DPL::DB::ORM::wrt;
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 DPL::OptionalString value = rows.front().Get_splash_img_src();
695 if (value.IsNull()) {
696 return DPL::OptionalString::Null;
699 return DPL::OptionalString(getPath() + *value);
701 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get splash image path")
704 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::getLocalizedIconList() const
706 //TODO check widget existance??
707 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
709 using namespace DPL::DB::ORM;
710 using namespace DPL::DB::ORM::wrt;
711 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
712 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
714 std::list<DPL::DB::ORM::wrt::WidgetLocalizedIcon::Row> list =
715 select->GetRowList();
716 WidgetLocalizedIconList ret;
719 WidgetLocalizedIconRow icon = {it->Get_app_id(),
721 it->Get_widget_locale()};
726 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
729 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
731 //TODO check widget existance
732 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
734 using namespace DPL::DB::ORM;
735 using namespace DPL::DB::ORM::wrt;
736 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
737 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
739 std::list<DPL::DB::ORM::wrt::WidgetIcon::Row> list =
740 select->GetRowList();
744 WidgetIconRow icon = {it->Get_icon_id(),
747 it->Get_icon_width(),
748 it->Get_icon_height()};
753 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
756 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::getLocalizedStartFileList() const
758 //TODO check widget existance
759 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
761 using namespace DPL::DB::ORM;
762 using namespace DPL::DB::ORM::wrt;
763 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
764 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
766 select->OrderBy("start_file_id ASC");
768 std::list<DPL::DB::ORM::wrt::WidgetLocalizedStartFile::Row> list =
769 select->GetRowList();
770 LocalizedStartFileList ret;
773 WidgetLocalizedStartFileRow file = {it->Get_start_file_id(),
775 it->Get_widget_locale(),
782 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
785 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList() const
787 //TODO check widget existance
788 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
790 using namespace DPL::DB::ORM;
791 using namespace DPL::DB::ORM::wrt;
792 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
793 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
794 select->OrderBy("start_file_id ASC");
796 std::list<DPL::DB::ORM::wrt::WidgetStartFile::Row> list =
797 select->GetRowList();
798 WidgetStartFileList ret;
801 WidgetStartFileRow file = {it->Get_start_file_id(),
808 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
811 WindowModeList WidgetDAOReadOnly::getWindowModes() const
813 //TODO check widget existance
814 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
816 using namespace DPL::DB::ORM;
817 using namespace DPL::DB::ORM::wrt;
818 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
819 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
821 return select->GetValueList<WidgetWindowModes::window_mode>();
823 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
826 std::string WidgetDAOReadOnly::getBaseFolder() const
828 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
829 DPL::Optional<DPL::String> ret = row.Get_base_folder();
830 std::string baseFolder;
832 baseFolder = DPL::ToUTF8String(*ret);
835 if (!baseFolder.empty()) {
842 bool WidgetDAOReadOnly::isDeletable() const
844 return !WidgetDAOReadOnly::isFactory();
847 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
849 //TODO check widget existance
850 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
852 using namespace DPL::DB::ORM;
853 using namespace DPL::DB::ORM::wrt;
854 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
855 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
857 select->OrderBy("chainid");
858 WidgetCertificateFingerprint::Select::RowList rows =
859 select->GetRowList();
861 WidgetCertificateDataList outlCertificateData;
864 WidgetCertificateData data;
867 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
869 static_cast <WidgetCertificateData::Type>(it->Get_type());
870 data.chainId = it->Get_chainid();
871 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
872 data.strMD5Fingerprint =
873 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
874 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
875 data.strSHA1Fingerprint =
876 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
877 DPL::Optional<DPL::String> cname = it->Get_common_name();
879 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
881 outlCertificateData.push_back(data);
883 return outlCertificateData;
885 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
888 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
889 WidgetCertificateData::Owner owner,
890 WidgetCertificateData::Type type) const
892 //TODO check widget existance
893 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
895 using namespace DPL::DB::ORM;
896 using namespace DPL::DB::ORM::wrt;
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 using namespace DPL::DB::ORM;
931 using namespace DPL::DB::ORM::wrt;
932 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
933 select->Where(And(And(
934 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
935 Equals<WidgetCertificateFingerprint::owner>(owner)),
936 Equals<WidgetCertificateFingerprint::type>(type)));
938 WidgetCertificateFingerprint::Select::RowList rows =
939 select->GetRowList();
941 WidgetCertificateCNList out;
944 DPL::Optional<DPL::String> cname = it->Get_common_name();
945 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
949 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
952 ResourceAttributeList WidgetDAOReadOnly::getResourceAttribute(
953 const std::string &resourceId) const
955 using namespace DPL::DB::ORM;
956 using namespace DPL::DB::ORM::wrt;
957 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::WidgetFeature, &WrtDatabase::interface())
958 select->Where(And(Equals<DPL::DB::ORM::wrt::WidgetFeature::app_id>(m_widgetHandle),
959 Equals<DPL::DB::ORM::wrt::WidgetFeature::name>(
960 DPL::FromUTF8String(resourceId))));
962 std::list<DPL::DB::ORM::wrt::WidgetFeature::Row> list = select->GetRowList();
963 ResourceAttributeList result;
965 int widgetFeatureId = list.begin()->Get_widget_feature_id();
966 WidgetParamMap map = getFeatureParams(widgetFeatureId);
969 result.push_back(DPL::ToUTF8String(i->first));
974 void WidgetDAOReadOnly::getWidgetAccessInfo(
975 WidgetAccessInfoList& outAccessInfoList) const
977 //TODO check widget existance
978 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
980 using namespace DPL::DB::ORM;
981 using namespace DPL::DB::ORM::wrt;
982 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
983 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
985 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
989 WidgetAccessInfo info;
991 info.strIRI = it->Get_iri();
992 DPL::OptionalInt access = it->Get_subdomain_access();
993 if (access.IsNull() || 0 == *access) {
994 info.bSubDomains = false;
995 } else if (1 == *access) {
996 info.bSubDomains = true;
999 outAccessInfoList.push_back(info);
1002 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
1005 LanguageTags WidgetDAOReadOnly::getLanguageTags() const
1007 //TODO check widget existance
1008 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1010 using namespace DPL::DB::ORM;
1011 using namespace DPL::DB::ORM::wrt;
1012 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
1013 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
1014 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
1016 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
1019 LanguageTags WidgetDAOReadOnly::getIconLanguageTags() const
1021 //TODO check widget existance
1022 using namespace DPL::DB::ORM;
1023 using namespace DPL::DB::ORM::wrt;
1024 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
1025 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
1027 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
1030 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
1032 using namespace WrtDB::WidgetConfig;
1033 std::ostringstream path;
1035 DPL::OptionalString pkgname = getPkgname();
1037 path << GetWidgetPersistentStoragePath(*pkgname);
1039 path << GlobalConfig::GetCookieDatabaseFile();
1044 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
1046 std::ostringstream path;
1047 DPL::OptionalString pkgname = getPkgname();
1048 path << WidgetConfig::GetWidgetWebLocalStoragePath(*pkgname);
1052 WidgetGUID widgetGUID = getGUID();
1054 Throw(WidgetDAOReadOnly::Exception::GUIDisNull);
1056 path << DPL::ToUTF8String(*widgetGUID);
1062 void WidgetDAOReadOnly::getWidgetSettings(
1063 WidgetSettings& outWidgetSettings) const
1065 //TODO check widget existance
1066 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1068 using namespace DPL::DB::ORM;
1069 using namespace DPL::DB::ORM::wrt;
1070 WRT_DB_SELECT(select, SettginsList, &WrtDatabase::interface())
1071 select->Where(Equals<SettginsList::appId>(m_widgetHandle));
1073 SettginsList::Select::RowList rows = select->GetRowList();
1079 info.settingName = it->Get_settingName();
1080 info.settingValue = it->Get_settingValue();
1081 outWidgetSettings.push_back(info);
1084 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1087 void WidgetDAOReadOnly::getAppServiceList(
1088 WidgetApplicationServiceList& outAppServiceList) const
1090 LogDebug("Getting getAppServiceList. Handle: " << m_widgetHandle);
1091 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1093 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
1094 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1096 using namespace DPL::DB::ORM;
1097 using namespace DPL::DB::ORM::wrt;
1098 WRT_DB_SELECT(select, ApplicationServiceInfo, &WrtDatabase::interface())
1099 select->Where(Equals<ApplicationServiceInfo::app_id>(m_widgetHandle));
1101 ApplicationServiceInfo::Select::RowList rows = select->GetRowList();
1104 LogDebug("Application Service list is empty. Handle: " <<
1109 WidgetApplicationService ret;
1110 ret.src = it->Get_src();
1111 ret.operation = it->Get_operation();
1112 ret.scheme = it->Get_scheme();
1113 ret.mime = it->Get_mime();
1114 outAppServiceList.push_back(ret);
1117 transaction.Commit();
1119 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
1122 PkgType WidgetDAOReadOnly::getPkgType() const
1124 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
1125 DPL::OptionalInt result = row.Get_pkg_type();
1126 return PkgType(static_cast<PackagingType>(*result));
1129 void WidgetDAOReadOnly::getEncryptedFileList(EncryptedFileList& filesList) const
1131 //TODO check widget existance
1132 using namespace DPL::DB::ORM;
1133 using namespace DPL::DB::ORM::wrt;
1134 WRT_DB_SELECT(select, EncryptedResourceList, &WrtDatabase::interface())
1135 select->Where(Equals<EncryptedResourceList::app_id>(m_widgetHandle));
1137 typedef std::list<DPL::DB::ORM::wrt::EncryptedResourceList::Row> RowList;
1138 RowList list = select->GetRowList();
1141 EncryptedFileInfo info;
1142 info.fileName = it->Get_resource();
1143 info.fileSize = it->Get_size();
1144 filesList.insert(info);
1148 DPL::OptionalString WidgetDAOReadOnly::getBackgroundPage() const
1150 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1152 using namespace DPL::DB::ORM;
1153 using namespace DPL::DB::ORM::wrt;
1154 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
1155 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
1157 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
1159 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
1160 "Cannot find widget. Handle: " << m_widgetHandle);
1163 return rows.front().Get_background_page();
1165 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get background page")
1168 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1169 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1170 #undef CHECK_WIDGET_EXISTENCE
1172 } // namespace WrtDB