Compilation warnings. Deprecated code. Part 1
[framework/web/wrt-commons.git] / modules / widget_dao / dao / property_dao.cpp
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 /**
17  * @file   property_dao.h
18  * @author  Pawel Sikorski (p.sikorski@samsung.com)
19  * @version 1.0
20  * @brief   This file contains the definition of property dao class.
21  */
22 #include <stddef.h>
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>
30
31 namespace WrtDB {
32 namespace PropertyDAO {
33
34 void RemoveProperty(TizenAppId tzAppid,
35                     const PropertyDAOReadOnly::WidgetPropertyKey &key)
36 {
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.
40
41     LogDebug("Removing Property. appid: " << tzAppid << ", key: " << key);
42     Try {
43         DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
44
45         DPL::OptionalInt readonly = PropertyDAOReadOnly::CheckPropertyReadFlag(
46                 tzAppid,
47                 key);
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");
53         }
54
55         // Key is not readonly, or has no flag defined
56
57         using namespace DPL::DB::ORM;
58         using namespace DPL::DB::ORM::wrt;
59         WRT_DB_DELETE(del, WidgetPreference, &WrtDatabase::interface())
60         del->Where(And(
61                        Equals<WidgetPreference::tizen_appid>(tzAppid),
62                        Equals<WidgetPreference::key_name>(key)));
63         del->Execute();
64
65         transaction.Commit();
66     }
67     Catch(DPL::DB::SqlConnection::Exception::Base){
68         ReThrowMsg(PropertyDAOReadOnly::Exception::DatabaseError,
69                    "Failure during removing property");
70     }
71 }
72
73 //deprecated
74 void SetProperty(DbWidgetHandle widgetHandle,
75                  const PropertyDAOReadOnly::WidgetPropertyKey &key,
76                  const PropertyDAOReadOnly::WidgetPropertyValue &value,
77                  bool readOnly)
78 {
79     SetProperty(WidgetDAOReadOnly::getTzAppId(widgetHandle),key,value,readOnly);
80 }
81
82 void SetProperty(TizenAppId tzAppid,
83                  const PropertyDAOReadOnly::WidgetPropertyKey &key,
84                  const PropertyDAOReadOnly::WidgetPropertyValue &value,
85                  bool readOnly)
86 {
87     LogDebug("Setting/updating Property. appid: " << tzAppid <<
88              ", key: " << key);
89     Try {
90         using namespace DPL::DB::ORM;
91         using namespace DPL::DB::ORM::wrt;
92         DPL::DB::ORM::wrt::ScopedTransaction transaction(&WrtDatabase::interface());
93
94         DPL::OptionalInt readonly = PropertyDAOReadOnly::CheckPropertyReadFlag(
95                 tzAppid,
96                 key);
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");
102         }
103
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);
110
111             WRT_DB_INSERT(insert, WidgetPreference, &WrtDatabase::interface())
112             insert->Values(row);
113             insert->Execute();
114         } else {
115             WidgetPreference::Row row;
116             row.Set_key_value(value);
117
118             WRT_DB_UPDATE(update, WidgetPreference, &WrtDatabase::interface())
119             update->Where(And(
120                               Equals<WidgetPreference::tizen_appid>(tzAppid),
121                               Equals<WidgetPreference::key_name>(key)));
122
123             update->Values(row);
124             update->Execute();
125         }
126         transaction.Commit();
127     }
128     Catch(DPL::DB::SqlConnection::Exception::Base){
129         ReThrowMsg(PropertyDAOReadOnly::Exception::DatabaseError,
130                    "Failure during setting/updating property");
131     }
132 }
133
134 void RegisterProperties(TizenAppId tzAppid,
135                         const WidgetRegisterInfo &regInfo)
136 {
137     LogDebug("Registering proferences for widget. appid: " << tzAppid);
138
139     // Try-Catch in WidgetDAO
140
141     using namespace DPL::DB::ORM;
142     using namespace DPL::DB::ORM::wrt;
143     const ConfigParserData& widgetConfigurationInfo = regInfo.configInfo;
144
145     FOREACH(it, widgetConfigurationInfo.preferencesList)
146     {
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);
154
155             WRT_DB_INSERT(insert, WidgetPreference, &WrtDatabase::interface())
156             insert->Values(row);
157             insert->Execute();
158         }
159     }
160 }
161
162 } // namespace PropertyDAO
163 } // namespace WrtDB