ab1cc17498c0d29c064cbbddd416e0159ace2c5f
[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                                 MatchFlagStrArray matchFlag, Api::Tizen::PrimitiveType idType):FilterValidator(properties, matchFlag){
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, std::string& value){
116                         std::vector<std::string>::iterator it;
117                         for(it=vec.begin(); it<vec.end(); it++){
118                                 if((*it).compare(value) == 0){
119                                         return true;
120                                 }
121                         }
122
123                         return false;
124                 }
125
126                 bool MessageFilterValidator::validateAttribute(std::string& attrName, Api::Tizen::AnyArrayPtr& values,
127                                 std::string& matchFlag, bool caseSensitive, int depth){
128                         bool retBool = false;
129
130                         AnyArray::iterator iter;
131                         for(iter=values->begin(); iter!=values->end(); iter++){
132                                 AnyPtr value = *iter;
133                                 if(validateAttributeEach(attrName, value, matchFlag, depth) == false){
134                                         MsgLogWanning(">>>[Warning] attrName:[" << attrName << "] is invalid value:[" << value->toString() << "]");
135                                         return false;
136                                 }
137                         }
138
139                         retBool = FilterValidator::validateAttribute(attrName, values, matchFlag, caseSensitive, depth);
140                         LogDebug(">>> retBool:" << retBool);
141                         return retBool;
142                 }
143
144                 bool MessageFilterValidator::validateAttributeEach(std::string& attrName,Api::Tizen::AnyPtr& value, std::string& matchFlag, int depth){
145                         LogDebug("<<< attrName:[" << attrName << "], value:[" << value->toString() << "]");
146
147                         if(attrName.compare(MessageFilterValidatorFactory::ATTRIBUTE_TYPE)==0){
148                                 if(m_isTypeSetted == true){
149                                         MsgLogError(">>> [ERROR] duplicated type :[" << attrName << "], value:[" <<
150                                                         value->toString()<< "]");
151                                         return false;
152                                 }else{
153                                         m_isTypeSetted = true;
154                                 }
155                         }
156
157                         if(m_attributeAndMatchFlagsMap.count(attrName) == 0)
158                         {
159                                 MsgLogWanning(">>>[Waning] attrName is not supported:[" << attrName << "]");
160                                 return false;
161                         }
162
163                         std::vector<std::string> vec = m_attributeAndMatchFlagsMap.find(attrName)->second;
164
165                         if(vectorContains(vec, matchFlag)==false){
166                                 MsgLogWanning(">>>[Waning]MatchFlag check fail unsupported flag:[" << matchFlag << "] for Attribute:[" << attrName << "]");
167                                 return false;
168                         }
169
170                         LogDebug(">>> return true");
171                         return true;
172                 }
173
174                         }       //namespace Messaging
175         }
176
177 }