Update change log and spec for wrt-plugins-tizen_0.4.20
[platform/framework/web/wrt-plugins-tizen.git] / src / Notification / JSNotificationDetailInfo.cpp
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 #include <SecurityExceptions.h>
19
20 #include <JSUtil.h>
21 #include <JSWebAPIError.h>
22 #include <ArgumentValidator.h>
23 #include <GlobalContextManager.h>
24 #include <MultiCallbackUserData.h>
25 #include <PlatformException.h>
26
27 #include "plugin_config.h"
28
29 #include "JSNotificationDetailInfo.h"
30
31 using namespace WrtDeviceApis::Commons;
32 using namespace DeviceAPI::Common;
33
34 namespace DeviceAPI {
35 namespace Notification {
36
37 JSClassDefinition JSNotificationDetailInfo::m_classInfo = {
38     0,
39     kJSClassAttributeNone,
40     "NotificationDetailInfo",
41     NULL, //ParentClass
42     NULL, //StaticValues
43     NULL, //StaticFunctions
44     initialize, //Initialize
45     finalize, //Finalize
46     NULL, //HasProperty,
47     NULL, //GetProperty,
48     NULL, //SetProperty,
49     NULL, //DeleteProperty,
50     NULL, //GetPropertyNames,
51     NULL, //CallAsFunction,
52     NULL, //CallAsConstructor,
53     NULL, //HasInstance,
54     NULL //ConvertToType
55 };
56
57
58 JSClassRef JSNotificationDetailInfo::m_jsClassRef = JSClassCreate(JSNotificationDetailInfo::getClassInfo());
59
60 const JSClassRef JSNotificationDetailInfo::getClassRef()
61 {
62     if (!m_jsClassRef) {
63         m_jsClassRef = JSClassCreate(&m_classInfo);
64     }
65     return m_jsClassRef;
66 }
67
68 const JSClassDefinition* JSNotificationDetailInfo::getClassInfo()
69 {
70     return &m_classInfo;
71 }
72
73 void JSNotificationDetailInfo::initialize(JSContextRef context, JSObjectRef object)
74 {
75     if (!JSObjectGetPrivate(object)) {
76         NotificationDetailInfo *priv = new NotificationDetailInfo();
77         if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
78             delete priv;
79         }
80     }
81 }
82
83 void JSNotificationDetailInfo::finalize(JSObjectRef object)
84 {
85     NotificationDetailInfo *priv = static_cast<NotificationDetailInfo*>(JSObjectGetPrivate(object));
86     if (priv) {
87         JSObjectSetPrivate(object, NULL);
88         delete priv;
89     }
90 }
91
92 JSObjectRef JSNotificationDetailInfo::constructor(JSContextRef context,
93     JSObjectRef constructor,
94     size_t argumentCount,
95     const JSValueRef arguments[],
96     JSValueRef* exception)
97 {
98     ArgumentValidator validator(context, argumentCount, arguments);
99
100     NotificationDetailInfo *priv = new NotificationDetailInfo();
101
102     try {
103         priv->setMainText(validator.toString(0, false, ""));
104     } catch (const BasePlatformException& err) {
105         LogWarning("mainText convertion is failed. %s", err.getMessage().c_str());
106     }
107
108     try {
109         priv->setSubText(validator.toString(1, true, ""));
110     } catch (const BasePlatformException& err) {
111         LogWarning("subText convertion is failed. %s", err.getMessage().c_str());
112     }
113
114     JSObjectRef obj = JSObjectMake(context, getClassRef(), NULL);
115     setPrivateObject(context, obj, priv);
116
117     JSStringRef ctorName = JSStringCreateWithUTF8CString("constructor");
118     JSObjectSetProperty(context, obj, ctorName, constructor,
119         kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete | kJSPropertyAttributeDontEnum, NULL);
120     JSStringRelease(ctorName);
121
122     return obj;
123 }
124
125 NotificationDetailInfo* JSNotificationDetailInfo::getPrivateObject(JSContextRef context, JSObjectRef object)
126 {
127     NotificationDetailInfo *priv = static_cast<NotificationDetailInfo*>(JSObjectGetPrivate(object));
128     if (!priv) {
129         throw TypeMismatchException("NotificationDetailInfo's private object is NULL.");
130     }
131
132     // mainText
133     JSValueRef mainText = JSUtil::getProperty(context, object, NOTIFICATION_DETAIL_INFO_MAIN_TEXT);
134     priv->setMainText(JSUtil::JSValueToString(context, mainText));
135
136     // subText
137     JSValueRef subText = JSUtil::getProperty(context, object, NOTIFICATION_DETAIL_INFO_SUB_TEXT);
138     priv->setSubText(JSUtil::JSValueToString(context, subText));
139
140     return priv;
141 }
142
143 void JSNotificationDetailInfo::setPrivateObject(JSContextRef context, JSObjectRef object, NotificationDetailInfo *priv)
144 {
145     if (priv) {
146         JSObjectSetPrivate(object, static_cast<void*>(priv));
147     }
148
149     // mainText
150     JSUtil::setProperty(context, object, NOTIFICATION_DETAIL_INFO_MAIN_TEXT,
151             JSUtil::toJSValueRef(context, priv->getMainText()), kJSPropertyAttributeNone);
152
153     // subText
154     std::string subText = priv->getSubText();
155
156     if ( subText.empty())
157     {
158         JSUtil::setProperty(context, object, NOTIFICATION_DETAIL_INFO_SUB_TEXT,  JSValueMakeNull(context), kJSPropertyAttributeNone);
159     }
160     else
161     {
162         JSUtil::setProperty(context, object, NOTIFICATION_DETAIL_INFO_SUB_TEXT,
163                 JSUtil::toJSValueRef(context, priv->getSubText()), kJSPropertyAttributeNone);
164     }
165 }
166
167
168 } // Notification
169 } // DeviceAPI