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