wrt-plugins-tizen_0.4.23
[framework/web/wrt-plugins-tizen.git] / src / NetworkBearerSelection / NetworkBearerSelectionResponseDispatcher.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 "NetworkBearerSelectionResponseDispatcher.h"
19 #include "JSNetworkBearerSelectionCallbackManager.h"
20 #include <CommonsJavaScript/JSCallbackManager.h>
21 #include <JSTizenException.h>
22 #include <JSTizenExceptionFactory.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 NetworkBearerSelection {
31
32 NetworkBearerSelectionResponseDispatcher& NetworkBearerSelectionResponseDispatcher::getInstance()
33 {
34     static NetworkBearerSelectionResponseDispatcher instance;
35     return instance;
36 }
37
38 NetworkBearerSelectionResponseDispatcher::NetworkBearerSelectionResponseDispatcher() :
39     NetworkBearerSelectionEventAnswerReceiverRequest(ThreadEnum::NULL_THREAD),
40     NetworkBearerReleaseEventAnswerReceiverRequest(ThreadEnum::NULL_THREAD),        
41     OnNetworkBearerSelectionStateChangedListener(ThreadEnum::NULL_THREAD)    
42 {
43 }
44
45 NetworkBearerSelectionResponseDispatcher::~NetworkBearerSelectionResponseDispatcher()
46 {
47 }
48
49 void NetworkBearerSelectionResponseDispatcher::OnAnswerReceived(const EventNetworkBearerSelectionPtr &event)
50 {
51     LoggerD("entered");
52 }
53
54 void NetworkBearerSelectionResponseDispatcher::OnAnswerReceived(const EventNetworkBearerReleasePtr &event)
55 {
56     LoggerD("entered");
57     JSCallbackManagerPtr callbackManager = DPL::StaticPointerCast<JSCallbackManager >(event->getPrivateData());
58
59     if (!callbackManager) {
60         LoggerE("No listener callback!");
61         return;
62     }
63
64         JSContextRef gContext = callbackManager->getContext();        
65     JSValueRef error = NULL;
66     
67         if (ExceptionCodes::None != event->getExceptionCode())
68         {
69                 switch (event->getExceptionCode())
70                 {
71                 case ExceptionCodes::PlatformException:
72                         error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::UNKNOWN_ERROR, "Internal error");
73                         break;
74                 case ExceptionCodes::NotFoundException:
75                         error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::NOT_FOUND_ERROR, "record not found");
76                         break;
77                 case ExceptionCodes::InvalidArgumentException:
78                         error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::INVALID_VALUES_ERROR, "DomainName is not setted");
79                         break;
80                 case ExceptionCodes::ConversionException:
81                         error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong argument");
82                         break;
83                 default:
84                         error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::UNKNOWN_ERROR, "Unknown error");
85                         break;
86                 }
87
88                 callbackManager->callOnError(error);
89                 return;
90         }        
91     callbackManager->callOnSuccess();
92 }
93
94
95 void NetworkBearerSelectionResponseDispatcher::onAnswerReceived(const OnNetworkBearerSelectionStateChangedPtr& event)
96 {
97     LoggerD("entered");
98     JSNetworkBearerSelectionCallbackManagerPtr callbackManager = DPL::StaticPointerCast<JSNetworkBearerSelectionCallbackManager>(event->getPrivateData());
99
100     if (!callbackManager) {
101         LoggerE("No listener callback!");
102         return;
103     }
104
105     Try
106     {
107         if (event->getConnectionStateType() == CONNECTION_STATE_CONNECTED) {
108             LoggerD("success callback");
109             callbackManager->callOnSuccess();
110         } else if (event->getConnectionStateType() == CONNECTION_STATE_DISCONNECTED) {
111             LoggerD("disconnect callback");  
112             callbackManager->callOnDisconnected();
113         } else if (event->getConnectionStateType() == CONNECTION_STATE_INVALID_VALUES_ERROR || event->getConnectionStateType() == CONNECTION_STATE_PLATFORM_ERROR) {
114                 JSContextRef gContext = callbackManager->getContext();        
115             JSValueRef error = NULL;
116             
117                 if (ExceptionCodes::None != event->getExceptionCode())
118                 {
119                         switch (event->getExceptionCode())
120                         {
121                         case ExceptionCodes::PlatformException:
122                                 error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::UNKNOWN_ERROR, "Internal error");
123                                 break;
124                         case ExceptionCodes::NotFoundException:
125                                 error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::NOT_FOUND_ERROR, "record not found");
126                                 break;
127                         case ExceptionCodes::InvalidArgumentException:
128                                 error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::INVALID_VALUES_ERROR, "Invalid values error");
129                                 break;
130                         case ExceptionCodes::ConversionException:
131                                 error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong argument");
132                                 break;
133                         default:
134                                 error = JSTizenExceptionFactory::makeErrorObject(gContext, JSTizenException::UNKNOWN_ERROR, "Unknown error");
135                                 break;
136                         }
137
138                         callbackManager->callOnError(error);
139                         return;
140                 }               
141             LoggerD("error callback");
142         }
143     }
144     Catch(Exception)
145     {
146         LoggerE("Error during processing answer.");
147     }
148 }
149
150 }
151 }