2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file ReqReceiverMessage.cpp
18 * @author Pawel Misiak (p.misiak@samsung.com)
23 #include "ReqReceiverMessage.h"
25 #include <dpl/singleton_impl.h>
26 #include <Commons/Exception.h>
27 #include "IMessaging.h"
31 using namespace WrtDeviceApis;
32 using namespace WrtDeviceApis::Commons;
34 IMPLEMENT_SINGLETON(WrtDeviceApis::Messaging::Api::ReqReceiverMessage)
36 namespace WrtDeviceApis {
40 ReqReceiverMessage::ReqReceiverMessage() :
41 EventSendMessageReqReceiver(Commons::ThreadEnum::MESSAGING_THREAD),
42 EventUpdateMessageReqReceiver(Commons::ThreadEnum::MESSAGING_THREAD),
43 EventDeleteMessageReqReceiver(Commons::ThreadEnum::MESSAGING_THREAD),
44 EventFindMessageReqReceiver(Commons::ThreadEnum::MESSAGING_THREAD)
46 LogDebug("create receiver for messaging");
49 ReqReceiverMessage::~ReqReceiverMessage()
53 void ReqReceiverMessage::sendMessage(const EventSendMessagePtr& event)
56 EventSendMessageReqReceiver::PostRequest(event);
59 void ReqReceiverMessage::updateMessage(const EventUpdateMessagePtr& event)
62 EventUpdateMessageReqReceiver::PostRequest(event);
65 void ReqReceiverMessage::deleteMessage(const EventDeleteMessagePtr& event)
68 EventDeleteMessageReqReceiver::PostRequest(event);
71 void ReqReceiverMessage::findMessage(const EventFindMessagePtr& event)
74 EventFindMessageReqReceiver::PostRequest(event);
77 void ReqReceiverMessage::OnRequestReceived(const EventSendMessagePtr& event)
82 IMessagePtr msg = event->getMessage();
83 //this prevents calling BONDI, WAC2.0 callback immidiately after leaving this function
84 //callback will be called after receving Commons callback.
85 msg->setRequestReceiver(this);
86 msg->setSendMessageEvent(event);
87 if (!event->checkCancelled()) {
88 event->setCancelAllowed(false);
89 event->switchToManualAnswer();
92 event->setCancelAllowed(true);
95 Catch(Commons::PlatformException) {
96 event->setExceptionCode(Commons::ExceptionCodes::UnknownException);
97 Commons::EventRequestReceiver< EventSendMessage >::ManualAnswer(event);
101 void ReqReceiverMessage::OnRequestReceived(const EventUpdateMessagePtr& event)
106 IMessagePtr msg = event->msg;
107 if (!event->checkCancelled()) {
108 event->setCancelAllowed(false);
111 event->setCancelAllowed(true);
114 Catch(Commons::PlatformException) {
115 LogError("Commons exception");
116 event->setExceptionCode(Commons::ExceptionCodes::UnknownException);
120 void ReqReceiverMessage::OnRequestReceived(const EventDeleteMessagePtr& event)
125 IMessagePtr msg = event->msg;
128 Catch(Commons::PlatformException) {
129 LogError("Commons exception");
130 event->setExceptionCode(Commons::ExceptionCodes::UnknownException);
134 void ReqReceiverMessage::OnRequestReceived(const EventFindMessagePtr& event)
139 if (!event->checkCancelled()) {
140 vector<IMessagePtr> msgs;
141 for (size_t i = 0; i < event->folderTypes.size(); i++) {
142 vector<IMessagePtr> tmp =
143 IMessaging::getInstance().findMessages(
145 event->folderTypes[i],
146 event->messageFilter);
147 msgs.insert(msgs.end(), tmp.begin(), tmp.end());
151 //this is only searching so can be cancelled at any time
152 event->setCancelAllowed(true);
154 Catch(Commons::PlatformException) {
155 LogError("Commons exception");
156 event->setExceptionCode(Commons::ExceptionCodes::UnknownException);