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