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 * @file property_dao.h
18 * @author Pawel Sikorski (p.sikorski@samsung.com)
20 * @brief This file contains the definition of property dao class.
23 #include <dpl/wrt-dao-rw/property_dao.h>
24 #include <dpl/wrt-dao-ro/widget_dao_read_only.h>
25 #include <dpl/log/log.h>
26 #include <dpl/foreach.h>
27 #include <dpl/wrt-dao-ro/webruntime_database.h>
28 #include <dpl/wrt-dao-ro/WrtDatabase.h>
29 #include <orm_generator_wrt.h>
32 namespace PropertyDAO {
34 void RemoveProperty(DbWidgetHandle widgetHandle,
35 const PropertyDAOReadOnly::WidgetPropertyKey &key)
37 //TODO below there are two queries.
38 // First query asks if given property can be removed,
39 // Second removes it. Maybe it should be combined two one.
41 LogDebug("Removing Property. Handle: " << widgetHandle << ", key: " << key);
43 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
45 DPL::OptionalInt readonly = PropertyDAOReadOnly::CheckPropertyReadFlag(
48 if (!readonly.IsNull() && *readonly == 1) {
49 LogError("'" << key <<
50 "' key is readonly. Cannot remove property !");
51 ThrowMsg(PropertyDAOReadOnly::Exception::ReadOnlyProperty,
52 "Property is readonly");
55 // Key is not readonly, or has no flag defined
57 using namespace DPL::DB::ORM;
58 using namespace DPL::DB::ORM::wrt;
59 WRT_DB_DELETE(del, WidgetPreference, &WrtDatabase::interface())
61 Equals<WidgetPreference::app_id>(widgetHandle),
62 Equals<WidgetPreference::key_name>(key)));
67 Catch(DPL::DB::SqlConnection::Exception::Base){
68 ReThrowMsg(PropertyDAOReadOnly::Exception::DatabaseError,
69 "Failure during removing property");
73 void SetProperty(DbWidgetHandle widgetHandle,
74 const PropertyDAOReadOnly::WidgetPropertyKey &key,
75 const PropertyDAOReadOnly::WidgetPropertyValue &value,
78 LogDebug("Setting/updating Property. Handle: " << widgetHandle <<
81 using namespace DPL::DB::ORM;
82 using namespace DPL::DB::ORM::wrt;
83 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
85 DPL::OptionalInt readonly = PropertyDAOReadOnly::CheckPropertyReadFlag(
88 if (!readonly.IsNull() && *readonly == 1) {
89 LogError("'" << key <<
90 "' key is readonly. Cannot remove property !");
91 ThrowMsg(PropertyDAOReadOnly::Exception::ReadOnlyProperty,
92 "Property is readonly");
95 if (readonly.IsNull()) {
96 WidgetPreference::Row row;
97 row.Set_app_id(widgetHandle);
98 row.Set_key_name(key);
99 row.Set_key_value(value);
100 row.Set_readonly(readOnly ? 1 : 0);
102 WRT_DB_INSERT(insert, WidgetPreference, &WrtDatabase::interface())
106 WidgetPreference::Row row;
107 row.Set_key_value(value);
109 WRT_DB_UPDATE(update, WidgetPreference, &WrtDatabase::interface())
111 Equals<WidgetPreference::app_id>(widgetHandle),
112 Equals<WidgetPreference::key_name>(key)));
117 transaction.Commit();
119 Catch(DPL::DB::SqlConnection::Exception::Base){
120 ReThrowMsg(PropertyDAOReadOnly::Exception::DatabaseError,
121 "Failure during setting/updating property");
125 void RegisterProperties(DbWidgetHandle widgetHandle,
126 const WidgetRegisterInfo ®Info)
128 LogDebug("Registering proferences for widget. Handle: " << widgetHandle);
130 // Try-Catch in WidgetDAO
132 using namespace DPL::DB::ORM;
133 using namespace DPL::DB::ORM::wrt;
134 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
136 FOREACH(it, widgetConfigurationInfo.preferencesList)
138 { // Insert into table Widget Preferences
139 WidgetPreference::Row row;
140 row.Set_app_id(widgetHandle);
141 row.Set_key_name(it->name);
142 row.Set_key_value(it->value);
143 int readonly = true == it->readonly ? 1 : 0;
144 row.Set_readonly(readonly);
146 WRT_DB_INSERT(insert, WidgetPreference, &WrtDatabase::interface())
153 } // namespace PropertyDAO