Beta merge 2
[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                         bool retVal = false;
104
105                         if(attrName.compare(MessageFilterValidatorFactory::ATTRIBUTE_TIMESTAMP)!=0){
106                                 MsgLogError(">>> [ERROR] Not Supported attribute :[" << attrName << "]");
107                                 return false;
108                         }
109
110                         retVal = FilterValidator::validateAttributeRange(attrName, initialValue, endValue, depth);
111                         return retVal;
112                 }
113
114
115                 bool MessageFilterValidator::vectorContains(std::vector<std::string>& vec, Api::Tizen::MatchFlag& value){
116                         std::string matchStr;
117                         switch(value)
118                         {
119                         case Api::Tizen::MATCH_EXACTLY:
120                                 matchStr = "EXACTLY";
121                                 break;
122                         case Api::Tizen::MATCH_FULLSTRING:
123                                 matchStr = "FULLSTRING";
124                                 break;
125                         case Api::Tizen::MATCH_CONTAINS:
126                                 matchStr = "CONTAINS";
127                                 break;
128                         case Api::Tizen::MATCH_STARTSWITH:
129                                 matchStr = "STARTSWITH";
130                                 break;
131                         case Api::Tizen::MATCH_ENDSWITH:
132                                 matchStr = "ENDSWITH";
133                                 break;
134                         case Api::Tizen::MATCH_EXISTS:
135                                 matchStr = "EXISTS";
136                                 break;
137                         default:
138                                 matchStr = "";
139                                 break;
140                         }
141
142                         std::vector<std::string>::iterator it;
143                         for(it=vec.begin(); it<vec.end(); it++){
144                                 if((*it).compare(matchStr) == 0){
145                                         return true;
146                                 }
147                         }
148
149                         return false;
150                 }
151
152                 bool MessageFilterValidator::validateAttribute(std::string& attrName, Api::Tizen::MatchFlag& matchFlag,
153                                 Api::Tizen::AnyArrayPtr& values, int depth){
154                         bool retBool = false;
155
156                         AnyArray::iterator iter;
157                         for(iter=values->begin(); iter!=values->end(); iter++){
158                                 AnyPtr value = *iter;
159                                 if(validateAttributeEach(attrName, matchFlag, value, depth) == false){
160                                         MsgLogWanning(">>>[Warning] attrName:[" << attrName << "] is invalid value:[" << value->toString() << "]");
161                                         return false;
162                                 }
163                         }
164
165                         retBool = FilterValidator::validateAttribute(attrName, matchFlag, values, depth);
166                         LogDebug(">>> retBool:" << retBool);
167                         return retBool;
168                 }
169
170                 bool MessageFilterValidator::validateAttributeEach(std::string& attrName,MatchFlag& matchFlag, Api::Tizen::AnyPtr& value, int depth){
171                         LogDebug("<<< attrName:[" << attrName << "], value:[" << value->toString() << "]");
172
173                         if(attrName.compare(MessageFilterValidatorFactory::ATTRIBUTE_TYPE)==0){
174                                 if(m_isTypeSetted == true){
175                                         MsgLogError(">>> [ERROR] duplicated type :[" << attrName << "], value:[" <<
176                                                         value->toString()<< "]");
177                                         return false;
178                                 }else{
179                                         m_isTypeSetted = true;
180                                 }
181                         }
182
183                         if(m_attributeAndMatchFlagsMap.count(attrName) == 0)
184                         {
185                                 MsgLogWanning(">>>[Waning] attrName is not supported:[" << attrName << "]");
186                                 return false;
187                         }
188
189                         std::vector<std::string> vec = m_attributeAndMatchFlagsMap.find(attrName)->second;
190
191                         if(vectorContains(vec, matchFlag)==false){
192                                 MsgLogWanning(">>>[Waning]MatchFlag check fail unsupported flag:[" << matchFlag << "] for Attribute:[" << attrName << "]");
193                                 return false;
194                         }
195
196                         LogDebug(">>> return true");
197                         return true;
198                 }
199
200                         }       //namespace Messaging
201         }
202
203 }