wrt-plugins-tizen_0.4.23
[framework/web/wrt-plugins-tizen.git] / src / Messaging / ConverterMessage.cpp
index 02e0e0f..1818080 100644 (file)
@@ -31,6 +31,9 @@
 #include "JSConversation.h"
 #include "JSMessageFolder.h"
 
+#include <JSWebAPIError.h>
+#include <Logger.h>
+
 #if 0 // MESSAGING ATTACHMENT IS BLOCKED
 #include <JSFile.h>
 #endif
@@ -50,9 +53,9 @@ namespace Messaging {
 
 MessageFunctions ConverterMessage::m_callbackNames[MESSAGING_MULTI_FUNTION_MAX]
 {
-       {"messagesadded", "messagesupdated", "messagesremoved"},
-       {"conversationsadded", "conversationsupdated", "conversationsremoved"},
-       {"foldersadded", "foldersupdated", "foldersremoved"}
+    {"messagesadded", "messagesupdated", "messagesremoved"},
+    {"conversationsadded", "conversationsupdated", "conversationsremoved"},
+    {"foldersadded", "foldersupdated", "foldersremoved"}
 };
 
 ConverterMessage::ConverterMessage(JSContextRef context) :
@@ -71,7 +74,7 @@ JSContextRef ConverterMessage::toJSGlobalContext(JSObjectRef arg)
         static_cast<WrtDeviceApis::CommonsJavaScript::PrivateObjectT<void>::Type*>(JSObjectGetPrivate(
                                                               arg));
     if (!priv) {
-        LogError("Private object not initialized");
+        LoggerE("Private object not initialized");
         ThrowMsg(WrtDeviceApis::Commons::NullPointerException,
                  "Private object not initialized");
     }
@@ -118,7 +121,7 @@ JSValueRef ConverterMessage::toJSValueRef(const IMessagePtr& arg)
         return JSMessage::createJSObject(m_context, arg);
 
     default:
-        LogError("unknown type");
+        LoggerE("unknown type");
         Throw(WrtDeviceApis::Commons::ConversionException);
     }
 }
@@ -134,7 +137,7 @@ JSValueRef ConverterMessage::toJSValueRef(const IMessagePtr& arg,
         return JSMessage::createJSObject(m_context, arg, listener);
 
     default:
-        LogError("unknown type");
+        LoggerE("unknown type");
         Throw(WrtDeviceApis::Commons::ConversionException);
     }
 }
@@ -154,9 +157,9 @@ JSValueRef ConverterMessage::toJSValueRef(const std::vector<IConversationPtr>& c
 {
     vector<JSValueRef> conversationJS;
 
-       for (size_t i = 0; i < conversations.size(); i++)
-       {
-               JSValueRef value = JSConversation::createJSObject(m_context, conversations[i]);
+    for (size_t i = 0; i < conversations.size(); i++)
+    {
+        JSValueRef value = JSConversation::createJSObject(m_context, conversations[i]);
         conversationJS.push_back(value);
     }
 
@@ -167,9 +170,9 @@ JSValueRef ConverterMessage::toJSValueRef(const std::vector<IMessageFolderPtr>&
 {
     vector<JSValueRef> messagefolderJS;
 
-       for (size_t i = 0; i < messagefolders.size(); i++)
-       {
-               JSValueRef value = JSMessageFolder::createJSObject(m_context, messagefolders[i]);
+    for (size_t i = 0; i < messagefolders.size(); i++)
+    {
+        JSValueRef value = JSMessageFolder::createJSObject(m_context, messagefolders[i]);
         messagefolderJS.push_back(value);
     }
 
@@ -205,19 +208,19 @@ JSValueRef ConverterMessage::keyToJSValue(JSValueRef value,
     JSValueRef retVal = NULL;
 
     if (NULL == value) {
-        LogError("jsValue null");
+        LoggerE("jsValue null");
         Throw(WrtDeviceApis::Commons::ConversionException);
     }
     JSObjectRef argObj = JSValueToObject(m_context, value, NULL);
     if (NULL == argObj) {
-        LogError("conversion to jsobject fail");
+        LoggerE("conversion to jsobject fail");
         Throw(WrtDeviceApis::Commons::ConversionException);
     }
     const JSStringRef keyJSStr = JSStringCreateWithUTF8CString(key.c_str());
     retVal = JSObjectGetProperty(m_context, argObj, keyJSStr, NULL);
     JSStringRelease(keyJSStr);
     if (NULL == retVal) {
-        LogWarning("key \"" << key << "\" not found in JSValue map");
+        LoggerW("key \"" << key << "\" not found in JSValue map");
     }
     // return NULL if no key in map
     return retVal;
@@ -230,9 +233,9 @@ IMessagePtr ConverterMessage::toIMessage(JSValueRef arg)
 
 IMessagePtr ConverterMessage::toIMessage(JSObjectRef arg)
 {
-    LogDebug("message object=" << arg);
+    LoggerD("message object=" << arg);
     if (!arg) {
-        LogError("Object is null");
+        LoggerE("Object is null");
         ThrowMsg(WrtDeviceApis::Commons::NullPointerException,
                  "Private object not initialized");
     }
@@ -241,13 +244,13 @@ IMessagePtr ConverterMessage::toIMessage(JSObjectRef arg)
     JSMessagePrivateObject* priv =
         static_cast<JSMessagePrivateObject*>(JSObjectGetPrivate(arg));
     if (!priv) {
-        LogError("Private object not initialized");
+        LoggerE("Private object not initialized");
         ThrowMsg(WrtDeviceApis::Commons::NullPointerException,
                  "Private object not initialized");
     }
     retVal = priv->getObject();
     if (!retVal) {
-        LogError("Message private object not initialized");
+        LoggerE("Message private object not initialized");
         ThrowMsg(WrtDeviceApis::Commons::NullPointerException,
                  "Private object not initialized");
     }
@@ -256,66 +259,66 @@ IMessagePtr ConverterMessage::toIMessage(JSObjectRef arg)
 
 IAttachmentPtr ConverterMessage::toIAttachment(JSValueRef arg)
 {
-       return toIAttachment(toJSObjectRef(arg));
+    return toIAttachment(toJSObjectRef(arg));
 }
 
 IAttachmentPtr ConverterMessage::toIAttachment(JSObjectRef arg)
 {
-       if (!arg)
-       {
-               LogError("Object is Null");
-               ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object not initialized");
-       }
+    if (!arg)
+    {
+        LoggerE("Object is Null");
+        ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object not initialized");
+    }
 
-       IAttachmentPtr retVal;
-       JSMessageAttachmentPrivate* priv =
+    IAttachmentPtr retVal;
+    JSMessageAttachmentPrivate* priv =
         static_cast<JSMessageAttachmentPrivate*>(JSObjectGetPrivate(arg));
 
-       if (!priv) {
-        LogError("Private object not initialized");
+    if (!priv) {
+        LoggerE("Private object not initialized");
         ThrowMsg(WrtDeviceApis::Commons::NullPointerException,
                  "Private object not initialized");
-       }
+        }
 
-       retVal = priv->getObject();
-       if (!retVal) {
-        LogError("Message private object not initialized");
+    retVal = priv->getObject();
+        if (!retVal) {
+        LoggerE("Message private object not initialized");
         ThrowMsg(WrtDeviceApis::Commons::NullPointerException,
                  "Private object not initialized");
-       }
-       return retVal;
+        }
+        return retVal;
 }
 
 IMessageFolderPtr ConverterMessage::toIMessageFolder(JSValueRef arg)
 {
-       return toIMessageFolder(toJSObjectRef(arg));
+    return toIMessageFolder(toJSObjectRef(arg));
 }
 
 IMessageFolderPtr ConverterMessage::toIMessageFolder(JSObjectRef arg)
 {
-       if (!arg)
-       {
-               LogError("Object is Null");
-               ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object not initialized");
-       }
+    if (!arg)
+    {
+        LoggerE("Object is Null");
+        ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object not initialized");
+    }
 
-       IMessageFolderPtr retVal;
-       JSMessageFolderPriv* priv =
+    IMessageFolderPtr retVal;
+    JSMessageFolderPriv* priv =
         static_cast<JSMessageFolderPriv*>(JSObjectGetPrivate(arg));
 
-       if (!priv) {
-        LogError("Private object not initialized");
+    if (!priv) {
+        LoggerE("Private object not initialized");
         ThrowMsg(WrtDeviceApis::Commons::NullPointerException,
                  "Private object not initialized");
-       }
+        }
 
-       retVal = priv->getObject();
-       if (!retVal) {
-        LogError("Message private object not initialized");
+    retVal = priv->getObject();
+        if (!retVal) {
+        LoggerE("Message private object not initialized");
         ThrowMsg(WrtDeviceApis::Commons::NullPointerException,
                  "Private object not initialized");
-       }
-       return retVal;
+        }
+        return retVal;
 }
 
 Recipients ConverterMessage::toRecipients(JSValueRef arg)
@@ -336,50 +339,60 @@ Recipients ConverterMessage::toRecipients(JSValueRef arg)
     return retVal;
 }
 
-OnMessagesChanged ConverterMessage::toMessageMultifunctions(JSValueRef argument)
+OnMessagesChanged ConverterMessage::toMessageMultifunctions(JSValueRef argument, int multiFuntionType)
 {
+       LoggerD("Enter");
+
+       LoggerD("multiFuntionType : " << multiFuntionType);
+
        OnMessagesChanged result;
        Validator validator(m_context);
        JSObjectRef objectCallbacks = toJSObjectRef(argument);
-       std::string callbackName = toString(argument);
-       int index = 0;
 
-       LogDebug("Enter\n");
+       ScopedJSStringRef propNameAdded(toJSStringRef(m_callbackNames[multiFuntionType].addedFunction));
+       ScopedJSStringRef propNameUpdated(toJSStringRef(m_callbackNames[multiFuntionType].updatedFunction));
+       ScopedJSStringRef propNameRemoved(toJSStringRef(m_callbackNames[multiFuntionType].removedFunction));
 
-       for (index = 0; index < MESSAGING_MULTI_FUNTION_MAX; index++)
+       if(JSObjectHasProperty(m_context, objectCallbacks, propNameAdded.get()))
        {
-               ScopedJSStringRef propName(toJSStringRef(m_callbackNames[index].addedFunction));
-
-               if (JSObjectHasProperty(m_context, objectCallbacks, propName.get()))
-               {
-                       LogDebug("Callback name :" << m_callbackNames[index].addedFunction << " "
-                       << m_callbackNames[index].updatedFunction << " " << m_callbackNames[index].removedFunction);
-
-                       result.messagesAdded = JSUtils::getJSPropertyOrUndefined(m_context, objectCallbacks, m_callbackNames[index].addedFunction);
-                       result.messagesUpdated = JSUtils::getJSPropertyOrUndefined(m_context, objectCallbacks, m_callbackNames[index].updatedFunction);
-                       result.messagesRemoved = JSUtils::getJSPropertyOrUndefined(m_context, objectCallbacks, m_callbackNames[index].removedFunction);
-                       break;
-               }
-
+               LoggerD("added exist");
+               result.messagesAdded = JSUtils::getJSPropertyOrUndefined(m_context, objectCallbacks, m_callbackNames[multiFuntionType].addedFunction);
+               if (validator.isNullOrUndefined(result.messagesAdded))
+           result.messagesAdded = NULL;
+       else if (!validator.isCallback(result.messagesAdded)) {
+                       LoggerD("is not Callback");
+           ThrowMsg(ConversionException, "1nd argument's onsuccess attribute is not a 'function'");
+       }
        }
-
-       if(result.messagesAdded == NULL || result.messagesUpdated == NULL || result.messagesRemoved == NULL)
+       if(JSObjectHasProperty(m_context, objectCallbacks, propNameUpdated.get()))
        {
-               LogError("OnMessagesChanged is not set");
-               Throw(WrtDeviceApis::Commons::ConversionException);
+               LoggerD("updated exist");
+               result.messagesUpdated = JSUtils::getJSPropertyOrUndefined(m_context, objectCallbacks, m_callbackNames[multiFuntionType].updatedFunction);
+               if (validator.isNullOrUndefined(result.messagesUpdated))
+           result.messagesUpdated = NULL;
+       else if (!validator.isCallback(result.messagesUpdated)) {
+                       LoggerD("is not Callback");
+           ThrowMsg(ConversionException, "2nd argument's onsuccess attribute is not a 'function'");
+       }
+       }
+       if(JSObjectHasProperty(m_context, objectCallbacks, propNameRemoved.get()))
+       {
+               LoggerD("removed exist");
+               result.messagesRemoved = JSUtils::getJSPropertyOrUndefined(m_context, objectCallbacks, m_callbackNames[multiFuntionType].removedFunction);
+               if (validator.isNullOrUndefined(result.messagesRemoved))
+           result.messagesRemoved = NULL;
+       else if (!validator.isCallback(result.messagesRemoved)) {
+                       LoggerD("is not Callback");
+           ThrowMsg(ConversionException, "3nd argument's onsuccess attribute is not a 'function'");
+       }
        }
 
-       result.functionIndex = index;
-
-       if ((!validator.isNullOrUndefined(result.messagesAdded) && !validator.isCallback(result.messagesAdded)) ||
-       (!validator.isNullOrUndefined(result.messagesUpdated) && !validator.isCallback(result.messagesUpdated)) ||
-       (!validator.isNullOrUndefined(result.messagesRemoved) && !validator.isCallback(result.messagesRemoved)))
+       if(result.messagesAdded != NULL || result.messagesUpdated != NULL || result.messagesRemoved != NULL)
        {
-               LogError("java script call back set error");
-               Throw(WrtDeviceApis::Commons::InvalidArgumentException);
+           result.functionIndex = multiFuntionType;
        }
 
-       return result;
+    return result;
 }
 
 
@@ -409,100 +422,124 @@ FolderType ConverterMessage::toFolderType(const JSValueRef& arg)
 
 MessageType ConverterMessage::toMessageType(JSValueRef arg)
 {
-        return toMessageType(toJSObjectRef(arg));
+     return toMessageType(toJSObjectRef(arg));
 }
 
 MessageType ConverterMessage::toMessageType(JSObjectRef arg)
 {
     // convert JSvalue to message type enum
-       std::string strMsgType = toString(arg);
-       LogDebug("Messasge Type : " << strMsgType);
+    std::string strMsgType = toString(arg);
+    LoggerD("Messasge Type : " << strMsgType);
 
-       if ( strMsgType.compare("messaging.sms") == 0 ) 
-       {
-               return SMS;
-       }
-       else if ( strMsgType.compare("messaging.mms") == 0 ) 
-       {
-               return MMS;
-       }
-       else if ( strMsgType.compare("messaging.email") == 0 )
-       {
-               return EMAIL;
-       }
-       else
-       {
-               ThrowMsg(WrtDeviceApis::Commons::ConversionException, "message type not supported");
-       }
+    if ( strMsgType.compare("messaging.sms") == 0 )
+    {
+        return SMS;
+    }
+    else if ( strMsgType.compare("messaging.mms") == 0 )
+    {
+        return MMS;
+    }
+    else if ( strMsgType.compare("messaging.email") == 0 )
+    {
+        return EMAIL;
+    }
+    else
+    {
+        ThrowMsg(WrtDeviceApis::Commons::ConversionException, "message type not supported");
+    }
 
 }
 
 std::string ConverterMessage::toMessageType( long msgtype )
 {
-       LogDebug("Messasge Type : " << msgtype);
+    LoggerD("Messasge Type : " << msgtype);
+
+    switch (msgtype)
+    {
+        case SMS:
+            return "messaging.sms";
+        case MMS:
+            return "messaging.mms";
+        case EMAIL:
+            return "messaging.email";
+        default :
+            ThrowMsg(WrtDeviceApis::Commons::ConversionException, "message type not supported");
+    }
+}
+
+MessageType ConverterMessage::toMessageType(std::string arg)
+{
+    LoggerD("Messasge Type : " << arg);
+
+    if ( arg.compare("messaging.sms") == 0 )
+    {
+        return SMS;
+    }
+    else if ( arg.compare("messaging.mms") == 0 )
+    {
+        return MMS;
+    }
+    else if ( arg.compare("messaging.email") == 0 )
+    {
+        return EMAIL;
+    }
+    else
+    {
+        std::string message = "Message type " + arg + " not supported.";
+        throw DeviceAPI::Common::TypeMismatchException(message.c_str());
+    }
 
-       switch (msgtype)
-       {
-               case SMS:
-                       return "messaging.sms";
-               case MMS:
-                       return "messaging.mms";
-               case EMAIL:
-                       return "messaging.email";
-               default :
-                       ThrowMsg(WrtDeviceApis::Commons::ConversionException, "message type not supported");
-       }
 }
 
 std::string ConverterMessage::toMessageStatusType( long msgstatus )
 {
-       LogDebug("Messasge Status : " << msgstatus);
-
-       switch (msgstatus)
-       {
-               case MESSAGE_STATUS_SENT:
-                       return "SENT";
-               case MESSAGE_STATUS_SENDING:
-                       return "SENDING";
-               case MESSAGE_STATUS_FAILED:
-                       return "FAILED";
-               case MESSAGE_STATUS_DRAFT:
-                       return "DRAFT";
-               case MESSAGE_STATUS_CREATED:
-               case MESSAGE_STATUS_LOADED:
-                       return "";
-               default :
-                       ThrowMsg(WrtDeviceApis::Commons::ConversionException, "message status not supported");
-       }
+    LoggerD("Messasge Status : " << msgstatus);
+
+    switch (msgstatus)
+    {
+        case MESSAGE_STATUS_SENT:
+            return "SENT";
+        case MESSAGE_STATUS_SENDING:
+            return "SENDING";
+        case MESSAGE_STATUS_FAILED:
+            return "FAILED";
+        case MESSAGE_STATUS_DRAFT:
+            return "DRAFT";
+        case MESSAGE_STATUS_CREATED:
+        case MESSAGE_STATUS_LOADED:
+            return "";
+        default :
+            ThrowMsg(WrtDeviceApis::Commons::ConversionException, "message status not supported");
+    }
 }
 
 std::string ConverterMessage::convertIntToString( int msgInt )
 {
-       LogDebug("input int : " << msgInt);
-       std::stringstream stream;
-       stream << msgInt;
-       return stream.str();
+    LoggerD("input int : " << msgInt);
+    std::stringstream stream;
+    stream << msgInt;
+    return stream.str();
 }
 
 IConversationPtr ConverterMessage::toConversation(const JSValueRef& arg)
 {
-       return JSConversation::getConversation(m_context, arg);
+    return JSConversation::getConversation(m_context, arg);
 }
 
 std::vector<IConversationPtr> ConverterMessage::toVectorOfConversation(const JSValueRef& arg)
 {
-       std::vector<IConversationPtr> result;
+    std::vector<IConversationPtr> result;
 
-       JSObjectRef jsObject = toJSObjectRef(arg);
+    JSObjectRef jsObject = toJSObjectRef(arg);
 
-       if(     JSGetArrayLength(m_context, jsObject) == 0)
-       {
-        LogError("this is empty conversation");
-        Throw(WrtDeviceApis::Commons::ConversionException);    
-       }
+    if(    JSGetArrayLength(m_context, jsObject) == 0)
+    {
+        LoggerE("this is empty conversation");
+        Throw(WrtDeviceApis::Commons::ConversionException);
+    }
 
-       for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i)
-       {
+    for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i)
+    {
         JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
         result.push_back(toConversation(element));
     }
@@ -521,7 +558,7 @@ AddressType ConverterMessage::toAddressType(JSValueRef arg)
     } else if ("bcc" == addressType) {
         return BCC_ADDRESS;
     } else {
-        LogError("unknown address type");
+        LoggerE("unknown address type");
         Throw(WrtDeviceApis::Commons::InvalidArgumentException);
     }
 }
@@ -579,7 +616,7 @@ JSValueRef ConverterMessage::toFunction(const JSValueRef& arg)
     if (Validator(m_context).isCallback(arg)) {
         return arg;
     } else if (JSValueIsNull(m_context, 
-               arg) || JSValueIsUndefined(m_context, arg)) {
+        arg) || JSValueIsUndefined(m_context, arg)) {
         ThrowMsg(InvalidArgumentException, "JS null passed as function.");
     }
     ThrowMsg(ConversionException, "Not a function nor JS null.");