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.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 bool WidgetDAOReadOnly::isWidgetInstalled(DbWidgetHandle handle)
373 LogDebug("Checking if widget exist. Handle: " << handle);
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 select->Where(Equals<WidgetInfo::app_id>(handle));
381 WidgetInfo::Select::RowList rows = select->GetRowList();
383 return !rows.empty();
385 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
388 bool WidgetDAOReadOnly::isWidgetInstalled(DPL::String pkgName)
390 LogDebug("Checking if widget exist. package name " << pkgName);
391 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
393 using namespace DPL::DB::ORM;
394 using namespace DPL::DB::ORM::wrt;
395 WRT_DB_SELECT(select, WidgetInfo, &WrtDatabase::interface())
396 select->Where(Equals<WidgetInfo::pkgname>(pkgName));
398 WidgetInfo::Select::RowList rows = select->GetRowList();
400 return !rows.empty();
402 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to check if widget exist")
405 CertificateChainList WidgetDAOReadOnly::getWidgetCertificate() const
407 using namespace DPL::DB::ORM;
408 using namespace DPL::DB::ORM::wrt;
409 WRT_DB_SELECT(select, WidgetCertificate, &WrtDatabase::interface())
410 select->Where(Equals<WidgetCertificate::app_id>(m_widgetHandle));
412 std::list<DPL::DB::ORM::wrt::WidgetCertificate::Row> chainList = select->GetRowList();
414 CertificateChainList result;
416 FOREACH(iter, chainList)
417 result.push_back(DPL::ToUTF8String(iter->Get_encoded_chain()));
421 DbWidgetSize WidgetDAOReadOnly::getPreferredSize() const
423 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
426 size.width = row.Get_widget_width();
427 size.height = row.Get_widget_height();
429 LogDebug("Return size wxh = " <<
430 (!!size.width ? *size.width : -1) << " x " <<
431 (!!size.height ? *size.height : -1));
436 WidgetType WidgetDAOReadOnly::getWidgetType() const
438 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
439 DPL::OptionalInt result = row.Get_widget_type();
440 return WidgetType(static_cast<AppType>(*result));
443 WidgetGUID WidgetDAOReadOnly::getGUID() const
445 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
446 return row.Get_widget_id();
449 DPL::OptionalString WidgetDAOReadOnly::getPkgname() const
451 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
452 return row.Get_pkgname();
455 DPL::OptionalString WidgetDAOReadOnly::getDefaultlocale() const
457 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
458 return row.Get_defaultlocale();
461 DPL::Optional<DPL::String> WidgetDAOReadOnly::getVersion() const
463 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
464 return row.Get_widget_version();
467 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorName() const
469 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
470 return row.Get_author_name();
473 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorEmail() const
475 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
476 return row.Get_author_email();
479 DPL::Optional<DPL::String> WidgetDAOReadOnly::getAuthorHref() const
481 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
482 return row.Get_author_href();
485 DPL::Optional<DPL::String> WidgetDAOReadOnly::getMinimumWacVersion() const
487 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
488 return row.Get_min_version();
491 std::string WidgetDAOReadOnly::getShareHref() const
493 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
495 using namespace DPL::DB::ORM;
496 using namespace DPL::DB::ORM::wrt;
497 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
498 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
499 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
502 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
503 "Cannot find widget. Handle: " << m_widgetHandle);
506 DPL::Optional<DPL::String> value = rows.front().Get_share_href();
507 std::string ret = "";
508 if (!value.IsNull()) {
509 ret = DPL::ToUTF8String(*value);
513 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get share HREF")
516 bool WidgetDAOReadOnly::getBackSupported() const
518 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
519 return row.Get_back_supported();
522 bool WidgetDAOReadOnly::isRecognized() const
524 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
525 DPL::OptionalInt result = row.Get_recognized();
526 if (result.IsNull()) {
529 return static_cast<bool>(*result);
532 bool WidgetDAOReadOnly::isWacSigned() const
534 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
535 DPL::OptionalInt result = row.Get_wac_signed();
536 if (result.IsNull()) {
539 return static_cast<bool>(*result);
542 bool WidgetDAOReadOnly::isDistributorSigned() const
544 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
545 DPL::OptionalInt result = row.Get_distributor_signed();
546 if (result.IsNull()) {
549 return static_cast<bool>(*result);
552 bool WidgetDAOReadOnly::isTrusted() const
555 // widget with verified distributor signature is trusted
556 return isDistributorSigned();
559 bool WidgetDAOReadOnly::isTestWidget() const
562 using namespace DPL::DB::ORM;
563 using namespace DPL::DB::ORM::wrt;
564 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
565 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
567 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
569 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
570 "Cannot find widget. Handle: " << m_widgetHandle);
573 return static_cast<bool>(rows.front().Get_test_widget());
575 Catch(DPL::DB::SqlConnection::Exception::Base){
576 ReThrowMsg(WidgetDAOReadOnly::Exception::DatabaseError,
577 "Failed to check IsTestWidget");
581 bool WidgetDAOReadOnly::getWebkitPluginsRequired() const
583 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
584 DPL::OptionalInt ret = row.Get_webkit_plugins_required();
586 if (ret.IsNull() || *ret == 0) { return false; } else { return true; }
589 bool WidgetDAOReadOnly::isFactory() const
591 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
593 using namespace DPL::DB::ORM;
594 using namespace DPL::DB::ORM::wrt;
595 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
596 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
598 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
600 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
601 "Cannot find widget. Handle: " << m_widgetHandle);
604 DPL::OptionalInt ret = rows.front().Get_factory_widget();
608 return static_cast<bool>(*ret);
610 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get isFactory")
613 time_t WidgetDAOReadOnly::getInstallTime() const
615 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
617 using namespace DPL::DB::ORM;
618 using namespace DPL::DB::ORM::wrt;
619 WRT_DB_SELECT(select, WidgetExtendedInfo, &WrtDatabase::interface())
620 select->Where(Equals<WidgetExtendedInfo::app_id>(m_widgetHandle));
622 WidgetExtendedInfo::Select::RowList rows = select->GetRowList();
624 ThrowMsg(WidgetDAOReadOnly::Exception::WidgetNotExist,
625 "Cannot find widget. Handle: " << m_widgetHandle);
628 return static_cast<time_t>(*rows.front().Get_install_time());
630 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get widdget install time")
633 WidgetDAOReadOnly::WidgetLocalizedIconList WidgetDAOReadOnly::getLocalizedIconList() const
635 //TODO check widget existance??
636 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
638 using namespace DPL::DB::ORM;
639 using namespace DPL::DB::ORM::wrt;
640 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
641 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
643 std::list<DPL::DB::ORM::wrt::WidgetLocalizedIcon::Row> list =
644 select->GetRowList();
645 WidgetLocalizedIconList ret;
648 WidgetLocalizedIconRow icon = {it->Get_app_id(),
650 it->Get_widget_locale()};
655 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
658 WidgetDAOReadOnly::WidgetIconList WidgetDAOReadOnly::getIconList() const
660 //TODO check widget existance
661 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
663 using namespace DPL::DB::ORM;
664 using namespace DPL::DB::ORM::wrt;
665 WRT_DB_SELECT(select, wrt::WidgetIcon, &WrtDatabase::interface())
666 select->Where(Equals<wrt::WidgetIcon::app_id>(m_widgetHandle));
668 std::list<DPL::DB::ORM::wrt::WidgetIcon::Row> list =
669 select->GetRowList();
673 WidgetIconRow icon = {it->Get_icon_id(),
676 it->Get_icon_width(),
677 it->Get_icon_height()};
682 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get icon data")
685 WidgetDAOReadOnly::LocalizedStartFileList WidgetDAOReadOnly::getLocalizedStartFileList() const
687 //TODO check widget existance
688 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
690 using namespace DPL::DB::ORM;
691 using namespace DPL::DB::ORM::wrt;
692 WRT_DB_SELECT(select, WidgetLocalizedStartFile, &WrtDatabase::interface())
693 select->Where(Equals<WidgetLocalizedStartFile::app_id>(
695 select->OrderBy("start_file_id ASC");
697 std::list<DPL::DB::ORM::wrt::WidgetLocalizedStartFile::Row> list =
698 select->GetRowList();
699 LocalizedStartFileList ret;
702 WidgetLocalizedStartFileRow file = {it->Get_start_file_id(),
704 it->Get_widget_locale(),
711 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
714 WidgetDAOReadOnly::WidgetStartFileList WidgetDAOReadOnly::getStartFileList() const
716 //TODO check widget existance
717 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
719 using namespace DPL::DB::ORM;
720 using namespace DPL::DB::ORM::wrt;
721 WRT_DB_SELECT(select, WidgetStartFile, &WrtDatabase::interface())
722 select->Where(Equals<WidgetStartFile::app_id>(m_widgetHandle));
723 select->OrderBy("start_file_id ASC");
725 std::list<DPL::DB::ORM::wrt::WidgetStartFile::Row> list =
726 select->GetRowList();
727 WidgetStartFileList ret;
730 WidgetStartFileRow file = {it->Get_start_file_id(),
737 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get start file list data")
740 WindowModeList WidgetDAOReadOnly::getWindowModes() const
742 //TODO check widget existance
743 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
745 using namespace DPL::DB::ORM;
746 using namespace DPL::DB::ORM::wrt;
747 WRT_DB_SELECT(select, WidgetWindowModes, &WrtDatabase::interface())
748 select->Where(Equals<WidgetWindowModes::app_id>(m_widgetHandle));
750 return select->GetValueList<WidgetWindowModes::window_mode>();
752 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get window modes")
755 std::string WidgetDAOReadOnly::getBaseFolder() const
757 WidgetInfoRow row = getWidgetInfoRow(m_widgetHandle);
758 DPL::Optional<DPL::String> ret = row.Get_base_folder();
759 std::string baseFolder;
761 baseFolder = DPL::ToUTF8String(*ret);
764 if (!baseFolder.empty()) {
771 bool WidgetDAOReadOnly::isDeletable() const
773 return !WidgetDAOReadOnly::isFactory();
776 WidgetCertificateDataList WidgetDAOReadOnly::getCertificateDataList() const
778 //TODO check widget existance
779 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
781 using namespace DPL::DB::ORM;
782 using namespace DPL::DB::ORM::wrt;
783 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
784 select->Where(Equals<WidgetCertificateFingerprint::app_id>(
786 select->OrderBy("chainid");
787 WidgetCertificateFingerprint::Select::RowList rows =
788 select->GetRowList();
790 WidgetCertificateDataList outlCertificateData;
793 WidgetCertificateData data;
796 static_cast <WidgetCertificateData::Owner>(it->Get_owner());
798 static_cast <WidgetCertificateData::Type>(it->Get_type());
799 data.chainId = it->Get_chainid();
800 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
801 data.strMD5Fingerprint =
802 md5.IsNull() ? "" : DPL::ToUTF8String(*md5);
803 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
804 data.strSHA1Fingerprint =
805 sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1);
806 DPL::Optional<DPL::String> cname = it->Get_common_name();
808 cname.IsNull() ? DPL::FromUTF8String("") : *cname;
810 outlCertificateData.push_back(data);
812 return outlCertificateData;
814 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
817 FingerPrintList WidgetDAOReadOnly::getKeyFingerprints(
818 WidgetCertificateData::Owner owner,
819 WidgetCertificateData::Type type) 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(And(And(
828 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
829 Equals<WidgetCertificateFingerprint::owner>(owner)),
830 Equals<WidgetCertificateFingerprint::type>(type)));
832 WidgetCertificateFingerprint::Select::RowList rows =
833 select->GetRowList();
835 FingerPrintList keys;
838 DPL::Optional<DPL::String> md5 = it->Get_md5_fingerprint();
839 keys.push_back(md5.IsNull() ? "" : DPL::ToUTF8String(*md5));
840 DPL::Optional<DPL::String> sha1 = it->Get_sha1_fingerprint();
841 keys.push_back(sha1.IsNull() ? "" : DPL::ToUTF8String(*sha1));
845 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get fingerprint list")
848 WidgetCertificateCNList WidgetDAOReadOnly::getKeyCommonNameList(
849 WidgetCertificateData::Owner owner,
850 WidgetCertificateData::Type type) const
852 //TODO check widget existance
853 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
855 using namespace DPL::DB::ORM;
856 using namespace DPL::DB::ORM::wrt;
857 WRT_DB_SELECT(select, WidgetCertificateFingerprint, &WrtDatabase::interface())
858 select->Where(And(And(
859 Equals<WidgetCertificateFingerprint::app_id>(m_widgetHandle),
860 Equals<WidgetCertificateFingerprint::owner>(owner)),
861 Equals<WidgetCertificateFingerprint::type>(type)));
863 WidgetCertificateFingerprint::Select::RowList rows =
864 select->GetRowList();
866 WidgetCertificateCNList out;
869 DPL::Optional<DPL::String> cname = it->Get_common_name();
870 out.push_back(cname.IsNull() ? "" : DPL::ToUTF8String(*cname));
874 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get key common name")
877 ResourceAttributeList WidgetDAOReadOnly::getResourceAttribute(
878 const std::string &resourceId) const
880 using namespace DPL::DB::ORM;
881 using namespace DPL::DB::ORM::wrt;
882 WRT_DB_SELECT(select, DPL::DB::ORM::wrt::WidgetFeature, &WrtDatabase::interface())
883 select->Where(And(Equals<DPL::DB::ORM::wrt::WidgetFeature::app_id>(m_widgetHandle),
884 Equals<DPL::DB::ORM::wrt::WidgetFeature::name>(
885 DPL::FromUTF8String(resourceId))));
887 std::list<DPL::DB::ORM::wrt::WidgetFeature::Row> list = select->GetRowList();
888 ResourceAttributeList result;
890 int widgetFeatureId = list.begin()->Get_widget_feature_id();
891 WidgetParamMap map = getFeatureParams(widgetFeatureId);
894 result.push_back(DPL::ToUTF8String(i->first));
899 void WidgetDAOReadOnly::getWidgetAccessInfo(
900 WidgetAccessInfoList& outAccessInfoList) const
902 //TODO check widget existance
903 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
905 using namespace DPL::DB::ORM;
906 using namespace DPL::DB::ORM::wrt;
907 WRT_DB_SELECT(select, WidgetWARPInfo, &WrtDatabase::interface())
908 select->Where(Equals<WidgetWARPInfo::app_id>(m_widgetHandle));
910 WidgetWARPInfo::Select::RowList rows = select->GetRowList();
914 WidgetAccessInfo info;
916 info.strIRI = it->Get_iri();
917 DPL::OptionalInt access = it->Get_subdomain_access();
918 if (access.IsNull() || 0 == *access) {
919 info.bSubDomains = false;
920 } else if (1 == *access) {
921 info.bSubDomains = true;
924 outAccessInfoList.push_back(info);
927 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get accessinfo list")
930 LanguageTagList WidgetDAOReadOnly::getLanguageTags() const
932 //TODO check widget existance
933 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
935 using namespace DPL::DB::ORM;
936 using namespace DPL::DB::ORM::wrt;
937 WRT_DB_SELECT(select, LocalizedWidgetInfo, &WrtDatabase::interface())
938 select->Where(Equals<LocalizedWidgetInfo::app_id>(m_widgetHandle));
939 return select->GetValueList<LocalizedWidgetInfo::widget_locale>();
941 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get language tags")
944 LanguageTagList WidgetDAOReadOnly::getIconLanguageTags() const
946 //TODO check widget existance
947 using namespace DPL::DB::ORM;
948 using namespace DPL::DB::ORM::wrt;
949 WRT_DB_SELECT(select, WidgetLocalizedIcon, &WrtDatabase::interface())
950 select->Where(Equals<WidgetLocalizedIcon::app_id>(m_widgetHandle));
952 return select->GetValueList<WidgetLocalizedIcon::widget_locale>();
955 std::string WidgetDAOReadOnly::getCookieDatabasePath() const
957 using namespace WrtDB::WidgetConfig;
958 std::ostringstream path;
960 DPL::OptionalString pkgname = getPkgname();
962 path << GetWidgetPersistentStoragePath(*pkgname);
964 path << GlobalConfig::GetCookieDatabaseFile();
969 std::string WidgetDAOReadOnly::getPrivateLocalStoragePath() const
971 std::ostringstream path;
972 DPL::OptionalString pkgname = getPkgname();
973 path << WidgetConfig::GetWidgetWebLocalStoragePath(*pkgname);
977 WidgetGUID widgetGUID = getGUID();
979 Throw(WidgetDAOReadOnly::Exception::GUIDisNull);
981 path << DPL::ToUTF8String(*widgetGUID);
987 void WidgetDAOReadOnly::getWidgetSettings(
988 WidgetSettings& outWidgetSettings) const
990 //TODO check widget existance
991 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
993 using namespace DPL::DB::ORM;
994 using namespace DPL::DB::ORM::wrt;
995 WRT_DB_SELECT(select, SettginsList, &WrtDatabase::interface())
996 select->Where(Equals<SettginsList::appId>(m_widgetHandle));
998 SettginsList::Select::RowList rows = select->GetRowList();
1004 info.settingName = it->Get_settingName();
1005 info.settingValue = it->Get_settingValue();
1006 outWidgetSettings.push_back(info);
1009 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get settings list")
1012 void WidgetDAOReadOnly::getAppServiceList(
1013 WidgetApplicationServiceList& outAppServiceList) const
1015 LogDebug("Getting getAppServiceList. Handle: " << m_widgetHandle);
1016 SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1018 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
1019 CHECK_WIDGET_EXISTENCE(transaction, m_widgetHandle)
1021 using namespace DPL::DB::ORM;
1022 using namespace DPL::DB::ORM::wrt;
1023 WRT_DB_SELECT(select, ApplicationServiceInfo, &WrtDatabase::interface())
1024 select->Where(Equals<ApplicationServiceInfo::app_id>(m_widgetHandle));
1026 ApplicationServiceInfo::Select::RowList rows = select->GetRowList();
1029 LogDebug("Application Service list is empty. Handle: " <<
1034 WidgetApplicationService ret;
1035 ret.src = it->Get_src();
1036 ret.operation = it->Get_operation();
1037 ret.scheme = it->Get_scheme();
1038 ret.mime = it->Get_mime();
1039 outAppServiceList.push_back(ret);
1042 transaction.Commit();
1044 SQL_CONNECTION_EXCEPTION_HANDLER_END("Failed to get access host list")
1047 #undef SQL_CONNECTION_EXCEPTION_HANDLER_BEGIN
1048 #undef SQL_CONNECTION_EXCEPTION_HANDLER_END
1049 #undef CHECK_WIDGET_EXISTENCE
1051 } // namespace WrtDB