Update change log and spec for wrt-plugins-tizen_0.4.29
[framework/web/wrt-plugins-tizen.git] / src / SystemSetting / SystemSettingResponseDispatcher.cpp
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 #include "SystemSettingResponseDispatcher.h"
19 #include <CommonsJavaScript/JSCallbackManager.h>
20 #include <JSWebAPIErrorFactory.h>
21 #include <FilesystemUtils.h>
22 #include "SystemSettingAsyncCallbackManager.h"
23 #include <Logger.h>
24
25 using namespace DeviceAPI::Common;
26 using namespace WrtDeviceApis::Commons;
27 using namespace WrtDeviceApis::CommonsJavaScript;
28
29 namespace DeviceAPI {
30 namespace SystemSetting {
31
32 SystemSettingResponseDispatcher& SystemSettingResponseDispatcher::getInstance()
33 {
34     static SystemSettingResponseDispatcher instance;
35     return instance;
36 }
37
38 SystemSettingResponseDispatcher::SystemSettingResponseDispatcher() :
39     SystemSettingSetWallpaperEventAnswerReceiverRequest(ThreadEnum::NULL_THREAD),
40     SystemSettingSetRingtoneEventAnswerReceiverRequest(ThreadEnum::NULL_THREAD),
41     SystemSettingSetSettingEventAnswerReceiverRequest(ThreadEnum::NULL_THREAD),
42     SystemSettingGetSettingEventAnswerReceiverRequest(ThreadEnum::NULL_THREAD)
43 {
44 }
45
46 SystemSettingResponseDispatcher::~SystemSettingResponseDispatcher()
47 {
48 }
49
50 void SystemSettingResponseDispatcher::OnAnswerReceived(const EventSetWallpaperPtr &event)
51 {
52         LoggerD("entered");
53         JSCallbackManagerPtr callbackManager = DPL::StaticPointerCast<JSCallbackManager >(event->getPrivateData());
54
55         if (!callbackManager) {
56                 LoggerE("No listener callback!");
57                 return;
58         }
59
60         JSContextRef gContext = callbackManager->getContext();
61         JSValueRef error = NULL;
62         
63         if (ExceptionCodes::None != event->getExceptionCode())
64         {
65                 switch (event->getExceptionCode())
66                 {
67                 case ExceptionCodes::PlatformException:
68                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
69                         break;
70                 case ExceptionCodes::NotFoundException:
71                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::NOT_FOUND_ERROR, "record not found");
72                         break;
73                 case ExceptionCodes::InvalidArgumentException:
74                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "DomainName is not setted");
75                         break;
76                 case ExceptionCodes::ConversionException:
77                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong argument");
78                         break;
79                 default:
80                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Unknown error");
81                         break;
82                 }
83                 LoggerD("callOnError");
84                 callbackManager->callOnError(error);
85                 return;
86         }
87         LoggerD("callOnSuccess");
88         callbackManager->callOnSuccess();
89 }
90
91
92 void SystemSettingResponseDispatcher::OnAnswerReceived(const EventSetRingtonePtr &event)
93 {
94         LoggerD("entered");
95         JSCallbackManagerPtr callbackManager = DPL::StaticPointerCast<JSCallbackManager >(event->getPrivateData());
96
97         if (!callbackManager) {
98                 LoggerE("No listener callback!");
99                 return;
100         }
101
102         JSContextRef gContext = callbackManager->getContext();
103         JSValueRef error = NULL;
104
105         if (ExceptionCodes::None != event->getExceptionCode())
106         {
107                 switch (event->getExceptionCode())
108                 {
109                 case ExceptionCodes::PlatformException:
110                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
111                         break;
112                 case ExceptionCodes::NotFoundException:
113                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::NOT_FOUND_ERROR, "record not found");
114                         break;
115                 case ExceptionCodes::InvalidArgumentException:
116                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "DomainName is not setted");
117                         break;
118                 case ExceptionCodes::ConversionException:
119                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong argument");
120                         break;
121                 default:
122                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Unknown error");
123                         break;
124                 }
125
126                 callbackManager->callOnError(error);
127                 return;
128         }
129         callbackManager->callOnSuccess();
130 }
131
132 void SystemSettingResponseDispatcher::OnAnswerReceived(const EventSetSettingPtr &event)
133 {
134         LoggerD("entered");
135         JSCallbackManagerPtr callbackManager = DPL::StaticPointerCast<JSCallbackManager >(event->getPrivateData());
136
137         if (!callbackManager) {
138                 LoggerE("No listener callback!");
139                 return;
140         }
141
142         JSContextRef gContext = callbackManager->getContext();
143         JSValueRef error = NULL;
144     
145         SystemSettingAsyncCallbackManagerSingleton::Instance().unregisterCallbackManager(callbackManager);
146
147         if (ExceptionCodes::None != event->getExceptionCode())
148         {
149                 switch (event->getExceptionCode())
150                 {
151                 case ExceptionCodes::PlatformException:
152                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
153                         break;
154                 case ExceptionCodes::NotFoundException:
155                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::NOT_FOUND_ERROR, "record not found");
156                         break;
157                 case ExceptionCodes::InvalidArgumentException:
158                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "DomainName is not setted");
159                         break;
160                 case ExceptionCodes::ConversionException:
161                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong argument");
162                         break;
163                 default:
164                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Unknown error");
165                         break;
166                 }
167
168                 callbackManager->callOnError(error);
169                 return;
170         }
171         callbackManager->callOnSuccess();
172 }
173
174 void SystemSettingResponseDispatcher::OnAnswerReceived(const EventGetSettingPtr &event)
175 {
176         LoggerD("entered");
177         JSCallbackManagerPtr callbackManager = DPL::StaticPointerCast<JSCallbackManager >(event->getPrivateData());
178
179         if (!callbackManager) {
180                 LoggerE("No listener callback!");
181                 return;
182         }
183
184         JSContextRef gContext = callbackManager->getContext();
185         JSValueRef error = NULL;
186     
187         SystemSettingAsyncCallbackManagerSingleton::Instance().unregisterCallbackManager(callbackManager);
188     
189         Converter converter(gContext);
190         
191         if (ExceptionCodes::None != event->getExceptionCode())
192         {
193                 switch (event->getExceptionCode())
194                 {
195                 case ExceptionCodes::PlatformException:
196                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
197                         break;
198                 case ExceptionCodes::NotFoundException:
199                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::NOT_FOUND_ERROR, "record not found");
200                         break;
201                 case ExceptionCodes::InvalidArgumentException:
202                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "DomainName is not setted");
203                         break;
204                 case ExceptionCodes::ConversionException:
205                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong argument");
206                         break;
207                 default:
208                         error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Unknown error");
209                         break;
210                 }
211
212                 callbackManager->callOnError(error);
213                 return;
214         }
215         LoggerD("gettingValue : " << event->getSettingValue());
216
217         std::string settingPath = event->getSettingValue();
218         LoggerD("RealSettingPath : " << settingPath);
219
220         if (settingPath.size() == 0)
221         {
222                 error = JSWebAPIErrorFactory::makeErrorObject(gContext, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Unknown error");
223                 callbackManager->callOnError(error);
224                 return;
225         }
226
227         callbackManager->callOnSuccess(converter.toJSValueRef(settingPath));
228 }
229
230
231
232 }
233 }