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>
41 //TODO in current solution in each getter there exists a check
42 //"IsWidgetInstalled". Maybe it should be verified, if it could be done
43 //differently (check in WidgetDAOReadOnly constructor)
45 #define SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN Try
47 #define SQL_CONNECTION_EXCEPTION_HANDLER_END(message) \
48 Catch(DPL::DB::SqlConnection::Exception::Base) { \
50 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError, \
54 #define CHECK_WIDGET_EXISTENCE(macro_transaction, macro_handle) \
55 if (!WidgetDAOReadOnly::isWidgetInstalled(macro_handle)) \
57 macro_transaction.Commit(); \
58 LogWarning("Cannot find widget. Handle: " << macro_handle); \
59 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist, \
60 "Cannot find widget. Handle: " << macro_handle); \
64 typedef DPL::DB::ORM::wrt::WidgetInfo::Row WidgetInfoRow;
65 typedef DPL::DB::ORM::wrt::WidgetFeature::widget_feature_id::ColumnType
70 WidgetInfoRow getWidgetInfoRow(int widgetHandle)
72 LogDebug("Getting WidgetInfo row. Handle: " << widgetHandle);
73 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
75 using namespace DPL::DB::ORM;
76 using namespace DPL::DB::ORM::wrt;
77 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
78 select->Where(Equals<WidgetInfo::app_id>(widgetHandle));
80 WidgetInfo::Select::RowList rows = select->GetRowList();
82 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
83 "Cannot find widget. Handle: " << widgetHandle);
87 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in GetWidgetInfoRow")
93 IWacSecurity::~IWacSecurity()
97 WidgetDAOReadOnly::WidgetDAOReadOnly(DbWidgetHandle widgetHandle) :
98 m_widgetHandle(widgetHandle)
102 WidgetDAOReadOnly::~WidgetDAOReadOnly()
106 DbWidgetHandle WidgetDAOReadOnly::getHandle() const
108 return m_widgetHandle;
111 DbWidgetHandle WidgetDAOReadOnly::getHandle(const WidgetGUID GUID)
113 LogDebug("Getting WidgetHandle by GUID [" << GUID << "]");
115 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
117 using namespace DPL::DB::ORM;
118 using namespace DPL::DB::ORM::wrt;
119 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
120 select->Where(Equals<WidgetInfo::widget_id>(GUID));
121 WidgetInfo::Select::RowList rowList = select->GetRowList();
123 if (rowList.empty()) {
124 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
125 "Failed to get widget by guid");
127 return rowList.front().Get_app_id();
129 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
131 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
132 "Failed to get widget by guid");
135 DbWidgetHandle WidgetDAOReadOnly::getHandle(const DPL::String pkgName)
137 LogDebug("Getting WidgetHandle by Package Name [" << pkgName << "]");
139 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
141 using namespace DPL::DB::ORM;
142 using namespace DPL::DB::ORM::wrt;
143 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
144 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
145 WidgetInfo::Select::RowList rowList = select->GetRowList();
147 if (rowList.empty()) {
148 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
149 "Failed to get widget by package name");
151 return rowList.front().Get_app_id();
153 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed in getHandle")
155 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
156 "Failed to get widget by package name");
159 PropertyDAOReadOnly::WidgetPropertyKeyList
160 WidgetDAOReadOnly::getPropertyKeyList() const
162 return PropertyDAOReadOnly::GetPropertyKeyList(m_widgetHandle);
165 PropertyDAOReadOnly::WidgetPreferenceList
166 WidgetDAOReadOnly::getPropertyList() const
168 return PropertyDAOReadOnly::GetPropertyList(m_widgetHandle);
171 PropertyDAOReadOnly::WidgetPropertyValue WidgetDAOReadOnly::getPropertyValue(
172 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
174 return PropertyDAOReadOnly::GetPropertyValue(m_widgetHandle, key);
177 DPL::OptionalInt WidgetDAOReadOnly::checkPropertyReadFlag(
178 const PropertyDAOReadOnly::WidgetPropertyKey &key) const
180 return PropertyDAOReadOnly::CheckPropertyReadFlag(m_widgetHandle, key);
183 DPL::String WidgetDAOReadOnly::getPath() const
185 DPL::String path = DPL::FromUTF8String(
186 GlobalConfig::GetUserInstalledWidgetPath());
187 DPL::String srcPath = DPL::FromUTF8String(GlobalConfig::GetWidgetSrcPath());
189 bool isFactoryWidget = isFactory();
191 if (isFactoryWidget) {
192 WidgetGUID widgetGUID = getGUID();
194 Throw(WidgetDAOReadOnly::Exception::GUIDisNull);
196 path += L"/" + *widgetGUID + L"/";
198 // if the widget is a "downloaded widget",
199 // use unique package name.
200 DPL::OStringStream strAppId;
201 strAppId << m_widgetHandle;
202 DPL::OptionalString pkgname = getPkgname();
203 path += L"/" + *pkgname + L"/";
204 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.params = getFeatureParams(i->Get_widget_feature_id());
268 FeatureDAOReadOnly featureDao(DPL::ToUTF8String(i->Get_name()));
269 feature.pluginId = featureDao.GetPluginHandle();
270 resultSet.insert(feature);
272 transaction.Commit();
275 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get features list")
278 WidgetParamMap WidgetDAOReadOnly::getFeatureParams(int id)
280 WidgetFeatureId widgetFeatureId(id);
281 LogDebug("Getting feature Params. featureId: " << widgetFeatureId);
282 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
284 using namespace DPL::DB::ORM;
285 using namespace DPL::DB::ORM::wrt;
286 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::FeatureParam, &WrtDatabase::interface())
287 select->Where(Equals<DPL::DB::ORM::wrt::FeatureParam::widget_feature_id>(
290 WidgetParamMap resultMap;
291 typedef std::list<DPL::DB::ORM::wrt::FeatureParam::Row> RowList;
292 RowList list = select->GetRowList();
295 resultMap.insert(std::make_pair(i->Get_name(), i->Get_value()));
299 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get feature params")
302 bool WidgetDAOReadOnly::hasFeature(const std::string& featureName) const
305 "Checking if widget has feature: " << featureName << ". Handle: " <<
307 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
309 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
310 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
312 using namespace DPL::DB::ORM;
313 using namespace DPL::DB::ORM::wrt;
314 WRT_DB_SELECT(select, wrt::WidgetFeature, &WrtDatabase::interface())
315 select->Where(And(Equals<wrt::WidgetFeature::app_id>(m_widgetHandle),
316 Equals<wrt::WidgetFeature::name>(
317 DPL::FromUTF8String(featureName))));
319 wrt::WidgetFeature::Select::RowList rows = select->GetRowList();
320 transaction.Commit();
321 return !rows.empty();
323 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check for feature")
326 HostList WidgetDAOReadOnly::getAccessHostList() const
328 LogDebug("Getting AccessHostList. Handle: " << m_widgetHandle);
329 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
331 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
332 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
334 using namespace DPL::DB::ORM;
335 using namespace DPL::DB::ORM::wrt;
336 WRT_DB_SELECT(select, WidgetAccessHost, &WrtDatabase::interface())
337 select->Where(Equals<WidgetAccessHost::app_id>(m_widgetHandle));
338 std::list<WidgetAccessHost::host::ColumnType> values =
339 select->GetValueList<WidgetAccessHost::host>();
342 ret.push_back(DPL::ToUTF8String(*it));
344 transaction.Commit();
347 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
350 bool WidgetDAOReadOnly::getAccessNetworkMode() const
352 //TODO there is no column access_network
353 //it was removed in "Widget localization overhaul
357 DbWidgetHandleList WidgetDAOReadOnly::getHandleList()
359 LogDebug("Getting DbWidgetHandle List");
360 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
362 using namespace DPL::DB::ORM;
363 using namespace DPL::DB::ORM::wrt;
364 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
365 return select->GetValueList<WidgetInfo::app_id>();
367 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get handle list")
370 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
372 LogDebug("Checking if widget exist. Handle: " << handle);
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 select->Where(Equals<WidgetInfo::app_id>(handle));
380 WidgetInfo::Select::RowList rows = select->GetRowList();
382 return !rows.empty();
384 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
387 bool WidgetDAOReadOnly::isWidgetInstalled(DPL::String pkgName)
389 LogDebug("Checking if widget exist. package name " << pkgName);
390 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
392 using namespace DPL::DB::ORM;
393 using namespace DPL::DB::ORM::wrt;
394 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
395 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
397 WidgetInfo::Select::RowList rows = select->GetRowList();
399 return !rows.empty();
401 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
404 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate() const
406 using namespace DPL::DB::ORM;
407 using namespace DPL::DB::ORM::wrt;
408 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
409 select->Where(Equals<WidgetCertificate::app_id>(m_widgetHandle));
411 std::list<DPL::DB::ORM::wrt::WidgetCertificate::Row> chainList = select->GetRowList();
413 CertificateChainList result;
415 FOREACH(iter, chainList)
416 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
420 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
422 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
425 size.width = row.Get_widget_width();
426 size.height = row.Get_widget_height();
428 LogDebug("Return size wxh = " <<
429 (!!size.width ? *size.width : -1) << " x " <<
430 (!!size.height ? *size.height : -1));
435 WidgetType WidgetDAOReadOnly::getWidgetType() const
437 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
438 DPL::OptionalInt result = row.Get_widget_type();
439 return WidgetType(static_cast<AppType>(*result));
442 WidgetGUID WidgetDAOReadOnly::getGUID() const
444 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
445 return row.Get_widget_id();
448 DPL::OptionalString WidgetDAOReadOnly::getPkgname() const
450 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
451 return row.Get_pkgname();
454 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
456 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
457 return row.Get_defaultlocale();
460 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
462 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
463 return row.Get_widget_version();
466 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
468 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
469 return row.Get_author_name();
472 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
474 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
475 return row.Get_author_email();
478 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
480 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
481 return row.Get_author_href();
484 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
486 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
487 return row.Get_min_version();
490 std::string WidgetDAOReadOnly::getShareHref() const
492 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
494 using namespace DPL::DB::ORM;
495 using namespace DPL::DB::ORM::wrt;
496 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
497 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
498 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
501 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
502 "Cannot find widget. Handle: " << m_widgetHandle);
505 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
506 std::string ret = "";
507 if (!value.IsNull()) {
508 ret = DPL::ToUTF8String(*value);
512 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
515 bool WidgetDAOReadOnly::getBackSupported() const
517 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
518 return row.Get_back_supported();
521 bool WidgetDAOReadOnly::isRecognized() const
523 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
524 DPL::OptionalInt result = row.Get_recognized();
525 if (result.IsNull()) {
528 return static_cast<bool>(*result);
531 bool WidgetDAOReadOnly::isWacSigned() const
533 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
534 DPL::OptionalInt result = row.Get_wac_signed();
535 if (result.IsNull()) {
538 return static_cast<bool>(*result);
541 bool WidgetDAOReadOnly::isDistributorSigned() const
543 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
544 DPL::OptionalInt result = row.Get_distributor_signed();
545 if (result.IsNull()) {
548 return static_cast<bool>(*result);
551 bool WidgetDAOReadOnly::isTrusted() const
554 // widget with verified distributor signature is trusted
555 return isDistributorSigned();
558 bool WidgetDAOReadOnly::isTestWidget() const
561 using namespace DPL::DB::ORM;
562 using namespace DPL::DB::ORM::wrt;
563 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
564 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
566 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
568 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
569 "Cannot find widget. Handle: " << m_widgetHandle);
572 return static_cast<bool>(rows.front().Get_test_widget());
574 Catch(DPL::DB::SqlConnection::Exception::Base){
575 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
576 "Failed to check IsTestWidget");
580 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
582 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
583 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
585 if (ret.IsNull() || *ret == 0) { return false; } else { return true; }
588 bool WidgetDAOReadOnly::isFactory() const
590 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
592 using namespace DPL::DB::ORM;
593 using namespace DPL::DB::ORM::wrt;
594 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
595 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
597 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
599 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
600 "Cannot find widget. Handle: " << m_widgetHandle);
603 DPL::OptionalInt ret = rows.front().Get_factory_widget();
607 return static_cast<bool>(*ret);
609 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get isFactory")
612 time_t WidgetDAOReadOnly::getInstallTime() const
614 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
616 using namespace DPL::DB::ORM;
617 using namespace DPL::DB::ORM::wrt;
618 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
619 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
621 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
623 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
624 "Cannot find widget. Handle: " << m_widgetHandle);
627 return static_cast<time_t>(*rows.front().Get_install_time());
629 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
632 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::getLocalizedIconList() const
634 //TODO check widget existance??
635 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
637 using namespace DPL::DB::ORM;
638 using namespace DPL::DB::ORM::wrt;
639 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
640 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
642 std::list<DPL::DB::ORM::wrt::WidgetLocalizedIcon::Row> list =
643 select->GetRowList();
644 WidgetLocalizedIconList ret;
647 WidgetLocalizedIconRow icon = {it->Get_app_id(),
649 it->Get_widget_locale()};
654 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
657 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
659 //TODO check widget existance
660 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
662 using namespace DPL::DB::ORM;
663 using namespace DPL::DB::ORM::wrt;
664 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
665 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
667 std::list<DPL::DB::ORM::wrt::WidgetIcon::Row> list =
668 select->GetRowList();
672 WidgetIconRow icon = {it->Get_icon_id(),
675 it->Get_icon_width(),
676 it->Get_icon_height()};
681 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
684 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::getLocalizedStartFileList() const
686 //TODO check widget existance
687 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
689 using namespace DPL::DB::ORM;
690 using namespace DPL::DB::ORM::wrt;
691 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
692 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
694 select->OrderBy("start_file_id ASC");
696 std::list<DPL::DB::ORM::wrt::WidgetLocalizedStartFile::Row> list =
697 select->GetRowList();
698 LocalizedStartFileList ret;
701 WidgetLocalizedStartFileRow file = {it->Get_start_file_id(),
703 it->Get_widget_locale(),
710 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
713 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList() const
715 //TODO check widget existance
716 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
718 using namespace DPL::DB::ORM;
719 using namespace DPL::DB::ORM::wrt;
720 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
721 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
722 select->OrderBy("start_file_id ASC");
724 std::list<DPL::DB::ORM::wrt::WidgetStartFile::Row> list =
725 select->GetRowList();
726 WidgetStartFileList ret;
729 WidgetStartFileRow file = {it->Get_start_file_id(),
736 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
739 WindowModeList WidgetDAOReadOnly::getWindowModes() const
741 //TODO check widget existance
742 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
744 using namespace DPL::DB::ORM;
745 using namespace DPL::DB::ORM::wrt;
746 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
747 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
749 return select->GetValueList<WidgetWindowModes::window_mode>();
751 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
754 std::string WidgetDAOReadOnly::getBaseFolder() const
756 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
757 DPL::Optional<DPL::String> ret = row.Get_base_folder();
758 std::string baseFolder;
760 baseFolder = DPL::ToUTF8String(*ret);
763 if (!baseFolder.empty()) {
770 bool WidgetDAOReadOnly::isDeletable() const
772 return !WidgetDAOReadOnly::isFactory();
775 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
777 //TODO check widget existance
778 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
780 using namespace DPL::DB::ORM;
781 using namespace DPL::DB::ORM::wrt;
782 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
783 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
785 select->OrderBy("chainid");
786 WidgetCertificateFingerprint::Select::RowList rows =
787 select->GetRowList();
789 WidgetCertificateDataList outlCertificateData;
792 WidgetCertificateData data;
795 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
797 static_cast <WidgetCertificateData::Type>(it->Get_type());
798 data.chainId = it->Get_chainid();
799 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
800 data.strMD5Fingerprint =
801 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
802 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
803 data.strSHA1Fingerprint =
804 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
805 DPL::Optional<DPL::String> cname = it->Get_common_name();
807 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
809 outlCertificateData.push_back(data);
811 return outlCertificateData;
813 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
816 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
817 WidgetCertificateData::Owner owner,
818 WidgetCertificateData::Type type) const
820 //TODO check widget existance
821 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
823 using namespace DPL::DB::ORM;
824 using namespace DPL::DB::ORM::wrt;
825 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
826 select->Where(And(And(
827 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
828 Equals<WidgetCertificateFingerprint::owner>(owner)),
829 Equals<WidgetCertificateFingerprint::type>(type)));
831 WidgetCertificateFingerprint::Select::RowList rows =
832 select->GetRowList();
834 FingerPrintList keys;
837 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
838 keys.push_back(md5.IsNull() ? "" : DPL::ToUTF8String(*md5));
839 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
840 keys.push_back(sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1));
844 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
847 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
848 WidgetCertificateData::Owner owner,
849 WidgetCertificateData::Type type) const
851 //TODO check widget existance
852 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
854 using namespace DPL::DB::ORM;
855 using namespace DPL::DB::ORM::wrt;
856 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
857 select->Where(And(And(
858 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
859 Equals<WidgetCertificateFingerprint::owner>(owner)),
860 Equals<WidgetCertificateFingerprint::type>(type)));
862 WidgetCertificateFingerprint::Select::RowList rows =
863 select->GetRowList();
865 WidgetCertificateCNList out;
868 DPL::Optional<DPL::String> cname = it->Get_common_name();
869 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
873 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
876 ResourceAttributeList WidgetDAOReadOnly::getResourceAttribute(
877 const std::string &resourceId) const
879 using namespace DPL::DB::ORM;
880 using namespace DPL::DB::ORM::wrt;
881 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::WidgetFeature, &WrtDatabase::interface())
882 select->Where(And(Equals<DPL::DB::ORM::wrt::WidgetFeature::app_id>(m_widgetHandle),
883 Equals<DPL::DB::ORM::wrt::WidgetFeature::name>(
884 DPL::FromUTF8String(resourceId))));
886 std::list<DPL::DB::ORM::wrt::WidgetFeature::Row> list = select->GetRowList();
887 ResourceAttributeList result;
889 int widgetFeatureId = list.begin()->Get_widget_feature_id();
890 WidgetParamMap map = getFeatureParams(widgetFeatureId);
893 result.push_back(DPL::ToUTF8String(i->first));
898 void WidgetDAOReadOnly::getWidgetAccessInfo(
899 WidgetAccessInfoList& outAccessInfoList) const
901 //TODO check widget existance
902 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
904 using namespace DPL::DB::ORM;
905 using namespace DPL::DB::ORM::wrt;
906 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
907 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
909 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
913 WidgetAccessInfo info;
915 info.strIRI = it->Get_iri();
916 DPL::OptionalInt access = it->Get_subdomain_access();
917 if (access.IsNull() || 0 == *access) {
918 info.bSubDomains = false;
919 } else if (1 == *access) {
920 info.bSubDomains = true;
923 outAccessInfoList.push_back(info);
926 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
929 LanguageTagList WidgetDAOReadOnly::getLanguageTags() const
931 //TODO check widget existance
932 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
934 using namespace DPL::DB::ORM;
935 using namespace DPL::DB::ORM::wrt;
936 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
937 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
938 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
940 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
943 LanguageTagList WidgetDAOReadOnly::getIconLanguageTags() const
945 //TODO check widget existance
946 using namespace DPL::DB::ORM;
947 using namespace DPL::DB::ORM::wrt;
948 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
949 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
951 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
954 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
956 using namespace WrtDB::WidgetConfig;
957 std::ostringstream path;
959 DPL::OptionalString pkgname = getPkgname();
961 path << GetWidgetPersistentStoragePath(*pkgname);
963 path << GlobalConfig::GetCookieDatabaseFile();
968 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
970 std::ostringstream path;
971 DPL::OptionalString pkgname = getPkgname();
972 path << WidgetConfig::GetWidgetWebLocalStoragePath(*pkgname);
976 WidgetGUID widgetGUID = getGUID();
978 Throw(WidgetDAOReadOnly::Exception::GUIDisNull);
980 path << DPL::ToUTF8String(*widgetGUID);
986 ChildProtection::Record WidgetDAOReadOnly::getChildProtection() const
988 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
989 return ChildProtection::Record(row.Get_child_protection());
992 Powder::Description WidgetDAOReadOnly::getPowderDescription() const
994 //TODO check widget existance
995 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
997 using namespace Powder;
998 Description description;
1000 using namespace DPL::DB::ORM;
1001 using namespace DPL::DB::ORM::wrt;
1002 WRT_DB_SELECT(select, PowderLevels, &WrtDatabase::interface())
1003 select->Where(Equals<PowderLevels::app_id>(m_widgetHandle));
1004 typedef std::list<PowderLevels::Row> RowList;
1005 RowList list = select->GetRowList();
1009 Description::CategoryEntry& categoryEntry =
1010 description.categories[it->Get_category()];
1011 Description::LevelEntry levelEntry(
1012 (Description::LevelEnum)it->Get_level());
1014 WRT_DB_SELECT(selectContexts, PowderLevelContexts, &WrtDatabase::interface())
1015 selectContexts->Where(Equals<PowderLevelContexts::levelId>(
1017 typedef std::list<PowderLevelContexts::Row> ContextsRowList;
1018 ContextsRowList contextsList = selectContexts->GetRowList();
1020 FOREACH(c, contextsList)
1021 levelEntry.context.insert(c->Get_context());
1023 categoryEntry.levels.push_back(levelEntry);
1027 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get powder description")
1030 void WidgetDAOReadOnly::getWidgetSettings(
1031 WidgetSettings& outWidgetSettings) const
1033 //TODO check widget existance
1034 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1036 using namespace DPL::DB::ORM;
1037 using namespace DPL::DB::ORM::wrt;
1038 WRT_DB_SELECT(select, SettginsList, &WrtDatabase::interface())
1039 select->Where(Equals<SettginsList::appId>(m_widgetHandle));
1041 SettginsList::Select::RowList rows = select->GetRowList();
1047 info.settingName = it->Get_settingName();
1048 info.settingValue = it->Get_settingValue();
1049 outWidgetSettings.push_back(info);
1052 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1055 void WidgetDAOReadOnly::getAppServiceList(
1056 WidgetApplicationServiceList& outAppServiceList) const
1058 LogDebug("Getting getAppServiceList. Handle: " << m_widgetHandle);
1059 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1061 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
1062 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1064 using namespace DPL::DB::ORM;
1065 using namespace DPL::DB::ORM::wrt;
1066 WRT_DB_SELECT(select, ApplicationServiceInfo, &WrtDatabase::interface())
1067 select->Where(Equals<ApplicationServiceInfo::app_id>(m_widgetHandle));
1069 ApplicationServiceInfo::Select::RowList rows = select->GetRowList();
1072 LogDebug("Application Service list is empty. Handle: " <<
1077 WidgetApplicationService ret;
1078 ret.src = it->Get_src();
1079 ret.operation = it->Get_operation();
1080 ret.scheme = it->Get_scheme();
1081 ret.mime = it->Get_mime();
1082 outAppServiceList.push_back(ret);
1085 transaction.Commit();
1087 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
1090 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1091 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1092 #undef CHECK_WIDGET_EXISTENCE
1094 } // namespace WrtDB