bad71c46bd3983582ccb9d30edc86711391ac80f
[profile/ivi/wrt-plugins-tizen.git] / src / standards / Tizen / Route / JSRouteServiceManager.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 #include <CommonsJavaScript/Converter.h>
18 #include <CommonsJavaScript/Validator.h>
19 #include <CommonsJavaScript/JSUtils.h>
20 #include <CommonsJavaScript/JSDOMExceptionFactory.h>
21 #include <Tizen/Common/JSTizenExceptionFactory.h>
22 #include <Tizen/Common/JSTizenException.h>
23 #include <Tizen/Common/SecurityExceptions.h>
24 #include "JSRouteServiceManager.h"
25 #include "JSRouteProvider.h"
26 #include "RouteAce.h"
27 #include "DefaultRouteProvider.h"
28 #include "RouteProvider.h"
29 #include <dlog.h>
30
31 #undef LOG_TAG
32 #define LOG_TAG "TIZEN_ROUTE"
33
34 using namespace std;
35 using namespace WrtDeviceApis::CommonsJavaScript;
36 using namespace WrtDeviceApis::Commons;
37
38 namespace TizenApis {
39 namespace Tizen1_0 {
40 namespace LBS {
41
42 JSContextRef JSRouteServiceManager::m_globalContextRef = NULL;
43
44 JSValueRef JSRouteServiceManager::m_defaultObj = NULL;
45
46 JSClassRef JSRouteServiceManager::m_jsClassRef = NULL;
47
48 JSClassDefinition JSRouteServiceManager::m_jsClassInfo = {
49     0,  // current (and only) version is 0
50     kJSClassAttributeNone,  //attributes
51     "Route",  // class name
52     NULL,  // parent class
53     NULL,  // static values  
54     JSRouteServiceManager::m_function,  // static functions
55     JSRouteServiceManager::initialize,  // initialize
56     JSRouteServiceManager::finalize,  // finalize
57     NULL,  // hasProperty
58     NULL,  // getProperty
59     NULL,  // setProperty
60     NULL,  // deleteProperty
61     NULL,  // getPropertyNames
62     NULL,  // callAsFunction
63     NULL,  // callAsConstructor
64     JSRouteServiceManager::hasInstance,  // hasInstance
65     NULL  // convertToType
66 };
67
68 JSStaticFunction JSRouteServiceManager::m_function[] = {
69     { "getDefaultProvider", JSRouteServiceManager::getDefaultProvider, kJSPropertyAttributeNone },
70     { "getProviders", JSRouteServiceManager::getProviders, kJSPropertyAttributeNone },
71     { 0, 0, 0 }
72 };
73
74 const JSClassRef JSRouteServiceManager::getClassRef() 
75 {
76     if (!m_jsClassRef)
77     {
78         m_jsClassRef = JSClassCreate(&m_jsClassInfo);
79     }
80
81     return m_jsClassRef;
82 }
83
84 const JSClassDefinition* JSRouteServiceManager::getClassInfo() 
85 {
86     return &m_jsClassInfo;
87 }
88
89 void JSRouteServiceManager::initialize(JSContextRef ctx, JSObjectRef object) 
90 {
91     if( JSRouteServiceManager::m_globalContextRef == NULL )
92     {
93         JSRouteServiceManager::m_globalContextRef = ctx;
94     }
95 }
96
97 void JSRouteServiceManager::finalize(JSObjectRef object) 
98 {
99     if( JSRouteServiceManager::m_defaultObj != NULL ){
100         JSValueUnprotect(JSRouteServiceManager::m_globalContextRef, JSRouteServiceManager::m_defaultObj);
101         JSRouteServiceManager::m_defaultObj = NULL;
102     }
103 }
104
105 bool JSRouteServiceManager::hasInstance(JSContextRef context, JSObjectRef constructor, JSValueRef possibleInstance, JSValueRef* exception) 
106 {
107     return JSValueIsObjectOfClass(context, possibleInstance, getClassRef());
108 }
109
110 JSValueRef JSRouteServiceManager::getDefaultProvider(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
111 {
112     AceSecurityStatus status = ROUTE_CHECK_ACCESS(ROUTE_FUNCTION_CATEGORY_BASIC);
113     
114     if( status != AceSecurityStatus::AccessGranted )
115         return Commons::JSTizenExceptionFactory::postException(context,exception, Commons::JSTizenException::PERMISSION_DENIED_ERROR );
116
117     
118     if( JSRouteServiceManager::m_defaultObj == NULL){
119         RouteProvider *route = new DefaultRouteProvider();        
120         JSRouteServiceManager::m_defaultObj  = JSObjectMake(context , JSRouteProvider::getClassRef() , route);
121         JSValueProtect(context, JSRouteServiceManager::m_defaultObj);
122     }
123     return JSRouteServiceManager::m_defaultObj;
124 }
125
126 JSValueRef JSRouteServiceManager::getProviders(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
127 {
128     AceSecurityStatus status = ROUTE_CHECK_ACCESS(ROUTE_FUNCTION_CATEGORY_BASIC);
129     
130     if( status != AceSecurityStatus::AccessGranted )
131         return Commons::JSTizenExceptionFactory::postException(context,exception, Commons::JSTizenException::PERMISSION_DENIED_ERROR );
132     
133     JSValueRef providers[1];
134     JSObjectRef array;
135     providers[0] = getDefaultProvider(context ,object, thisObject, argumentCount, arguments, exception);
136     array = JSObjectMakeArray(context, 1, providers, NULL);
137     return array;   
138 }
139
140
141 } //LBS
142 } // Tizen1_0
143 } // TizenApis
144