Beta merge 2
[profile/ivi/wrt-plugins-tizen.git] / src / standards / Tizen / Call / JSRemoteParty.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
18 #include <cassert>
19 #include <memory>
20 #include <dpl/log/log.h>
21 #include <dpl/shared_ptr.h>
22 #include <CommonsJavaScript/JSUtils.h>
23 #include <CommonsJavaScript/JSDOMExceptionFactory.h>
24 #include <API/Call/RemoteParty.h>
25 #include "JSRemoteParty.h"
26 #include "Converter.h"
27
28 namespace TizenApis {
29 namespace Tizen1_0 {
30
31 using namespace WrtDeviceApis;
32 using namespace WrtDeviceApis::Commons;
33 using namespace WrtDeviceApis::CommonsJavaScript;
34 using namespace Api::Call;
35
36 #define STR_REMOTE_PARTY                "remoteParty"
37 #define STR_DISPLAY_NAME                "displayName"
38 #define STR_CONTACT_ID                  "contactId"
39
40 JSClassDefinition JSRemoteParty::m_classInfo = {
41         0,
42         kJSClassAttributeNone,
43         "remoteparty",
44         0,
45         m_property,
46         0,
47         initialize,
48         finalize,
49         NULL,     //HasProperty,
50         getProperty,
51         NULL,     //SetProperty,
52         NULL,     //DeleteProperty,
53         NULL,     //GetPropertyNames,
54         NULL,     //CallAsFunction,
55         NULL,     //CallAsConstructor,
56         hasInstance,
57         NULL,     //ConvertToType
58 };
59
60 JSStaticValue JSRemoteParty::m_property[] = {
61         { STR_REMOTE_PARTY, getProperty, NULL, kJSPropertyAttributeReadOnly },
62         { STR_DISPLAY_NAME, getProperty, NULL, kJSPropertyAttributeReadOnly },
63         { STR_CONTACT_ID, getProperty, NULL, kJSPropertyAttributeReadOnly },
64         { 0, 0, 0, 0 }
65 };
66
67 const JSClassRef JSRemoteParty::getClassRef()
68 {
69         if (!m_jsClassRef) {
70                 m_jsClassRef = JSClassCreate(&m_classInfo);
71         }
72         return m_jsClassRef;
73 }
74
75 const JSClassDefinition* JSRemoteParty::getClassInfo()
76 {
77         return &m_classInfo;
78 }
79
80 JSClassRef JSRemoteParty::m_jsClassRef = JSClassCreate(JSRemoteParty::getClassInfo());
81
82 JSObjectRef JSRemoteParty::createJSObject(JSContextRef context,
83         const RemoteParty &remoteParty)
84 {
85         std::auto_ptr<RemoteParty> RemotePartyProps(new RemoteParty(remoteParty));
86         JSRemotePartyPriv *priv = new JSRemotePartyPriv(context, RemotePartyProps.get());
87         RemotePartyProps.release();
88         if (!priv) {
89                 ThrowMsg(Commons::NullPointerException, "Can not new an object");
90         }
91         return JSObjectMake(context, getClassRef(), priv);
92 }
93
94 void JSRemoteParty::initialize(JSContextRef context, JSObjectRef object)
95 {
96 }
97
98 void JSRemoteParty::finalize(JSObjectRef object)
99 {
100         JSRemotePartyPriv* priv = static_cast<JSRemotePartyPriv*>(JSObjectGetPrivate(object));
101         JSObjectSetPrivate(object, NULL);
102         delete priv;
103 }
104
105 JSValueRef JSRemoteParty::getProperty(JSContextRef context,
106         JSObjectRef object,
107         JSStringRef propertyName,
108         JSValueRef* exception)
109 {
110         JSRemotePartyPriv *priv = static_cast<JSRemotePartyPriv*>(JSObjectGetPrivate(object));
111         assert(priv && "Private object not set.");
112
113         try {
114                 RemoteParty* remoteParty = priv->getObject();
115                 Converter convert(context);
116
117                 if (JSStringIsEqualToUTF8CString(propertyName, STR_REMOTE_PARTY)) {
118                         return convert.toJSValueRef(remoteParty->getRemoteParty());
119                 } else if (JSStringIsEqualToUTF8CString(propertyName, STR_DISPLAY_NAME)) {
120                         return convert.toJSValueRef(remoteParty->getDisplayName());
121                 } else if (JSStringIsEqualToUTF8CString(propertyName, STR_CONTACT_ID)) {
122                         return convert.toJSValueRef(remoteParty->getContactId());
123                 }
124         } catch(Commons::Exception) {
125                 LogWarning("trying to get incorrect value");
126         }
127         return JSValueMakeUndefined(context);
128 }
129
130 bool JSRemoteParty::hasInstance(JSContextRef context,
131         JSObjectRef constructor,
132         JSValueRef possibleInstance,
133         JSValueRef* exception)
134 {
135         return JSValueIsObjectOfClass(context, possibleInstance, getClassRef());
136 }
137 }
138 }
139