2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <dpl/shared_ptr.h>
19 #include <CommonsJavaScript/Converter.h>
20 #include <CommonsJavaScript/JSDOMExceptionFactory.h>
21 #include "JSApplicationServiceExtraData.h"
25 namespace Application {
27 using namespace Api::Application;
28 using namespace WrtDeviceApis;
29 using namespace WrtDeviceApis::CommonsJavaScript;
33 const char* APPLICATION_SERVICE_EXTRA_DATA_KEY = "key";
34 const char* APPLICATION_SERVICE_EXTRA_DATA_VALUE = "value";
37 JSClassRef JSApplicationServiceExtraData::m_classRef = NULL;
39 JSClassDefinition JSApplicationServiceExtraData::m_classInfo =
42 kJSClassAttributeNone,
43 "ApplicationServiceExtraData",
52 NULL, //DeleteProperty,
53 NULL, //getPropertyNames,
57 NULL, //ConvertToType,
60 JSStaticValue JSApplicationServiceExtraData::m_property[] = {
61 { APPLICATION_SERVICE_EXTRA_DATA_KEY, getExtraDataKey, setExtraDataKey, kJSPropertyAttributeNone },
62 { APPLICATION_SERVICE_EXTRA_DATA_VALUE, getExtraDataValue, setExtraDataValue, kJSPropertyAttributeNone },
66 JSStaticFunction JSApplicationServiceExtraData::m_functions[] =
71 JSClassRef JSApplicationServiceExtraData::getClassRef() {
73 m_classRef = JSClassCreate(&m_classInfo);
78 JSValueRef JSApplicationServiceExtraData::createJSObject(JSContextRef context,
79 const std::string &key,
80 const std::string &value)
82 ApplicationServiceExtraDataPtr privateData = ApplicationServiceExtraDataPtr(new ApplicationServiceExtraData());
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);
95 void JSApplicationServiceExtraData::initialize(JSContextRef context, JSObjectRef object)
97 assert(NULL != JSObjectGetPrivate(object));
100 void JSApplicationServiceExtraData::finalize(JSObjectRef object)
102 //delete (JSObjectGetPrivate(object));
105 bool JSApplicationServiceExtraData::isObjectOfClass(JSContextRef context, JSValueRef value)
107 return JSValueIsObjectOfClass(context, value, getClassRef());
110 ApplicationServiceExtraDataPtr JSApplicationServiceExtraData::getPrivData(JSObjectRef object)
113 JSApplicationServiceExtraDataPriv *priv = static_cast<JSApplicationServiceExtraDataPriv*>(JSObjectGetPrivate(object));
115 ThrowMsg(Commons::NullPointerException, "Private object is null");
117 ApplicationServiceExtraDataPtr result = priv->getObject();
119 ThrowMsg(Commons::NullPointerException, "Private object is null");
124 ApplicationServiceExtraDataPtr
125 JSApplicationServiceExtraData::getApplicationServiceExtraData(JSContextRef context, JSValueRef value)
127 if (!isObjectOfClass(context, value)) {
128 Throw(Commons::InvalidArgumentException);
130 JSObjectRef object = JSValueToObject(context, value, NULL);
132 Throw(Commons::InvalidArgumentException);
134 JSApplicationServiceExtraDataPriv *priv = static_cast<JSApplicationServiceExtraDataPriv*>(JSObjectGetPrivate(object));
136 Throw(Commons::NullPointerException);
138 return priv->getObject();
141 JSValueRef JSApplicationServiceExtraData::getExtraDataKey(JSContextRef context,
143 JSStringRef propertyName,
144 JSValueRef* exception)
149 CommonsJavaScript::Converter converter(context);
150 ApplicationServiceExtraDataPtr privateData = getPrivData(object);
151 return converter.toJSValueRef(privateData->getKey());
153 Catch(Commons::Exception)
155 LogWarning("trying to get incorrect value");
157 return JSValueMakeUndefined(context);
160 bool JSApplicationServiceExtraData::setExtraDataKey(JSContextRef context,
162 JSStringRef propertyName,
164 JSValueRef* exception)
168 ApplicationServiceExtraDataPtr privateData = getPrivData(object);
169 CommonsJavaScript::Converter converter(context);
170 privateData->setKey(converter.toString(key));
173 Catch(Commons::Exception)
175 LogWarning("trying to set incorrect value");
177 JSDOMExceptionFactory::TypeMismatchException.make(context, exception);
181 JSValueRef JSApplicationServiceExtraData::getExtraDataValue(JSContextRef context,
183 JSStringRef propertyName,
184 JSValueRef* exception)
189 WrtDeviceApis::CommonsJavaScript::Converter converter(context);
190 ApplicationServiceExtraDataPtr privateData = getPrivData(object);
191 return converter.toJSValueRef(privateData->getValue());
193 Catch(WrtDeviceApis::Commons::Exception)
195 LogWarning("trying to get incorrect value");
197 return JSValueMakeUndefined(context);
200 bool JSApplicationServiceExtraData::setExtraDataValue(JSContextRef context,
202 JSStringRef propertyName,
204 JSValueRef* exception)
208 ApplicationServiceExtraDataPtr privateData = getPrivData(object);
209 WrtDeviceApis::CommonsJavaScript::Converter converter(context);
210 privateData->setValue(converter.toString(value));
213 Catch(WrtDeviceApis::Commons::Exception)
215 LogWarning("trying to set incorrect value");
217 JSDOMExceptionFactory::TypeMismatchException.make(context, exception);