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)
152 DataSyncConverter converter(context);
154 SyncInfoPtr syncInfo( new SyncInfo() );
156 if (argumentCount>=1) {
157 syncInfo->setUrl(converter.toString(arguments[0]));
159 if (argumentCount>=2) {
160 syncInfo->setId(converter.toString(arguments[1]));
162 if (argumentCount>=3) {
163 syncInfo->setPassword(converter.toString(arguments[2]));
165 if (argumentCount>=4) {
166 syncInfo->setSyncMode(converter.toSyncMode(converter.toString(arguments[3])));
169 LoggerD("mode: "<<syncInfo->getSyncMode());
171 if (SyncInfo::MANUAL_MODE==syncInfo->getSyncMode()) {
172 if (argumentCount>=5) {
173 syncInfo->setSyncType(converter.toSyncType(converter.toString(arguments[4])));
175 } else if (SyncInfo::PERIODIC_MODE==syncInfo->getSyncMode()) {
176 if (argumentCount>=5) {
177 syncInfo->setSyncInterval(converter.toSyncInterval(converter.toString(arguments[4])));
180 LoggerD("The sync mode should be push.");
183 return createJSSyncInfo(context, syncInfo);
185 Catch(UnsupportedException)
187 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
188 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_SUPPORTED_ERROR, _rethrown_exception.GetMessage());
190 Catch(InvalidArgumentException)
192 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
193 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, _rethrown_exception.GetMessage());
195 Catch(ConversionException)
197 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
198 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
202 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
203 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, _rethrown_exception.GetMessage());
207 JSValueRef JSSyncInfo::getProperty(JSContextRef context,
209 JSStringRef propertyName,
210 JSValueRef* exception)
214 SyncInfoPrivateObject* priv = static_cast<SyncInfoPrivateObject*>(JSObjectGetPrivate(object));
216 ThrowMsg(NullPointerException, "Private object is NULL.");
219 SyncInfoPtr syncInfo = priv->getObject();
221 DataSyncConverter converter(context);
223 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_URL)) {
224 return converter.toJSValueRef(syncInfo->getUrl());
225 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_ID)) {
226 // For a privacy reason.
227 return JSValueMakeNull(context);
228 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_PASSWORD)) {
229 // For a privacy reason.
230 return JSValueMakeNull(context);
231 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_MODE)) {
232 return converter.toJSValueRef(converter.toTizenValue(syncInfo->getSyncMode()));
233 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_TYPE)) {
234 return converter.toJSValueRef(converter.toTizenValue(syncInfo->getSyncType()));
235 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_INTERVAL)) {
236 if( SyncInfo::INTERVAL_UNDEFINED==syncInfo->getSyncInterval() ) {
237 return JSValueMakeUndefined(context);
239 return converter.toJSValueRef(converter.toTizenValue(syncInfo->getSyncInterval()));
242 LoggerD("Wrong property name.");
247 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
250 return JSValueMakeUndefined(context);
253 bool JSSyncInfo::setProperty(JSContextRef context,
255 JSStringRef propertyName,
257 JSValueRef* exception)
261 SyncInfoPrivateObject* priv = static_cast<SyncInfoPrivateObject*>(JSObjectGetPrivate(object));
263 ThrowMsg(NullPointerException, "Private object is NULL.");
266 SyncInfoPtr syncInfo = priv->getObject();
268 DataSyncConverter converter(context);
270 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_URL)) {
271 syncInfo->setUrl(converter.toString(value));
273 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_ID)) {
274 syncInfo->setId(converter.toString(value));
276 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_PASSWORD)) {
277 syncInfo->setPassword(converter.toString(value));
279 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_MODE)) {
280 syncInfo->setSyncMode(converter.toSyncMode(converter.toString(value)));
282 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_TYPE)) {
283 syncInfo->setSyncType(converter.toSyncType(converter.toString(value)));
285 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_SYNC_INFO_INTERVAL)) {
286 syncInfo->setSyncInterval(converter.toSyncInterval(converter.toString(value)));
289 LoggerD("Wrong property name.");
294 LoggerW("Exception: "<<_rethrown_exception.GetMessage());