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(TizenAppId tzAppid,
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. appid: " << tzAppid << ", 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::tizen_appid>(tzAppid),
62 Equals<WidgetPreference::key_name>(key)));
67 Catch(DPL::DB::SqlConnection::Exception::Base){
68 ReThrowMsg(PropertyDAOReadOnly::Exception::DatabaseError,
69 "Failure during removing property");
74 void SetProperty(DbWidgetHandle widgetHandle,
75 const PropertyDAOReadOnly::WidgetPropertyKey &key,
76 const PropertyDAOReadOnly::WidgetPropertyValue &value,
79 SetProperty(WidgetDAOReadOnly::getTzAppId(widgetHandle),key,value,readOnly);
82 void SetProperty(TizenAppId tzAppid,
83 const PropertyDAOReadOnly::WidgetPropertyKey &key,
84 const PropertyDAOReadOnly::WidgetPropertyValue &value,
87 LogDebug("Setting/updating Property. appid: " << tzAppid <<
90 using namespace DPL::DB::ORM;
91 using namespace DPL::DB::ORM::wrt;
92 DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
94 DPL::OptionalInt readonly = PropertyDAOReadOnly::CheckPropertyReadFlag(
97 if (!readonly.IsNull() && *readonly == 1) {
98 LogError("'" << key <<
99 "' key is readonly. Cannot remove property !");
100 ThrowMsg(PropertyDAOReadOnly::Exception::ReadOnlyProperty,
101 "Property is readonly");
104 if (readonly.IsNull()) {
105 WidgetPreference::Row row;
106 row.Set_tizen_appid(tzAppid);
107 row.Set_key_name(key);
108 row.Set_key_value(value);
109 row.Set_readonly(readOnly ? 1 : 0);
111 WRT_DB_INSERT(insert, WidgetPreference, &WrtDatabase::interface())
115 WidgetPreference::Row row;
116 row.Set_key_value(value);
118 WRT_DB_UPDATE(update, WidgetPreference, &WrtDatabase::interface())
120 Equals<WidgetPreference::tizen_appid>(tzAppid),
121 Equals<WidgetPreference::key_name>(key)));
126 transaction.Commit();
128 Catch(DPL::DB::SqlConnection::Exception::Base){
129 ReThrowMsg(PropertyDAOReadOnly::Exception::DatabaseError,
130 "Failure during setting/updating property");
134 void RegisterProperties(TizenAppId tzAppid,
135 const WidgetRegisterInfo ®Info)
137 LogDebug("Registering proferences for widget. appid: " << tzAppid);
139 // Try-Catch in WidgetDAO
141 using namespace DPL::DB::ORM;
142 using namespace DPL::DB::ORM::wrt;
143 const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
145 FOREACH(it, widgetConfigurationInfo.preferencesList)
147 { // Insert into table Widget Preferences
148 WidgetPreference::Row row;
149 row.Set_tizen_appid(tzAppid);
150 row.Set_key_name(it->name);
151 row.Set_key_value(it->value);
152 int readonly = true == it->readonly ? 1 : 0;
153 row.Set_readonly(readonly);
155 WRT_DB_INSERT(insert, WidgetPreference, &WrtDatabase::interface())
162 } // namespace PropertyDAO