client-cpp  0.6.1
Strategies.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2014 CyberVision, Inc.
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 #ifndef STRATEGIES_HPP_
18 #define STRATEGIES_HPP_
19 
20 #include "kaa/KaaDefaults.hpp"
21 
22 #ifdef KAA_USE_CONFIGURATION
23 
25 #include <functional>
26 #include <list>
29 
30 namespace kaa {
31 
36 class UuidProcessStrategy : public AbstractStrategy {
37 public:
38  UuidProcessStrategy(
39  std::function<bool (uuid_t)> isSubscribed
40  , std::function<void (uuid_t, std::shared_ptr<ICommonRecord>)> subscribe
41  , std::function<void (uuid_t)> unsubscribe)
42  : isSubscribedFn_(isSubscribed)
43  , subscribeFn_(subscribe)
44  , unsubscribeFn_(unsubscribe)
45  {
46  }
47 
48  void run(std::shared_ptr<ICommonRecord> parent, const std::string &field, const avro::GenericDatum &datum);
49 
50 private:
51  std::function<bool (uuid_t)> isSubscribedFn_;
52  std::function<void (uuid_t, std::shared_ptr<ICommonRecord>)> subscribeFn_;
53  std::function<void (uuid_t)> unsubscribeFn_;
54 };
55 
61 class RecordProcessStrategy : public AbstractStrategy {
62 public:
63  RecordProcessStrategy(
64  std::function<bool (uuid_t)> isSubscribed
65  , std::function<void (uuid_t, std::shared_ptr<ICommonRecord>)> subscribe
66  , std::function<void (uuid_t)> unsubscribe, bool isRootRecord = false)
67  : isSubscribedFn_(isSubscribed)
68  , subscribeFn_(subscribe)
69  , unsubscribeFn_(unsubscribe)
70  , isRootRecord_(isRootRecord)
71  {
72  }
73  void run(std::shared_ptr<ICommonRecord> parent, const std::string &field, const avro::GenericDatum &datum);
74 private:
75  std::function<bool (uuid_t)> isSubscribedFn_;
76  std::function<void (uuid_t, std::shared_ptr<ICommonRecord>)> subscribeFn_;
77  std::function<void (uuid_t)> unsubscribeFn_;
78  std::list<std::pair<uuid_t, std::shared_ptr<ICommonRecord> > > recordToSubscribe;
79  std::list<uuid_t> recordToUnSubscribe;
80 
81  bool isRootRecord_;
82 };
83 
87 class ArrayProcessStrategy : public AbstractStrategy {
88 public:
89  ArrayProcessStrategy(std::function<bool (uuid_t)> isSubscribed
90  , std::function<void (uuid_t, std::shared_ptr<ICommonRecord>)> subscribe
91  , std::function<void (uuid_t)> unsubscribe)
92  : isSubscribedFn_(isSubscribed)
93  , subscribeFn_(subscribe)
94  , unsubscribeFn_(unsubscribe)
95  {
96  }
97  void run(std::shared_ptr<ICommonRecord> parent, const std::string &field, const avro::GenericDatum &datum);
98 private:
99  static const std::string array_holder_field;
100  std::function<bool (uuid_t)> isSubscribedFn_;
101  std::function<void (uuid_t, std::shared_ptr<ICommonRecord>)> subscribeFn_;
102  std::function<void (uuid_t)> unsubscribeFn_;
103 };
104 
108 class ArrayResetStrategy : public AbstractStrategy {
109 public:
110  ArrayResetStrategy(std::function<bool (uuid_t)> isSubscribed
111  , std::function<void (uuid_t)> unsubscribe)
112  : isSubscribedFn_(isSubscribed)
113  , unsubscribeFn_(unsubscribe)
114  {
115  }
116  void run(std::shared_ptr<ICommonRecord> parent, const std::string &field, const avro::GenericDatum &datum);
117  void unregisterRecord(ICommonRecord &record);
118  void unregisterArray(ICommonArray &record);
119 private:
120  std::function<bool (uuid_t)> isSubscribedFn_;
121  std::function<void (uuid_t)> unsubscribeFn_;
122 };
123 
127 class NullProcessStrategy : public AbstractStrategy {
128 public:
129  void run(std::shared_ptr<ICommonRecord> parent, const std::string &field, const avro::GenericDatum &datum);
130 };
131 
135 class CommonProcessStrategy : public AbstractStrategy {
136 public:
137  void run(std::shared_ptr<ICommonRecord> parent, const std::string &field, const avro::GenericDatum &datum);
138 };
139 
140 } // namespace kaa
141 
142 #endif
143 
144 #endif /* STRATEGIES_HPP_ */