Update change log and spec for wrt-plugins-tizen_0.4.59
[framework/web/wrt-plugins-tizen.git] / src / Contact / JSContactManager.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 5e527ae..601d06d
@@ -30,8 +30,6 @@
 #include <CommonsJavaScript/Converter.h>
 #include <CommonsJavaScript/JSUtils.h>
 #include <CommonsJavaScript/JSPendingOperation.h>
-#include <JSTizenExceptionFactory.h>
-#include <JSTizenException.h>
 #include <SecurityExceptions.h>
 #include <FilterConverter.h>
 #include "ContactFactory.h"
 #include "JSContactManagerChangeCallbackManager.h"
 #include "ContactFilterConverter.h"
 #include <ArgumentValidator.h>
-#include <JSWebAPIError.h>
+#include <JSWebAPIErrorFactory.h>
 #include <TimeTracer.h>
 #include <Logger.h>
 #include <Export.h>
+#include "ContactUtility.h"
 
 namespace DeviceAPI {
 namespace Contact {
@@ -156,7 +155,7 @@ JSValueRef JSContactManager::getAddressBooks(JSContextRef context,
                gContext = controller->getContext();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET_ADDRESS_BOOKS);
@@ -170,13 +169,13 @@ JSValueRef JSContactManager::getAddressBooks(JSContextRef context,
                if(errorObj)
                        js2ndParamIsFunction = true;
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
@@ -202,7 +201,7 @@ JSValueRef JSContactManager::getAddressBooks(JSContextRef context,
                ContactAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -223,7 +222,7 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
                static_cast<ContactManagerController*>(JSObjectGetPrivate(thisObject));
        if (!priv) {
                LoggerE("private object is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET_DEFAULT_ADDRESS_BOOK);
@@ -236,7 +235,7 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
                gContext = priv->getContext();
        } Catch(Exception) {
                LoggerE("contact manager or context is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(gContext);
@@ -249,7 +248,7 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
                contactManager->getDefaultAddressBook(dplEvent);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getDefaultAddressBookIsSet())
@@ -261,13 +260,13 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
                case ExceptionCodes::InvalidArgumentException:
                        LoggerE("Not Found error");
                        oss << "No default address book";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -279,7 +278,7 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
                resultValue = converter->toJSValueRef(defaultAddressBook);
        } Catch(Exception){
                LoggerE("Conversion error.");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -299,7 +298,7 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
                static_cast<ContactManagerController*>(JSObjectGetPrivate(thisObject));
        if (!priv) {
                LoggerE("private object is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET_UNIFIED_ADDRESS_BOOK);
@@ -312,7 +311,7 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
                gContext = priv->getContext();
        } Catch(Exception) {
                LoggerE("contact manager or context is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(gContext);
@@ -325,7 +324,7 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
                contactManager->getUnifiedAddressBook(dplEvent);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getUnifiedAddressBookIsSet())
@@ -337,13 +336,13 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
                case ExceptionCodes::InvalidArgumentException:
                        LoggerE("Not Found error");
                        oss << "No default address book";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -355,7 +354,7 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
                resultValue = converter->toJSValueRef(unifiedAddressBook);
        } Catch(Exception){
                LoggerE("Conversion error.");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -375,7 +374,7 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                static_cast<ContactManagerController*>(JSObjectGetPrivate(thisObject));
        if (!priv) {
                LoggerE("private object is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET_ADDRESS_BOOK);
@@ -388,7 +387,7 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                gContext = priv->getContext();
        } Catch(Exception) {
                LoggerE("contact manager or context is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(gContext);
@@ -398,13 +397,13 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                ArgumentValidator validator(context, argumentCount, arguments);
                addressBookId = validator.toString(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        EventContactManagerGetAddressBookPtr dplEvent(new EventContactManagerGetAddressBook());
@@ -416,7 +415,7 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                contactManager->getAddressBook(dplEvent);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getAddressBookIsSet())
@@ -427,14 +426,14 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
                        LoggerE("Not Found error : " << addressBookId);
-                       oss << "No Contact id '" << addressBookId << "'";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       oss << "No addressBookId id '" << addressBookId << "'";
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -446,7 +445,7 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                resultValue = converter->toJSValueRef(addressBook);
        } Catch(Exception){
                LoggerE("Conversion error.");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -473,18 +472,12 @@ JSValueRef JSContactManager::get(JSContextRef context,
                addressBook = controller->getObject();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET);
        TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
 
-       if (argumentCount < 1) {
-               /* 1st Argument must be string. */
-               LoggerE("1st argument must not be undefined.");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, "No Contact id 'undefined'");
-       }
-
        std::string id;
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
@@ -492,15 +485,18 @@ JSValueRef JSContactManager::get(JSContextRef context,
                ArgumentValidator validator(context, argumentCount, arguments);
                id = validator.toString(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
+       if(!ContactUtility::checkStrIsUInt(id))
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "");
+
        EventContactManagerGetPtr dplEvent(new EventContactManagerGet());
 
        dplEvent->setId(id);
@@ -510,7 +506,7 @@ JSValueRef JSContactManager::get(JSContextRef context,
                addressBook->get(dplEvent);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getPersonIsSet())
@@ -522,13 +518,13 @@ JSValueRef JSContactManager::get(JSContextRef context,
                case ExceptionCodes::InvalidArgumentException:
                        LoggerE("Not Found error : " << id);
                        oss << "No Person id '" << id << "'";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -540,7 +536,7 @@ JSValueRef JSContactManager::get(JSContextRef context,
                result = converter->toJSValueRef(person);
        } Catch(Exception) {
                LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -567,7 +563,7 @@ JSValueRef JSContactManager::update(JSContextRef context,
                addressBook = controller->getObject();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_UPDATE);
@@ -577,13 +573,13 @@ JSValueRef JSContactManager::update(JSContextRef context,
                ArgumentValidator validator(context, argumentCount, arguments);
                validator.toObject(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        PersonPtr person(NULL);
@@ -595,7 +591,7 @@ JSValueRef JSContactManager::update(JSContextRef context,
                person = converter->toPerson(arguments[0]);
        } Catch(Exception) {
                LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "1st argument is not a 'Contact object'");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "1st argument is not a 'Contact object'");
        }
 
        EventContactManagerUpdatePtr dplEvent(new EventContactManagerUpdate());
@@ -607,7 +603,7 @@ JSValueRef JSContactManager::update(JSContextRef context,
                addressBook->update(dplEvent);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult())
@@ -617,14 +613,14 @@ JSValueRef JSContactManager::update(JSContextRef context,
                {
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
-                       oss << "No Contact id '" << person->getId() << "'";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       oss << "No id '" << person->getId() << "'";
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -658,8 +654,8 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
                gContext = controller->getContext();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception,
-                               JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception,
+                               JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_UPDATE_BATCH);
@@ -677,13 +673,13 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
                if(errorObj)
                        js3rdParamIsFunction = true;
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
@@ -703,8 +699,8 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
                dplEvent->setPersons(converter->toPersonArray(arguments[0]));
        } Catch(ConversionException) {
                LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception,
-                               JSTizenException::TYPE_MISMATCH_ERROR, "3rd argument must be a 'function' or a 'null'");
+               return JSWebAPIErrorFactory::postException(context, exception,
+                               JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "3rd argument must be a 'function' or a 'null'");
        }
 
        // set event handler's data
@@ -719,8 +715,8 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
                ContactAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception,
-                               JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception,
+                               JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -748,7 +744,7 @@ JSValueRef JSContactManager::remove(JSContextRef context,
                addressBook = controller->getObject();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_REMOVE);
@@ -761,14 +757,16 @@ JSValueRef JSContactManager::remove(JSContextRef context,
                ArgumentValidator validator(context, argumentCount, arguments);
                personId = validator.toString(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
+       if(!ContactUtility::checkStrIsUInt(personId))
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "");
 
        EventContactManagerRemovePtr dplEvent(new EventContactManagerRemove());
 
@@ -779,8 +777,8 @@ JSValueRef JSContactManager::remove(JSContextRef context,
                addressBook->remove(dplEvent);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception,
-                               JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception,
+                               JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult())
@@ -791,17 +789,17 @@ JSValueRef JSContactManager::remove(JSContextRef context,
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
                        LoggerE("Not Found error : " << personId);
-                       oss << "No Contact id '" << personId << "'";
-                       return JSTizenExceptionFactory::postException(context, exception,
-                                       JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       oss << "No id '" << personId << "'";
+                       return JSWebAPIErrorFactory::postException(context, exception,
+                                       JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception,
-                                       JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception,
+                                       JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception,
-                                       JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception,
+                                       JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -835,7 +833,7 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
                gContext = controller->getContext();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_REMOVE_BATCH);
@@ -853,13 +851,13 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
                if(errorObj)
                        js3rdParamIsFunction = true;
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
@@ -879,7 +877,7 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
                dplEvent->setPersonIds(converter->toStringArray(arguments[0]));
        } Catch(ConversionException) {
                LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "3rd argument must be an array of 'Contact id'");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "3rd argument must be an array of 'Contact id'");
        }
 
        // set event handler's data
@@ -894,7 +892,7 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
                ContactAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -928,7 +926,7 @@ JSValueRef JSContactManager::find(JSContextRef context,
                gContext = controller->getContext();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_FIND);
@@ -951,13 +949,13 @@ JSValueRef JSContactManager::find(JSContextRef context,
                        js4thParamIsObject = true;
 
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
@@ -974,19 +972,26 @@ JSValueRef JSContactManager::find(JSContextRef context,
 
        EventContactManagerFindPtr dplEvent(new EventContactManagerFind());
        Try {
-               if (js3rdParamIsObject)
-                       dplEvent->setFilter(filterConverter->toFilter(arguments[2]));
+               if (js3rdParamIsObject){
+                       FilterPtr filter = filterConverter->toFilter(arguments[2]);
+                       if(filter)
+                               dplEvent->setFilter(filter);
+                       else
+                               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "3rd argument must be an Correct 'Filter object' or 'null'");
+               }
        } Catch(Exception) {
                LoggerE("Error on 3rd parameter conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "3rd argument must be an 'Filter object' or 'null'");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "3rd argument must be an 'Filter object' or 'null'");
        }
 
        Try {
-               if (js4thParamIsObject)
-                       dplEvent->setSortMode(filterConverter->toSortMode(arguments[3]));
+               if (js4thParamIsObject){
+                       SortModePtr sortMode = filterConverter->toSortMode(arguments[3]);
+                       dplEvent->setSortMode(sortMode);
+               }
        } Catch(Exception) {
                LoggerE("Error on 4th parameter conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "4th argument must be an 'SortMode object' or 'null'");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "4th argument must be an 'SortMode object' or 'null'");
        }
 
        // set event handler's data
@@ -1001,7 +1006,7 @@ JSValueRef JSContactManager::find(JSContextRef context,
                ContactAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -1033,7 +1038,7 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                gContext = controller->getContext();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_ADD_CHANGE_LISTENER);
@@ -1049,13 +1054,13 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                        js2ndParamIsFunction = true;
 
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
@@ -1088,11 +1093,11 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                }
 
                if (onpersonsadded == NULL && onpersonsupdated == NULL && onpersonsdeleted == NULL)
-                       ThrowMsg(ConversionException, "2nd argument must have at least one function");
+                       ThrowMsg(ConversionException, "invalid 2nd argument");
 
        } Catch(ConversionException) {
                LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
        }
 
        JSContactManagerChangeCallbackManagerPtr callbackManager = JSContactManagerChangeCallbackManager::createObject(gContext);
@@ -1117,7 +1122,7 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                addressBook->addChangeListener(dplEvent);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getIdIsSet())
@@ -1126,10 +1131,10 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                {
                case ExceptionCodes::InvalidArgumentException:
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -1145,7 +1150,7 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                result = converter->toJSValueRefLong(watchId);
        } Catch(Exception) {
                LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return result;
@@ -1173,7 +1178,7 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
                gContext = controller->getContext();
        } Catch(Exception) {
                LoggerE("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_REMOVE_CHANGE_LISTENER);
@@ -1182,18 +1187,23 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
 
        long watchId = 0;
+       std::string id;
+
        try {
                ArgumentValidator validator(context, argumentCount, arguments);
                watchId = validator.toLong(0, false, 0);
+               id = validator.toString(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
+       if(!ContactUtility::checkStrIsUInt(id))
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "");
 
        EventContactManagerRemoveChangeListenerPtr dplEvent(new EventContactManagerRemoveChangeListener());
 
@@ -1204,7 +1214,7 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
                addressBook->removeChangeListener(dplEvent);
        } Catch(Exception) {
                LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        PersonsChangeListenerCancellerPtr canceller = PersonsChangeListenerCancellerPtr(new PersonsChangeListenerCanceller(gContext, thisObject, watchId));
@@ -1217,10 +1227,10 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
                {
                case ExceptionCodes::InvalidArgumentException:
                case ExceptionCodes::NotFoundException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, "Watch id not found");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, "Watch id not found");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }