JBoss Data Grid HotRod C++ Client  7.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ConfigurationBuilder.h
Go to the documentation of this file.
1 #ifndef ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
2 #define ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
3 
4 #include <string>
5 #include <vector>
6 #include <sstream>
7 #include <fstream>
8 #include <iostream>
9 
10 #include "infinispan/hotrod/defs.h"
12 #include "Builder.h"
13 #include "Configuration.h"
17 
18 namespace infinispan {
19 namespace hotrod {
20 
26 // Methods on this class cannot be invoked across library boundary, therefore, it can use STL.
28  : public Builder<Configuration>
29 {
30  public:
32  m_connectionTimeout(60000),
33  m_forceReturnValue(false),
34  m_keySizeEstimate(64),
35  m_protocolVersion(Configuration::PROTOCOL_VERSION_24),
36  m_socketTimeout(60000),
37  m_tcpNoDelay(true),
38  m_valueSizeEstimate(512),
39  m_maxRetries(10),
40  m_balancingStrategyProducer(nullptr),
41  __pragma(warning(suppress:4355)) // passing uninitialized 'this'
42  connectionPoolConfigurationBuilder(*this),
43  __pragma(warning(suppress:4355))
44  sslConfigurationBuilder(*this)
45  {}
53  m_servers.push_back(ServerConfigurationBuilder(*this));
54  return m_servers[m_servers.size() - 1];
55  }
56 
63  ConfigurationBuilder& addServers(std::string servers) {
64  std::istringstream originalStream(servers);
65  std::string stringHelper;
66  std::string hostHelper;
67  std::string portHelper;
68  int portInt;
69 
70  // TODO: handle IPv6 addresses
71  while(std::getline(originalStream,stringHelper,';')) {
72  std::istringstream singleServerStream(stringHelper);
73  std::getline(singleServerStream,hostHelper,':');
74  std::getline(singleServerStream,portHelper,':');
75  std::istringstream portStream(portHelper);
76  portStream >> portInt;
77  addServer().host(hostHelper).port(portInt);
78  }
79 
80  return *this;
81  }
82 
89  return connectionPoolConfigurationBuilder;
90  }
91 
97  ConfigurationBuilder& connectionTimeout(int connectionTimeout_) {
98  m_connectionTimeout = connectionTimeout_;
99  return *this;
100  }
101 
108  ConfigurationBuilder& forceReturnValues(bool forceReturnValues_) {
109  m_forceReturnValue = forceReturnValues_;
110  return *this;
111  }
112 
118  ConfigurationBuilder& keySizeEstimate(int keySizeEstimate_) {
119  m_keySizeEstimate = keySizeEstimate_;
120  return *this;
121  }
122 
130  ConfigurationBuilder& protocolVersion(const std::string &protocolVersion_) {
131  m_protocolVersion = protocolVersion_;
132  return *this;
133  }
134 
141  ConfigurationBuilder& socketTimeout(int socketTimeout_) {
142  m_socketTimeout = socketTimeout_;
143  return *this;
144  }
145 
152  return sslConfigurationBuilder;
153  }
154 
160  ConfigurationBuilder& tcpNoDelay(bool tcpNoDelay_) {
161  m_tcpNoDelay = tcpNoDelay_;
162  return *this;
163  }
164 
170  ConfigurationBuilder& valueSizeEstimate(int valueSizeEstimate_) {
171  m_valueSizeEstimate = valueSizeEstimate_;
172  return *this;
173  }
174 
181  ConfigurationBuilder& maxRetries(int maxRetries_) {
182  m_maxRetries = maxRetries_;
183  return *this;
184  }
185 
187  m_balancingStrategyProducer = bsp;
188  return *this;
189  }
190 
198  return create();
199  }
200 
207  virtual Configuration create() {
208  std::vector<ServerConfiguration> servers;
209  if (m_servers.size() > 0) {
210  for (std::vector<ServerConfigurationBuilder>::iterator it = m_servers.begin(); it < m_servers.end(); it++) {
211  servers.push_back(it->create());
212  }
213  } else {
214  servers.push_back(ServerConfigurationBuilder(*this).create());
215  }
216 
217  return Configuration(m_protocolVersion,
218  connectionPoolConfigurationBuilder.create(),
219  m_connectionTimeout,
220  m_forceReturnValue,
221  m_keySizeEstimate,
222  servers,
223  m_socketTimeout,
224  sslConfigurationBuilder.create(),
225  m_tcpNoDelay,
226  m_valueSizeEstimate,
227  m_maxRetries,
228  m_balancingStrategyProducer);
229 
230  }
231 
238  virtual ConfigurationBuilder& read(Configuration& configuration) {
239  // FIXME: read pool, ssl and server configs
240  m_protocolVersion = configuration.getProtocolVersionCString();
241  m_connectionTimeout = configuration.getConnectionTimeout();
242  m_forceReturnValue = configuration.isForceReturnValue();
243  m_socketTimeout = configuration.getSocketTimeout();
244  m_tcpNoDelay = configuration.isTcpNoDelay();
245  m_keySizeEstimate = configuration.getKeySizeEstimate();
246  m_valueSizeEstimate = configuration.getValueSizeEstimate();
247  m_maxRetries = configuration.getMaxRetries();
248  return *this;
249  }
250 
251  // DEPRECATED: use Configuration::PROTOCOL_VERSION_12 instead
252  HR_EXTERN static const char *PROTOCOL_VERSION_12;
253 
254  private:
255  int m_connectionTimeout;
256  bool m_forceReturnValue;
257  int m_keySizeEstimate;
258  std::string m_protocolVersion;
259  std::vector<ServerConfigurationBuilder> m_servers;
260  int m_socketTimeout;
261  bool m_tcpNoDelay;
262  int m_valueSizeEstimate;
263  int m_maxRetries;
264  FailOverRequestBalancingStrategy::ProducerFn m_balancingStrategyProducer;
265 
266  ConnectionPoolConfigurationBuilder connectionPoolConfigurationBuilder;
267  SslConfigurationBuilder sslConfigurationBuilder;
268 };
269 
271  return m_builder->addServer();
272 }
273 
274 inline ConfigurationBuilder &ConfigurationChildBuilder::addServers(const std::string &servers) {
275  return m_builder->addServers(servers);
276 }
277 
279  return m_builder->connectionPool();
280 }
281 
283  return m_builder->connectionTimeout(connectionTimeout_);
284 }
285 
287  return m_builder->forceReturnValues(forceReturnValues_);
288 }
289 
291  return m_builder->keySizeEstimate(keySizeEstimate_);
292 }
293 
294 inline ConfigurationBuilder &ConfigurationChildBuilder::protocolVersion(const std::string &protocolVersion_) {
295  return m_builder->protocolVersion(protocolVersion_);
296 }
297 
299  return m_builder->socketTimeout(socketTimeout_);
300 }
301 
303  return m_builder->ssl();
304 }
305 
307  return m_builder->tcpNoDelay(tcpNoDelay_);
308 }
309 
311  return m_builder->valueSizeEstimate(valueSizeEstimate_);
312 }
313 
315  return m_builder->maxRetries(maxRetries_);
316 }
318  return m_builder->balancingStrategyProducer(bsp);
319 }
320 
322  return m_builder->build();
323 }
324 
325 
326 }} // namespace
327 
328 #endif // ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
ConfigurationBuilder & addServers(std::string servers)
Definition: ConfigurationBuilder.h:63
ConfigurationBuilder & socketTimeout(int socketTimeout)
Definition: ConfigurationBuilder.h:298
ConnectionPoolConfigurationBuilder & connectionPool()
Definition: ConfigurationBuilder.h:88
ConfigurationBuilder & keySizeEstimate(int keySizeEstimate_)
Definition: ConfigurationBuilder.h:118
HR_EXTERN const int & getSocketTimeout() const
ConfigurationBuilder & keySizeEstimate(int keySizeEstimate)
Definition: ConfigurationBuilder.h:290
virtual Configuration create()
Definition: ConfigurationBuilder.h:207
HR_EXTERN const int & getValueSizeEstimate() const
ConfigurationBuilder & connectionTimeout(int connectionTimeout)
Definition: ConfigurationBuilder.h:282
#define HR_EXTERN
Definition: ImportExport.h:35
ConfigurationBuilder()
Definition: ConfigurationBuilder.h:31
ConfigurationBuilder & valueSizeEstimate(int valueSizeEstimate_)
Definition: ConfigurationBuilder.h:170
ConfigurationBuilder & maxRetries(int maxRetries_)
Definition: ConfigurationBuilder.h:181
ConnectionPoolConfigurationBuilder & connectionPool()
Definition: ConfigurationBuilder.h:278
ConfigurationBuilder & forceReturnValues(bool forceReturnValues)
Definition: ConfigurationBuilder.h:286
SslConfigurationBuilder & ssl()
Definition: ConfigurationBuilder.h:302
ServerConfigurationBuilder & addServer()
Definition: ConfigurationBuilder.h:52
HR_EXTERN const int & getKeySizeEstimate() const
Definition: ConnectionPoolConfigurationBuilder.h:16
virtual ConfigurationBuilder & read(Configuration &configuration)
Definition: ConfigurationBuilder.h:238
ConfigurationBuilder & socketTimeout(int socketTimeout_)
Definition: ConfigurationBuilder.h:141
static HR_EXTERN const char * PROTOCOL_VERSION_12
Definition: ConfigurationBuilder.h:252
Definition: Builder.h:15
Definition: SslConfigurationBuilder.h:13
HR_EXTERN const int & getMaxRetries() const
ConfigurationBuilder & balancingStrategyProducer(FailOverRequestBalancingStrategy::ProducerFn bsp)
Definition: ConfigurationBuilder.h:186
ConfigurationBuilder & addServers(const std::string &servers)
Definition: ConfigurationBuilder.h:274
Definition: ServerConfigurationBuilder.h:26
HR_EXTERN const bool & isForceReturnValue() const
ServerConfigurationBuilder & port(int port_)
Definition: ServerConfigurationBuilder.h:49
virtual SslConfiguration create()
Definition: SslConfigurationBuilder.h:19
virtual ServerConfiguration create()
Definition: ServerConfigurationBuilder.h:61
ConfigurationBuilder & forceReturnValues(bool forceReturnValues_)
Definition: ConfigurationBuilder.h:108
HR_EXTERN const int & getConnectionTimeout() const
Definition: Configuration.h:24
virtual ConnectionPoolConfiguration create()
Definition: ConnectionPoolConfigurationBuilder.h:199
Configuration build()
Definition: ConfigurationBuilder.h:321
HR_EXTERN const char * getProtocolVersionCString() const
FailOverRequestBalancingStrategy *(* ProducerFn)()
Definition: FailOverRequestBalancingStrategy.h:13
ConfigurationBuilder & valueSizeEstimate(int valueSizeEstimate)
Definition: ConfigurationBuilder.h:310
#define __pragma(...)
Definition: defs.h:106
ServerConfigurationBuilder & host(const std::string &host_)
Definition: ServerConfigurationBuilder.h:38
Definition: ConfigurationBuilder.h:27
HR_EXTERN const bool & isTcpNoDelay() const
ConfigurationBuilder & protocolVersion(const std::string &protocolVersion)
Definition: ConfigurationBuilder.h:294
ConfigurationBuilder & maxRetries(int maxRetries_)
Definition: ConfigurationBuilder.h:314
Configuration build()
Definition: ConfigurationBuilder.h:197
ConfigurationBuilder & protocolVersion(const std::string &protocolVersion_)
Definition: ConfigurationBuilder.h:130
SslConfigurationBuilder & ssl()
Definition: ConfigurationBuilder.h:151
ConfigurationBuilder & tcpNoDelay(bool tcpNoDelay)
Definition: ConfigurationBuilder.h:306
ServerConfigurationBuilder & addServer()
Definition: ConfigurationBuilder.h:270
ConfigurationBuilder & tcpNoDelay(bool tcpNoDelay_)
Definition: ConfigurationBuilder.h:160
ConfigurationBuilder & balancingStrategyProducer(FailOverRequestBalancingStrategy::ProducerFn bsp)
Definition: ConfigurationBuilder.h:317
ConfigurationBuilder & connectionTimeout(int connectionTimeout_)
Definition: ConfigurationBuilder.h:97