694d5dc382b3ffcb1c2d06c5cca0f6d16083d11d
[profile/ivi/wrt-plugins-tizen.git] / src / platform / API / Messaging / MessageFilterValidator.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  * MessageFilterValidator.cpp
18  *
19  *  Created on: 2011. 10. 31.
20  *      Author: sangtai
21  */
22
23 #include "MessageFilterValidator.h"
24 #include "MessageFilterValidatorFactory.h"
25
26 #include <dpl/log/log.h>
27 #include "log.h"
28
29 using namespace WrtDeviceApis::Commons;
30 using namespace WrtDeviceApis::CommonsJavaScript;
31 using namespace TizenApis::Api::Tizen;
32
33 namespace TizenApis {
34         namespace Platform {
35                 namespace Messaging {
36
37                 MessageFilterValidator::MessageFilterValidator(PropertyStructArray properties)
38                                 :FilterValidator(properties){
39                         m_isTypeSetted = false;
40
41                         initMatchFlagVectors();
42                         initAttributeAndMatchFlagsMap();
43                 }
44
45                 MessageFilterValidator::~MessageFilterValidator(){
46                 }
47
48                 void MessageFilterValidator::initMatchFlagVectors(){
49                         m_typeMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
50
51                         m_idMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
52
53                         m_folderIdMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
54
55                         m_timestampMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
56
57                         m_fromMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
58                         m_fromMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_CONTAINS);
59                         m_fromMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_STARTSWITH);
60                         m_fromMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_ENDSWITH);
61
62                         m_toMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
63                         m_toMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_CONTAINS);
64                         m_toMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_STARTSWITH);
65                         m_toMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_ENDSWITH);
66
67                         m_ccMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
68                         m_ccMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_CONTAINS);
69                         m_ccMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_STARTSWITH);
70                         m_ccMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_ENDSWITH);
71
72                         m_bccMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
73                         m_bccMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_CONTAINS);
74                         m_bccMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_STARTSWITH);
75                         m_bccMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_ENDSWITH);
76
77                         m_bodyMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_CONTAINS);
78
79                         m_isReadMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
80
81                         m_priorityMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
82
83                         m_subjectMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_EXACTLY);
84                         m_subjectMatchFlagVec.push_back(MessageFilterValidatorFactory::MATCH_CONTAINS);
85                 }
86
87                 void MessageFilterValidator::initAttributeAndMatchFlagsMap(){
88                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_TYPE]      = m_typeMatchFlagVec;
89                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_ID]        = m_idMatchFlagVec;
90                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_FOLDER]    = m_folderIdMatchFlagVec;
91                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_TIMESTAMP] = m_timestampMatchFlagVec;
92                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_FROM]      = m_fromMatchFlagVec;
93                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_CC]        = m_ccMatchFlagVec;
94                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_BCC]       = m_bccMatchFlagVec;
95                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_BODY]      = m_bodyMatchFlagVec;
96                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_IS_READ]   = m_isReadMatchFlagVec;
97                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_PRIORITY]  = m_priorityMatchFlagVec;
98                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_SUBJECT]   = m_subjectMatchFlagVec;
99                         m_attributeAndMatchFlagsMap[MessageFilterValidatorFactory::ATTRIBUTE_TO]        = m_toMatchFlagVec;
100                 }
101
102                 bool MessageFilterValidator::validateAttributeRange(std::string& attrName, Api::Tizen::AnyPtr& initialValue, Api::Tizen::AnyPtr& endValue, int depth){
103                         if(initialValue == NULL || endValue == NULL)
104                                 return false;
105
106                         bool retVal = false;
107
108                         if(attrName.compare(MessageFilterValidatorFactory::ATTRIBUTE_TIMESTAMP)!=0){
109                                 MsgLogError(">>> [ERROR] Not Supported attribute :[" << attrName << "]");
110                                 return false;
111                         }
112
113                         retVal = FilterValidator::validateAttributeRange(attrName, initialValue, endValue, depth);
114                         return retVal;
115                 }
116
117
118                 bool MessageFilterValidator::vectorContains(std::vector<std::string>& vec, Api::Tizen::MatchFlag& value){
119                         std::string matchStr;
120                         switch(value)
121                         {
122                         case Api::Tizen::MATCH_EXACTLY:
123                                 matchStr = "EXACTLY";
124                                 break;
125                         case Api::Tizen::MATCH_FULLSTRING:
126                                 matchStr = "FULLSTRING";
127                                 break;
128                         case Api::Tizen::MATCH_CONTAINS:
129                                 matchStr = "CONTAINS";
130                                 break;
131                         case Api::Tizen::MATCH_STARTSWITH:
132                                 matchStr = "STARTSWITH";
133                                 break;
134                         case Api::Tizen::MATCH_ENDSWITH:
135                                 matchStr = "ENDSWITH";
136                                 break;
137                         case Api::Tizen::MATCH_EXISTS:
138                                 matchStr = "EXISTS";
139                                 break;
140                         default:
141                                 matchStr = "";
142                                 break;
143                         }
144
145                         std::vector<std::string>::iterator it;
146                         for(it=vec.begin(); it<vec.end(); it++){
147                                 if((*it).compare(matchStr) == 0){
148                                         return true;
149                                 }
150                         }
151
152                         return false;
153                 }
154
155                 bool MessageFilterValidator::validateAttribute(std::string& attrName, Api::Tizen::MatchFlag& matchFlag,
156                                 Api::Tizen::AnyPtr& matchValue, int depth){
157                         bool retBool = false;
158
159                         if(matchValue == NULL)
160                                 return false;
161
162                         if(validateAttributeEach(attrName, matchFlag, matchValue, depth) == false){
163                                 MsgLogWanning(">>>[Warning] attrName:[" << attrName << "] is invalid value:[" << matchValue->toString() << "]");
164                                 return false;
165                         }
166
167                         retBool = FilterValidator::validateAttribute(attrName, matchFlag, matchValue, depth);
168                         LogDebug(">>> retBool:" << retBool);
169                         return retBool;
170                 }
171
172                 bool MessageFilterValidator::validateAttributeEach(std::string& attrName,MatchFlag& matchFlag, Api::Tizen::AnyPtr& value, int depth){
173                         LogDebug("<<< attrName:[" << attrName << "], value:[" << value->toString() << "]");
174
175                         if(attrName.compare(MessageFilterValidatorFactory::ATTRIBUTE_TYPE)==0){
176                                 if(m_isTypeSetted == true){
177                                         MsgLogError(">>> [ERROR] duplicated type :[" << attrName << "], value:[" <<
178                                                         value->toString()<< "]");
179                                         return false;
180                                 }else{
181                                         m_isTypeSetted = true;
182                                 }
183                         }
184
185                         if(m_attributeAndMatchFlagsMap.count(attrName) == 0)
186                         {
187                                 MsgLogWanning(">>>[Waning] attrName is not supported:[" << attrName << "]");
188                                 return false;
189                         }
190
191                         std::vector<std::string> vec = m_attributeAndMatchFlagsMap.find(attrName)->second;
192
193                         if(vectorContains(vec, matchFlag)==false){
194                                 MsgLogWanning(">>>[Waning]MatchFlag check fail unsupported flag:[" << matchFlag << "] for Attribute:[" << attrName << "]");
195                                 return false;
196                         }
197
198                         LogDebug(">>> return true");
199                         return true;
200                 }
201
202                         }       //namespace Messaging
203         }
204
205 }