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 * @file JSContactOrganization.cpp
20 * @author Kisub Song (kisubs.song@samsung.com)
22 * @brief Implementation of the JSContactOrganization class
25 #include "JSContactOrganization.h"
26 #include <dpl/shared_ptr.h>
27 #include <CommonsJavaScript/Validator.h>
28 #include <JSWebAPIErrorFactory.h>
29 #include "ContactConverter.h"
33 #define ORGANIZATION_CLASS_NAME "ContactOrganization"
35 #define CONTACT_ATTR_NAME "name"
36 #define CONTACT_ATTR_DEPARTMENT "department"
37 #define CONTACT_ATTR_OFFICE "office"
38 #define CONTACT_ATTR_TITLE "title"
39 #define CONTACT_ATTR_ROLE "role"
40 #define CONTACT_ATTR_LOGO_URI "logoURI"
45 using namespace DeviceAPI::Common;
46 using namespace WrtDeviceApis::Commons;
47 using namespace WrtDeviceApis::CommonsJavaScript;
49 JSClassDefinition JSContactOrganization::m_classInfo =
52 kJSClassAttributeNone,
53 ORGANIZATION_CLASS_NAME,
62 NULL, //DeleteProperty,
63 NULL, //getPropertyNames,
64 NULL, //CallAsFunction,
65 constructor, //CallAsConstructor,
66 hasInstance, //HasInstance,
67 NULL, //ConvertToType,
70 JSStaticValue JSContactOrganization::m_property[] = {
71 { CONTACT_ATTR_NAME, getName, setName, kJSPropertyAttributeNone },
72 { CONTACT_ATTR_DEPARTMENT, getDepartment, setDepartment, kJSPropertyAttributeNone },
73 { CONTACT_ATTR_OFFICE, getOffice, setOffice, kJSPropertyAttributeNone },
74 { CONTACT_ATTR_TITLE, getTitle, setTitle, kJSPropertyAttributeNone },
75 { CONTACT_ATTR_ROLE, getRole, setRole, kJSPropertyAttributeNone },
76 { CONTACT_ATTR_LOGO_URI, getLogoURI, setLogoURI, kJSPropertyAttributeNone },
80 JSStaticFunction JSContactOrganization::m_functions[] =
85 JSClassRef JSContactOrganization::m_classRef = JSClassCreate(&m_classInfo);
87 JSClassRef DLL_EXPORT JSContactOrganization::getClassRef() {
89 m_classRef = JSClassCreate(&m_classInfo);
94 bool JSContactOrganization::isObjectOfClass(JSContextRef context, JSValueRef value)
96 return JSValueIsObjectOfClass(context, value, getClassRef());
99 ContactOrganizationPtr JSContactOrganization::getContactOrganization(JSContextRef context, JSValueRef value)
101 if (!isObjectOfClass(context, value)) {
102 Throw(WrtDeviceApis::Commons::InvalidArgumentException);
104 JSObjectRef object = JSValueToObject(context, value, NULL);
106 Throw(WrtDeviceApis::Commons::InvalidArgumentException);
108 JSContactOrganizationPriv *priv = static_cast<JSContactOrganizationPriv*>(JSObjectGetPrivate(object));
110 Throw(WrtDeviceApis::Commons::NullPointerException);
112 return priv->getObject();
115 void JSContactOrganization::Initialize(JSContextRef context, JSObjectRef object)
117 if (!JSObjectGetPrivate(object))
119 ContactOrganizationPtr organization(new ContactOrganization());
120 JSContactOrganizationPriv *priv = new JSContactOrganizationPriv(context, ContactOrganizationPtr(organization));
121 if (!JSObjectSetPrivate(object, priv)) {
127 void JSContactOrganization::Finalize(JSObjectRef object)
129 JSContactOrganizationPriv *priv = static_cast<JSContactOrganizationPriv*>(JSObjectGetPrivate(object));
135 JSObjectRef JSContactOrganization::createJSObject(JSContextRef context, ContactOrganizationPtr contactOrganization)
137 JSContactOrganizationPriv *priv = new JSContactOrganizationPriv(context, contactOrganization);
138 JSObjectRef jsObjectRef = JSObjectMake(context, getClassRef(), static_cast<void*>(priv));
139 if (NULL == jsObjectRef) {
140 LoggerE("object creation error");
146 ContactOrganizationPtr JSContactOrganization::getPrivData(JSObjectRef object)
148 JSContactOrganizationPriv *priv = static_cast<JSContactOrganizationPriv*>(JSObjectGetPrivate(object));
150 ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object is null");
152 ContactOrganizationPtr result = priv->getObject();
154 ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object is null");
159 JSObjectRef JSContactOrganization::constructor(JSContextRef context,
160 JSObjectRef constructor,
161 size_t argumentCount,
162 const JSValueRef arguments[],
163 JSValueRef* exception)
165 bool js1stParamIsObject = false;
167 JSContactOrganizationPriv *priv = static_cast<JSContactOrganizationPriv*>(JSObjectGetPrivate(constructor));
169 ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object is null");
171 JSContextRef gContext = priv->getContext();
173 BasicValidator validator = BasicValidatorFactory::getValidator(context, exception);
175 if (argumentCount >= 1)
177 if (JSValueIsObject(gContext, arguments[0]))
178 js1stParamIsObject = true;
180 if (!js1stParamIsObject &&
181 !JSValueIsNull(gContext, arguments[0]) &&
182 !JSValueIsUndefined(gContext, arguments[0]))
183 ThrowMsg(InvalidArgumentException, "1st argument must be a 'object'");
186 } Catch(Exception ) {
187 LoggerE("Argument type mismatch : " << _rethrown_exception.GetMessage());
188 *exception = JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "1st argument must be a 'object'");
192 ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(gContext);
194 ContactOrganizationPtr contactOrganization(NULL);
196 if(js1stParamIsObject)
197 contactOrganization = converter->toContactOrganizationFromInit(arguments[0]);
199 contactOrganization = ContactOrganizationPtr(new ContactOrganization());
202 LoggerE("Argument type mismatch : " << _rethrown_exception.GetMessage());
203 *exception = JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
207 JSObjectRef jsobject;
210 jsobject = createJSObject(gContext, contactOrganization);
212 LoggerE("Argument type mismatch : " << _rethrown_exception.GetMessage());
213 *exception = JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
220 bool JSContactOrganization::hasInstance(JSContextRef context,
221 JSObjectRef constructor,
222 JSValueRef possibleInstance,
223 JSValueRef* exception)
225 return JSValueIsObjectOfClass(context, possibleInstance, getClassRef());
228 JSValueRef JSContactOrganization::getName(JSContextRef context,
230 JSStringRef propertyName,
231 JSValueRef* exception)
235 ContactConverterFactory::ConverterType converter =
236 ContactConverterFactory::getConverter(context);
237 ContactOrganizationPtr organization = getPrivData(object);
238 if(!organization->getNameIsSet())
239 return JSValueMakeNull(context);
241 return converter->toJSValueRef(organization->getName());
243 Catch(WrtDeviceApis::Commons::Exception)
245 LoggerW("trying to get incorrect value");
247 return JSValueMakeUndefined(context);
250 bool JSContactOrganization::setName(JSContextRef context,
252 JSStringRef propertyName,
254 JSValueRef* exception)
258 ContactOrganizationPtr organization = getPrivData(object);
259 ContactConverterFactory::ConverterType converter =
260 ContactConverterFactory::getConverter(context);
261 BasicValidator validator =
262 BasicValidatorFactory::getValidator(context, exception);
263 if(validator->isNullOrUndefined(value))
264 organization->unsetName();
266 organization->setName(converter->toString(value));
268 Catch(WrtDeviceApis::Commons::Exception)
270 LoggerW("trying to set incorrect value");
271 JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type mismatch");
277 JSValueRef JSContactOrganization::getDepartment(JSContextRef context,
279 JSStringRef propertyName,
280 JSValueRef* exception)
284 ContactConverterFactory::ConverterType converter =
285 ContactConverterFactory::getConverter(context);
286 ContactOrganizationPtr organization = getPrivData(object);
287 if(!organization->getDepartmentIsSet())
288 return JSValueMakeNull(context);
290 return converter->toJSValueRef(organization->getDepartment());
292 Catch(WrtDeviceApis::Commons::Exception)
294 LoggerW("trying to get incorrect value");
296 return JSValueMakeUndefined(context);
299 bool JSContactOrganization::setDepartment(JSContextRef context,
301 JSStringRef propertyName,
303 JSValueRef* exception)
307 ContactOrganizationPtr organization = getPrivData(object);
308 ContactConverterFactory::ConverterType converter =
309 ContactConverterFactory::getConverter(context);
310 BasicValidator validator =
311 BasicValidatorFactory::getValidator(context, exception);
312 if(validator->isNullOrUndefined(value))
313 organization->unsetDepartment();
315 organization->setDepartment(converter->toString(value));
317 Catch(WrtDeviceApis::Commons::Exception)
319 LoggerW("trying to set incorrect value");
320 JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type mismatch");
325 JSValueRef JSContactOrganization::getOffice(JSContextRef context,
327 JSStringRef propertyName,
328 JSValueRef* exception)
330 // NOTE: Deprecated field.
331 return JSValueMakeNull(context);
334 bool JSContactOrganization::setOffice(JSContextRef context,
336 JSStringRef propertyName,
338 JSValueRef* exception)
340 // NOTE: Deprecated field.
344 JSValueRef JSContactOrganization::getTitle(JSContextRef context,
346 JSStringRef propertyName,
347 JSValueRef* exception)
351 ContactConverterFactory::ConverterType converter =
352 ContactConverterFactory::getConverter(context);
353 ContactOrganizationPtr organization = getPrivData(object);
354 if(!organization->getTitleIsSet())
355 return JSValueMakeNull(context);
357 return converter->toJSValueRef(organization->getTitle());
359 Catch(WrtDeviceApis::Commons::Exception)
361 LoggerW("trying to get incorrect value");
363 return JSValueMakeUndefined(context);
366 bool JSContactOrganization::setTitle(JSContextRef context,
368 JSStringRef propertyName,
370 JSValueRef* exception)
374 ContactOrganizationPtr organization = getPrivData(object);
375 ContactConverterFactory::ConverterType converter =
376 ContactConverterFactory::getConverter(context);
377 BasicValidator validator =
378 BasicValidatorFactory::getValidator(context, exception);
379 if(validator->isNullOrUndefined(value))
380 organization->unsetTitle();
382 organization->setTitle(converter->toString(value));
384 Catch(WrtDeviceApis::Commons::Exception)
386 LoggerW("trying to set incorrect value");
387 JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type mismatch");
392 JSValueRef JSContactOrganization::getRole(JSContextRef context,
394 JSStringRef propertyName,
395 JSValueRef* exception)
399 ContactConverterFactory::ConverterType converter =
400 ContactConverterFactory::getConverter(context);
401 ContactOrganizationPtr organization = getPrivData(object);
402 if(!organization->getRoleIsSet())
403 return JSValueMakeNull(context);
405 return converter->toJSValueRef(organization->getRole());
407 Catch(WrtDeviceApis::Commons::Exception)
409 LoggerW("trying to get incorrect value");
411 return JSValueMakeUndefined(context);
414 bool JSContactOrganization::setRole(JSContextRef context,
416 JSStringRef propertyName,
418 JSValueRef* exception)
422 ContactOrganizationPtr organization = getPrivData(object);
423 ContactConverterFactory::ConverterType converter =
424 ContactConverterFactory::getConverter(context);
425 BasicValidator validator =
426 BasicValidatorFactory::getValidator(context, exception);
427 if(validator->isNullOrUndefined(value))
428 organization->unsetRole();
430 organization->setRole(converter->toString(value));
432 Catch(WrtDeviceApis::Commons::Exception)
434 LoggerW("trying to set incorrect value");
435 JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type mismatch");
440 JSValueRef JSContactOrganization::getLogoURI(JSContextRef context,
442 JSStringRef propertyName,
443 JSValueRef* exception)
447 ContactConverterFactory::ConverterType converter =
448 ContactConverterFactory::getConverter(context);
449 ContactOrganizationPtr organization = getPrivData(object);
450 if(!organization->getLogoURIIsSet())
451 return JSValueMakeNull(context);
453 return converter->toJSValueRef(organization->getLogoURI());
455 Catch(WrtDeviceApis::Commons::Exception)
457 LoggerW("trying to get incorrect value");
459 return JSValueMakeUndefined(context);
462 bool JSContactOrganization::setLogoURI(JSContextRef context,
464 JSStringRef propertyName,
466 JSValueRef* exception)
470 ContactOrganizationPtr organization = getPrivData(object);
471 ContactConverterFactory::ConverterType converter =
472 ContactConverterFactory::getConverter(context);
473 BasicValidator validator =
474 BasicValidatorFactory::getValidator(context, exception);
475 if(validator->isNullOrUndefined(value))
476 organization->unsetLogoURI();
478 organization->setLogoURI(converter->toString(value));
480 Catch(WrtDeviceApis::Commons::Exception)
482 LoggerW("trying to set incorrect value");
483 JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type mismatch");