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.
20 #include <dpl/log/log.h>
21 #include <dpl/shared_ptr.h>
22 #include <CommonsJavaScript/JSUtils.h>
23 #include <CommonsJavaScript/JSDOMExceptionFactory.h>
24 #include <Tizen/Common/JSTizenExceptionFactory.h>
25 #include <Tizen/Common/JSTizenException.h>
26 #include <API/Call/CallDefine.h>
27 #include <API/Call/RemoteParty.h>
28 #include "JSRemoteParty.h"
29 #include "Converter.h"
34 using namespace WrtDeviceApis;
35 using namespace WrtDeviceApis::Commons;
36 using namespace WrtDeviceApis::CommonsJavaScript;
37 using namespace Api::Call;
38 using namespace TizenApis::Commons;
40 JSClassDefinition JSRemoteParty::m_classInfo = {
42 kJSClassAttributeNone,
52 NULL, //DeleteProperty,
53 NULL, //GetPropertyNames,
54 NULL, //CallAsFunction,
55 NULL, //CallAsConstructor,
60 JSStaticValue JSRemoteParty::m_property[] = {
61 { STR_REMOTE_PARTY, getProperty, NULL, kJSPropertyAttributeReadOnly },
62 { STR_DISPLAY_NAME, getProperty, NULL, kJSPropertyAttributeReadOnly },
63 { STR_CONTACT_REF, getProperty, NULL, kJSPropertyAttributeReadOnly },
67 const JSClassRef JSRemoteParty::getClassRef()
70 m_jsClassRef = JSClassCreate(&m_classInfo);
75 const JSClassDefinition* JSRemoteParty::getClassInfo()
80 JSClassRef JSRemoteParty::m_jsClassRef = JSClassCreate(JSRemoteParty::getClassInfo());
82 JSObjectRef JSRemoteParty::createJSObject(JSContextRef context,
83 const RemoteParty &remoteParty)
85 RemotePartyPtr RemotePartyProps(new RemoteParty(remoteParty));
86 JSRemotePartyPriv *priv = new JSRemotePartyPriv(context, RemotePartyPtr(RemotePartyProps));
88 ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Can not new an object");
90 return JSObjectMake(context, getClassRef(), priv);
93 RemotePartyPtr JSRemoteParty::getRemoteParty(JSContextRef context, JSValueRef value)
95 if (!JSValueIsObjectOfClass(context, value, getClassRef())) {
96 Throw(WrtDeviceApis::Commons::ConversionException);
98 JSObjectRef object = JSValueToObject(context, value, NULL);
100 Throw(WrtDeviceApis::Commons::ConversionException);
102 JSRemotePartyPriv *priv = static_cast<JSRemotePartyPriv*>(JSObjectGetPrivate(object));
104 Throw(WrtDeviceApis::Commons::ConversionException);
106 return priv->getObject();
109 void JSRemoteParty::initialize(JSContextRef context, JSObjectRef object)
113 void JSRemoteParty::finalize(JSObjectRef object)
115 JSRemotePartyPriv* priv = static_cast<JSRemotePartyPriv*>(JSObjectGetPrivate(object));
117 JSObjectSetPrivate(object, NULL);
122 JSValueRef JSRemoteParty::getProperty(JSContextRef context,
124 JSStringRef propertyName,
125 JSValueRef* exception)
127 JSRemotePartyPriv *priv = static_cast<JSRemotePartyPriv*>(JSObjectGetPrivate(object));
129 return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
133 RemotePartyPtr remoteParty = priv->getObject();
134 Converter convert(context);
135 Tizen1_0::Contact::ContactConverter contactConverter(context);
137 if (JSStringIsEqualToUTF8CString(propertyName, STR_REMOTE_PARTY)) {
138 return convert.toJSValueRef(remoteParty->getRemoteParty());
139 } else if (JSStringIsEqualToUTF8CString(propertyName, STR_DISPLAY_NAME)) {
140 return convert.toJSValueRef(remoteParty->getDisplayName());
141 } else if (JSStringIsEqualToUTF8CString(propertyName, STR_CONTACT_REF)) {
142 return contactConverter.toJSValueRef(remoteParty->getContactRef());
144 } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
145 return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, ex.GetMessage());
146 } catch(const WrtDeviceApis::Commons::Exception& ex) {
147 return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, ex.GetMessage());
149 return JSValueMakeUndefined(context);
152 bool JSRemoteParty::hasInstance(JSContextRef context,
153 JSObjectRef constructor,
154 JSValueRef possibleInstance,
155 JSValueRef* exception)
157 return JSValueIsObjectOfClass(context, possibleInstance, getClassRef());