Git Init
[profile/ivi/wrt-plugins-tizen.git] / src / standards / Tizen / Application / JSApplicationServiceExtraData.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 <dpl/log.h>
18 #include <dpl/shared_ptr.h>
19 #include <CommonsJavaScript/Converter.h>
20 #include <CommonsJavaScript/JSDOMExceptionFactory.h>
21 #include "JSApplicationServiceExtraData.h"
22
23 namespace TizenApis {
24 namespace Tizen1_0 {
25 namespace Application {
26
27 using namespace Api::Application;
28 using namespace WrtDeviceApis;
29 using namespace WrtDeviceApis::CommonsJavaScript;
30
31
32 namespace {
33         const char* APPLICATION_SERVICE_EXTRA_DATA_KEY = "key";
34         const char* APPLICATION_SERVICE_EXTRA_DATA_VALUE = "value";
35 }
36
37 JSClassRef JSApplicationServiceExtraData::m_classRef = NULL;
38
39 JSClassDefinition JSApplicationServiceExtraData::m_classInfo =
40 {
41         0,
42         kJSClassAttributeNone,
43         "ApplicationServiceExtraData",
44         NULL,
45         m_property,
46         m_functions,
47         initialize,
48         finalize,
49         NULL, //hasProperty,
50         NULL, //GetProperty,
51         NULL, //SetProperty,
52         NULL, //DeleteProperty,
53         NULL, //getPropertyNames,
54         NULL,
55         NULL,
56         NULL,
57         NULL, //ConvertToType,
58 };
59
60 JSStaticValue JSApplicationServiceExtraData::m_property[] = {
61         { APPLICATION_SERVICE_EXTRA_DATA_KEY, getExtraDataKey, setExtraDataKey, kJSPropertyAttributeNone },
62         { APPLICATION_SERVICE_EXTRA_DATA_VALUE, getExtraDataValue, setExtraDataValue, kJSPropertyAttributeNone },
63         { 0, 0, 0, 0 }
64 };
65
66 JSStaticFunction JSApplicationServiceExtraData::m_functions[] =
67 {
68         { 0, 0, 0 }
69 };
70
71 JSClassRef JSApplicationServiceExtraData::getClassRef() {
72         if (!m_classRef) {
73                 m_classRef = JSClassCreate(&m_classInfo);
74         }
75         return m_classRef;
76 }
77
78 JSValueRef JSApplicationServiceExtraData::createJSObject(JSContextRef context,
79                 const std::string &key,
80                 const std::string &value)
81 {
82         ApplicationServiceExtraDataPtr privateData = ApplicationServiceExtraDataPtr(new ApplicationServiceExtraData());
83
84         privateData->setKey(key);
85         privateData->setValue(value);
86         JSApplicationServiceExtraDataPriv *priv = new JSApplicationServiceExtraDataPriv(context, privateData);
87         JSObjectRef jsValueRef = JSObjectMake(context, getClassRef(), static_cast<void*>(priv));
88         if (NULL == jsValueRef) {
89                 LogError("object creation error");
90                 return JSValueMakeUndefined(context);
91         }
92         return jsValueRef;
93 }
94
95 void JSApplicationServiceExtraData::initialize(JSContextRef context, JSObjectRef object)
96 {
97         assert(NULL != JSObjectGetPrivate(object));
98 }
99
100 void JSApplicationServiceExtraData::finalize(JSObjectRef object)
101 {
102         //delete (JSObjectGetPrivate(object));
103 }
104
105 bool JSApplicationServiceExtraData::isObjectOfClass(JSContextRef context, JSValueRef value)
106 {
107         return JSValueIsObjectOfClass(context, value, getClassRef());
108 }
109
110 ApplicationServiceExtraDataPtr JSApplicationServiceExtraData::getPrivData(JSObjectRef object)
111 {
112         LogDebug("entered");
113         JSApplicationServiceExtraDataPriv *priv = static_cast<JSApplicationServiceExtraDataPriv*>(JSObjectGetPrivate(object));
114         if (!priv) {
115                 ThrowMsg(Commons::NullPointerException, "Private object is null");
116         }
117         ApplicationServiceExtraDataPtr result = priv->getObject();
118         if (!result) {
119                 ThrowMsg(Commons::NullPointerException, "Private object is null");
120         }
121         return result;
122 }
123
124 ApplicationServiceExtraDataPtr 
125         JSApplicationServiceExtraData::getApplicationServiceExtraData(JSContextRef context, JSValueRef value)
126 {
127         if (!isObjectOfClass(context, value)) {
128                 Throw(Commons::InvalidArgumentException);
129         }
130         JSObjectRef object = JSValueToObject(context, value, NULL);
131         if (!object) {
132                 Throw(Commons::InvalidArgumentException);
133         }
134         JSApplicationServiceExtraDataPriv *priv = static_cast<JSApplicationServiceExtraDataPriv*>(JSObjectGetPrivate(object));
135         if (!priv) {
136                 Throw(Commons::NullPointerException);
137         }
138         return priv->getObject();
139 }
140
141 JSValueRef JSApplicationServiceExtraData::getExtraDataKey(JSContextRef context,
142                 JSObjectRef object,
143                 JSStringRef propertyName,
144                 JSValueRef* exception)
145 {
146         LogDebug("entered");
147         Try
148         {
149                 CommonsJavaScript::Converter converter(context);
150                 ApplicationServiceExtraDataPtr privateData = getPrivData(object);
151                 return converter.toJSValueRef(privateData->getKey());
152         }
153         Catch(Commons::Exception)
154         {
155                 LogWarning("trying to get incorrect value");
156         }
157         return JSValueMakeUndefined(context);
158 }
159
160 bool JSApplicationServiceExtraData::setExtraDataKey(JSContextRef context,
161                 JSObjectRef object,
162                 JSStringRef propertyName,
163                 JSValueRef key,
164                 JSValueRef* exception)
165 {
166         Try
167         {
168                 ApplicationServiceExtraDataPtr privateData = getPrivData(object);
169                 CommonsJavaScript::Converter converter(context);
170                 privateData->setKey(converter.toString(key));
171                 return true;
172         }
173         Catch(Commons::Exception)
174         {
175                 LogWarning("trying to set incorrect value");
176         }
177         JSDOMExceptionFactory::TypeMismatchException.make(context, exception);
178         return false;
179 }
180
181 JSValueRef JSApplicationServiceExtraData::getExtraDataValue(JSContextRef context,
182                 JSObjectRef object,
183                 JSStringRef propertyName,
184                 JSValueRef* exception)
185 {
186         LogDebug("entered");
187         Try
188         {
189                 WrtDeviceApis::CommonsJavaScript::Converter converter(context);
190                 ApplicationServiceExtraDataPtr privateData = getPrivData(object);
191                 return converter.toJSValueRef(privateData->getValue());
192         }
193         Catch(WrtDeviceApis::Commons::Exception)
194         {
195                 LogWarning("trying to get incorrect value");
196         }
197         return JSValueMakeUndefined(context);
198 }
199
200 bool JSApplicationServiceExtraData::setExtraDataValue(JSContextRef context,
201                 JSObjectRef object,
202                 JSStringRef propertyName,
203                 JSValueRef value,
204                 JSValueRef* exception)
205 {
206         Try
207         {
208                 ApplicationServiceExtraDataPtr privateData = getPrivData(object);
209                 WrtDeviceApis::CommonsJavaScript::Converter converter(context);
210                 privateData->setValue(converter.toString(value));
211                 return true;
212         }
213         Catch(WrtDeviceApis::Commons::Exception)
214         {
215                 LogWarning("trying to set incorrect value");
216         }
217         JSDOMExceptionFactory::TypeMismatchException.make(context, exception);
218         return false;
219 }
220
221 }
222 }
223 }