Git Init
[profile/ivi/wrt-plugins-tizen.git] / src / platform / 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  *
20  *
21  * @file       IMessage.cpp
22  * @author     Pawel Misiak (p.misiak@samsung.com)
23  * @version    0.1
24  * @brief
25  */
26 #include <pcrecpp.h>
27 #include <dpl/log.h>
28 #include <Commons/Exception.h>
29 #include "IMessage.h"
30 #include "EventSendMessage.h"
31 #include "EventMessagingService.h"
32
33 using namespace std;
34
35 namespace TizenApis {
36 namespace Api {
37 namespace Messaging {
38
39 IMessage::IMessage(const MessageType msgType,
40         const string& id) :
41     m_id(id),
42     m_msgType(msgType),
43     m_readStatus(false),
44     m_validReadStatus(false),
45     m_isReadChangeStatus(false),
46     m_validisReadChangeStatus(true),    
47     m_folder(DRAFTBOX),
48     m_requestReceiver(NULL),
49     m_sendMessageEvent(NULL)
50 {
51     LogDebug("message creation, msgId=" << m_id << ", msgType=" << m_msgType);
52
53     //initialize dateTime of message
54     time_t rawtime;
55     time(&rawtime);
56     tm* local = localtime(&rawtime);
57     if (local) {
58         m_dateTime = *local;
59     } else {
60         LogError("Failed to initialize message dateTime");
61     }
62 }
63
64 IMessage::~IMessage()
65 {
66     LogDebug("destroying message, msgId=" << m_id << ", msgType=" << m_msgType);
67 }
68
69 string IMessage::getId() const
70 {
71     return m_id;
72 }
73
74 const string& IMessage::getIdRef() const
75 {
76     return m_id;
77 }
78
79 MessageType IMessage::getMessageType() const
80 {
81     return m_msgType;
82 }
83
84 struct tm IMessage::getDateTime() const
85 {
86     return m_dateTime;
87 }
88
89 string IMessage::convertId(int arg) const
90 {
91     ostringstream stream;
92     stream << arg;
93     return stream.str();
94 }
95
96 int IMessage::convertId(const string& arg) const
97 {
98     int retVal = 0;
99     istringstream(arg) >> retVal;
100     return retVal;
101 }
102
103 void IMessage::setId(const string& value)
104 {
105     m_id = value;
106 }
107
108 void IMessage::setDateTime(const tm dateTime)
109 {
110     m_dateTime = dateTime;
111 }
112
113 void IMessage::setReadStatus(bool state)
114 {
115     m_validReadStatus = false;
116     m_readStatus = state;
117 }
118
119 void IMessage::setSize(int size)
120 {
121     m_size = size;
122 }
123
124 int IMessage::getSize() const
125 {
126     return m_size;
127 }
128
129 bool IMessage::isRead() const
130 {
131     return m_readStatus;
132 }
133
134 bool IMessage::isReadStatusValid() const
135 {
136     return m_validReadStatus;
137 }
138
139 void IMessage::setReadStatusValidity(bool valid)
140 {
141     m_validReadStatus = valid;
142 }
143
144 bool IMessage::isReadChangeStatus() const
145 {
146     return m_isReadChangeStatus;
147 }
148
149 void IMessage::setisReadChangeStatus(bool state)
150 {
151     m_validisReadChangeStatus = false;
152     m_isReadChangeStatus = state;
153 }
154
155 bool IMessage::isReadChangeStatusValid() const
156 {
157     return m_validisReadChangeStatus;
158 }
159
160 void IMessage::setisReadChangeStatusValidity(bool valid)
161 {
162     m_validisReadChangeStatus = valid;
163 }
164
165 FolderType IMessage::getCurrentFolder() const
166 {
167     return m_folder;
168 }
169
170 void IMessage::setFolderType(FolderType folder)
171 {
172     m_folder = folder;
173 }
174
175 string IMessage::getCurrentUserFolder() const
176 {
177     if (m_folder != USERDEFINED_FOLDER) {
178         LogError("folder is not user folder type");
179         Throw(WrtDeviceApis::Commons::UnknownException);
180     }
181     return m_userFolderName;
182 }
183
184 void IMessage::setCurrentUserFolder(const std::string& arg)
185 {
186     m_userFolderName = arg;
187 }
188
189 bool IMessage::validatePhoneNumber(std::string& number)
190 {
191     LogDebug("testing number=" << number);
192     pcrecpp::RE re("[^0-9#\\+\\*]?");
193     re.GlobalReplace("", &number);      //remove invailde phone number. phone Number were composed only number.
194     
195     if (number.empty()) {
196         LogError("wrong phoneNumber=" << number);
197         return false;
198     }
199     LogDebug("phoneNumber=" << number);
200
201     pcrecpp::RE re2("^[+#]?[0-9]{4,22}$");
202     if (re2.FullMatch(number)) {
203         LogDebug("vaildate Number=" << number);
204         return true;
205     }
206     else
207     {
208         LogDebug("invaildate Number=" << number);
209           return false;
210     }
211     
212 }
213
214 bool IMessage::validateEmailAddr(const Recipients& addr)
215 {
216     for (size_t i = 0; i < addr.getRecipientSize(); i++) {
217         if (false == validateEmailAddr(addr.getRecipient(i))) {
218             LogError("wrong email address");
219             return false;
220         }
221     }
222     return true;
223 }
224
225 bool IMessage::validateEmailAddr(const std::string& email)
226 {
227     if (email.empty()) {
228         return false;
229     }
230     pcrecpp::RE re(
231         "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}"
232         "\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\"
233         ".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"
234         );
235     if (re.FullMatch(email)) {
236         LogDebug("emailAddress=" << email);
237         return true;
238     }
239     LogError("wrong emailAddress=" << email);
240     return false;
241 }
242
243 void IMessage::setEmitter(const EventOnSendingFailedEmitterPtr& emitter)
244 {
245     m_emitter = emitter;
246 }
247
248 EventOnSendingFailedEmitterPtr IMessage::getEmitter() const
249 {
250     return m_emitter;
251 }
252
253 void IMessage::setSendMessageEvent(const EventSendMessagePtr &event)
254 {
255     m_sendMessageEvent = event;
256 }
257
258 EventSendMessagePtr IMessage::getSendMessageEvent() const
259 {
260     return m_sendMessageEvent;
261 }
262
263 void IMessage::setMessagingServiceEvent(const EventMessagingServicePtr & event)
264 {
265         m_messagingServiceEvent = event;
266 }
267
268 EventMessagingServicePtr IMessage::getMessagingServiceEvent() const
269 {
270         return m_messagingServiceEvent;
271 }
272
273 void IMessage::setRequestReceiver(ReqReceiverMessage* reqReceiver)
274 {
275     m_requestReceiver = reqReceiver;
276 }
277
278 ReqReceiverMessage* IMessage::getRequestReceiver() const
279 {
280     return m_requestReceiver;
281 }
282
283 void IMessage::setMessageStatus( MessageStatus status)
284 {
285         m_msgStatus = status;
286 }
287
288 MessageStatus IMessage::getMessageStatus() const
289 {
290         return m_msgStatus;
291 }
292
293 }
294 }
295 }