a78c075baa0a2633eb1ee9a190181d8afa826a47
[framework/web/wrt-plugins-common.git] / src / modules / API / Messaging / IMessage.cpp
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 /**
17  *
18  *
19  * @file       IMessage.cpp
20  * @author     Pawel Misiak (p.misiak@samsung.com)
21  * @version    0.1
22  * @brief
23  */
24 #include <pcrecpp.h>
25 #include <dpl/log/log.h>
26 #include <Commons/Exception.h>
27 #include "IMessage.h"
28 #include "EventSendMessage.h"
29
30 using namespace std;
31
32 namespace WrtDeviceApis {
33 namespace Messaging {
34 namespace Api {
35 IMessage::IMessage(const MessageType msgType,
36         const string& id) :
37     m_id(id),
38     m_msgType(msgType),
39     m_readStatus(false),
40     m_validReadStatus(false),
41     m_folder(DRAFTBOX),
42     m_requestReceiver(NULL),
43     m_sendMessageEvent(NULL)
44 {
45     LogDebug("message creation, msgId=" << m_id << ", msgType=" << m_msgType);
46
47     //initialize dateTime of message
48     time_t rawtime;
49     time(&rawtime);
50     tm* local = localtime(&rawtime);
51     if (local) {
52         m_dateTime = *local;
53     } else {
54         LogError("Failed to initialize message dateTime");
55     }
56 }
57
58 IMessage::~IMessage()
59 {
60     LogDebug("destroying message, msgId=" << m_id << ", msgType=" << m_msgType);
61 }
62
63 string IMessage::getId() const
64 {
65     return m_id;
66 }
67
68 const string& IMessage::getIdRef() const
69 {
70     return m_id;
71 }
72
73 MessageType IMessage::getMessageType() const
74 {
75     return m_msgType;
76 }
77
78 struct tm IMessage::getDateTime() const
79 {
80     return m_dateTime;
81 }
82
83 string IMessage::convertId(int arg) const
84 {
85     ostringstream stream;
86     stream << arg;
87     return stream.str();
88 }
89
90 int IMessage::convertId(const string& arg) const
91 {
92     int retVal = 0;
93     istringstream(arg) >> retVal;
94     return retVal;
95 }
96
97 void IMessage::setId(const string& value)
98 {
99     m_id = value;
100 }
101
102 void IMessage::setDateTime(const tm dateTime)
103 {
104     m_dateTime = dateTime;
105 }
106
107 void IMessage::setReadStatus(bool state)
108 {
109     m_validReadStatus = false;
110     m_readStatus = state;
111 }
112
113 void IMessage::setSize(int size)
114 {
115     m_size = size;
116 }
117
118 int IMessage::getSize() const
119 {
120     return m_size;
121 }
122
123 bool IMessage::isRead() const
124 {
125     return m_readStatus;
126 }
127
128 bool IMessage::isReadStatusValid() const
129 {
130     return m_validReadStatus;
131 }
132
133 void IMessage::setReadStatusValidity(bool valid)
134 {
135     m_validReadStatus = valid;
136 }
137
138 FolderType IMessage::getCurrentFolder() const
139 {
140     return m_folder;
141 }
142
143 void IMessage::setFolderType(FolderType folder)
144 {
145     m_folder = folder;
146 }
147
148 string IMessage::getCurrentUserFolder() const
149 {
150     if (m_folder != USERDEFINED_FOLDER) {
151         LogError("folder is not user folder type");
152         Throw(Commons::UnknownException);
153     }
154     return m_userFolderName;
155 }
156
157 void IMessage::setCurrentUserFolder(const std::string& arg)
158 {
159     m_userFolderName = arg;
160 }
161
162 bool IMessage::validatePhoneNumber(std::string& number)
163 {
164     LogDebug("testing number=" << number);
165     pcrecpp::RE re("[^0-9#\\+\\*]?");
166     re.GlobalReplace("", &number);
167     if (number.empty()) {
168         LogError("wrong phoneNumber=" << number);
169         return false;
170     }
171     LogDebug("phoneNumber=" << number);
172
173     return true;
174 }
175
176 bool IMessage::validateEmailAddr(const Recipients& addr)
177 {
178     for (size_t i = 0; i < addr.getRecipientSize(); i++) {
179         if (false == validateEmailAddr(addr.getRecipient(i))) {
180             LogError("wrong email address");
181             return false;
182         }
183     }
184     return true;
185 }
186
187 bool IMessage::validateEmailAddr(const std::string& email)
188 {
189     if (email.empty()) {
190         return false;
191     }
192     pcrecpp::RE re(
193         "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}"
194         "\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\"
195         ".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"
196         );
197     if (re.FullMatch(email)) {
198         LogDebug("emailAddress=" << email);
199         return true;
200     }
201     LogError("wrong emailAddress=" << email);
202     return false;
203 }
204
205 void IMessage::setEmitter(const EventOnSendingFailedEmitterPtr& emitter)
206 {
207     m_emitter = emitter;
208 }
209
210 EventOnSendingFailedEmitterPtr IMessage::getEmitter() const
211 {
212     return m_emitter;
213 }
214
215 void IMessage::setSendMessageEvent(const EventSendMessagePtr &event)
216 {
217     m_sendMessageEvent = event;
218 }
219
220 EventSendMessagePtr IMessage::getSendMessageEvent() const
221 {
222     return m_sendMessageEvent;
223 }
224
225 void IMessage::setRequestReceiver(ReqReceiverMessage* reqReceiver)
226 {
227     m_requestReceiver = reqReceiver;
228 }
229
230 ReqReceiverMessage* IMessage::getRequestReceiver() const
231 {
232     return m_requestReceiver;
233 }
234 }}
235 }