2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include "JSSyncInfo.h"
20 #include "DataSyncConverter.h"
22 #include <JSWebAPIErrorFactory.h>
23 #include <CommonsJavaScript/Converter.h>
26 using namespace WrtDeviceApis::Commons;
27 using namespace WrtDeviceApis::CommonsJavaScript;
28 using namespace DeviceAPI::Common;
33 JSClassDefinition JSSyncInfo::m_classInfo = {
35 kJSClassAttributeNone,
36 TIZEN_SYNC_INFO_INTERFACE,
45 NULL, //deleteProperty,
46 NULL, //getPropertyNames,
47 NULL, //callAsFunction,
50 NULL, //convertToType,
53 JSStaticValue JSSyncInfo::m_property[] = {
54 { TIZEN_SYNC_INFO_URL, getProperty, setProperty, kJSPropertyAttributeNone },
55 { TIZEN_SYNC_INFO_ID, getProperty, setProperty, kJSPropertyAttributeNone },
56 { TIZEN_SYNC_INFO_PASSWORD, getProperty, setProperty, kJSPropertyAttributeNone },
57 { TIZEN_SYNC_INFO_MODE, getProperty, setProperty, kJSPropertyAttributeNone },
58 { TIZEN_SYNC_INFO_TYPE, getProperty, setProperty, kJSPropertyAttributeNone },
59 { TIZEN_SYNC_INFO_INTERVAL, getProperty, setProperty, kJSPropertyAttributeNone },
64 JSClassRef JSSyncInfo::m_jsClassRef = JSClassCreate(
65 JSSyncInfo::getClassInfo());
67 const JSClassDefinition* JSSyncInfo::getClassInfo()
69 return &(m_classInfo);
72 JSClassRef JSSyncInfo::getClassRef()
75 m_jsClassRef = JSClassCreate(&m_classInfo);
80 JSObjectRef JSSyncInfo::createJSSyncInfo(JSContextRef context, SyncInfoPtr syncInfo)
82 SyncInfoPrivateObject *priv = new SyncInfoPrivateObject(context, syncInfo);
83 return JSObjectMake(context, getClassRef(), priv);
86 void JSSyncInfo::initialize(JSContextRef context,
89 if (!JSObjectGetPrivate(object)) {
90 LoggerD("Create JSSyncInfo private object.");
91 SyncInfoPtr syncInfo( new SyncInfo() );
92 SyncInfoPrivateObject *priv = new SyncInfoPrivateObject(context, syncInfo);
93 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
97 LoggerD("Private object already set.");
101 void JSSyncInfo::finalize(JSObjectRef object)
103 SyncInfoPrivateObject* priv = static_cast<SyncInfoPrivateObject*>(JSObjectGetPrivate(object));
105 LoggerD("Deleting JSSyncInfo private object.");
107 JSObjectSetPrivate(object, NULL);
111 SyncInfoPtr JSSyncInfo::getPrivateObject(JSObjectRef object)
113 SyncInfoPrivateObject *priv = static_cast<SyncInfoPrivateObject*>(JSObjectGetPrivate(object));
115 ThrowMsg(NullPointerException, "Private object is null.");
118 SyncInfoPtr syncInfo = priv->getObject();
120 ThrowMsg(NullPointerException, "JSSyncInfo object is null.");
125 void JSSyncInfo::setPrivateObject(const SyncInfoPtr &syncInfo,
127 const JSObjectRef object)
131 SyncInfoPrivateObject *priv = static_cast<SyncInfoPrivateObject*>(JSObjectGetPrivate(object));
133 priv = new SyncInfoPrivateObject(ctx, syncInfo);
134 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
140 LoggerE("Error during setting JSSyncInfo object.");
144 JSObjectRef JSSyncInfo::constructor(JSContextRef context,
145 JSObjectRef constructor,
146 size_t argumentCount,
147 const JSValueRef arguments[],
148 JSValueRef* exception)
150 SyncInfoPtr syncInfo( new SyncInfo() );
154 DataSyncConverter converter(context);
157 if (argumentCount>=1) {
158 syncInfo->setUrl(converter.toString(arguments[0]));
160 if (argumentCount>=2) {
161 syncInfo->setId(converter.toString(arguments[1]));
163 if (argumentCount>=3) {
164 syncInfo->setPassword(converter.toString(arguments[2]));
166 if (argumentCount>=4) {
167 syncInfo->setSyncMode(converter.toSyncMode(converter.toString(arguments[3])));
170 LoggerD("mode: "<<syncInfo->getSyncMode());
172 if (SyncInfo::MANUAL_MODE==syncInfo->getSyncMode()) {
173 if (argumentCount>=5) {
174 syncInfo->setSyncType(converter.toSyncType(converter.toString(arguments[4])));
176 } else if (SyncInfo::PERIODIC_MODE==syncInfo->getSyncMode()) {
177 if (argumentCount>=5) {
178 syncInfo->setSyncInterval(converter.toSyncInterval(converter.toString(arguments[4])));
181 LoggerD("The sync mode should be push.");
184 return createJSSyncInfo(context, syncInfo);
186 Catch(UnsupportedException)
188 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
189 //return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_SUPPORTED_ERROR, _rethrown_exception.GetMessage());
191 Catch(InvalidArgumentException)
193 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
194 //return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, _rethrown_exception.GetMessage());
196 Catch(ConversionException)
198 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
199 //return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
203 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
204 //return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, _rethrown_exception.GetMessage());
207 return createJSSyncInfo(context, syncInfo);
210 JSValueRef JSSyncInfo::getProperty(JSContextRef context,
212 JSStringRef propertyName,
213 JSValueRef* exception)
217 SyncInfoPrivateObject* priv = static_cast<SyncInfoPrivateObject*>(JSObjectGetPrivate(object));
219 ThrowMsg(NullPointerException, "Private object is NULL.");
222 SyncInfoPtr syncInfo = priv->getObject();
224 DataSyncConverter converter(context);
226 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_URL)) {
227 return converter.toJSValueRef(syncInfo->getUrl());
228 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_ID)) {
229 // For a privacy reason.
230 return JSValueMakeNull(context);
231 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_PASSWORD)) {
232 // For a privacy reason.
233 return JSValueMakeNull(context);
234 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_MODE)) {
235 return converter.toJSValueRef(converter.toTizenValue(syncInfo->getSyncMode()));
236 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_TYPE)) {
237 return converter.toJSValueRef(converter.toTizenValue(syncInfo->getSyncType()));
238 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_INTERVAL)) {
239 if( SyncInfo::INTERVAL_UNDEFINED==syncInfo->getSyncInterval() ) {
240 return JSValueMakeUndefined(context);
242 return converter.toJSValueRef(converter.toTizenValue(syncInfo->getSyncInterval()));
245 LoggerD("Wrong property name.");
250 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
253 return JSValueMakeUndefined(context);
256 bool JSSyncInfo::setProperty(JSContextRef context,
258 JSStringRef propertyName,
260 JSValueRef* exception)
264 SyncInfoPrivateObject* priv = static_cast<SyncInfoPrivateObject*>(JSObjectGetPrivate(object));
266 ThrowMsg(NullPointerException, "Private object is NULL.");
269 SyncInfoPtr syncInfo = priv->getObject();
271 DataSyncConverter converter(context);
273 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_URL)) {
274 syncInfo->setUrl(converter.toString(value));
276 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_ID)) {
277 syncInfo->setId(converter.toString(value));
279 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_PASSWORD)) {
280 syncInfo->setPassword(converter.toString(value));
282 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_MODE)) {
283 syncInfo->setSyncMode(converter.toSyncMode(converter.toString(value)));
285 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_TYPE)) {
286 syncInfo->setSyncType(converter.toSyncType(converter.toString(value)));
288 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_INTERVAL)) {
289 syncInfo->setSyncInterval(converter.toSyncInterval(converter.toString(value)));
292 LoggerD("Wrong property name.");
297 LoggerW("Exception: "<<_rethrown_exception.GetMessage());