00001 #ifndef ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
00002 #define ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
00003
00004 #include <string>
00005 #include <vector>
00006 #include <sstream>
00007 #include <fstream>
00008 #include <iostream>
00009
00010 #include "infinispan/hotrod/defs.h"
00011 #include "infinispan/hotrod/ImportExport.h"
00012 #include "Builder.h"
00013 #include "Configuration.h"
00014 #include "ConnectionPoolConfigurationBuilder.h"
00015 #include "ServerConfigurationBuilder.h"
00016 #include "SslConfigurationBuilder.h"
00017
00018 namespace infinispan {
00019 namespace hotrod {
00020
00026
00027 class ConfigurationBuilder
00028 : public Builder<Configuration>
00029 {
00030 public:
00031 ConfigurationBuilder():
00032 m_connectionTimeout(60000),
00033 m_forceReturnValue(false),
00034 m_keySizeEstimate(64),
00035 m_pingOnStartup(true),
00036 m_protocolVersion(Configuration::PROTOCOL_VERSION_12),
00037 m_socketTimeout(60000),
00038 m_tcpNoDelay(true),
00039 m_valueSizeEstimate(512),
00040 __pragma(warning(suppress:4355))
00041 connectionPoolConfigurationBuilder(*this),
00042 __pragma(warning(suppress:4355))
00043 sslConfigurationBuilder(*this)
00044 {}
00051 ServerConfigurationBuilder& addServer() {
00052 m_servers.push_back(ServerConfigurationBuilder(*this));
00053 return m_servers[m_servers.size() - 1];
00054 }
00055
00062 ConfigurationBuilder& addServers(std::string servers) {
00063 std::istringstream originalStream(servers);
00064 std::string stringHelper;
00065 std::string hostHelper;
00066 std::string portHelper;
00067 int portInt;
00068
00069
00070 while(std::getline(originalStream,stringHelper,';')) {
00071 std::istringstream singleServerStream(stringHelper);
00072 std::getline(singleServerStream,hostHelper,':');
00073 std::getline(singleServerStream,portHelper,':');
00074 std::istringstream portStream(portHelper);
00075 portStream >> portInt;
00076 addServer().host(hostHelper).port(portInt);
00077 }
00078
00079 return *this;
00080 }
00081
00087 ConnectionPoolConfigurationBuilder& connectionPool() {
00088 return connectionPoolConfigurationBuilder;
00089 }
00090
00096 ConfigurationBuilder& connectionTimeout(int connectionTimeout_) {
00097 m_connectionTimeout = connectionTimeout_;
00098 return *this;
00099 }
00100
00107 ConfigurationBuilder& forceReturnValues(bool forceReturnValues_) {
00108 m_forceReturnValue = forceReturnValues_;
00109 return *this;
00110 }
00111
00117 ConfigurationBuilder& keySizeEstimate(int keySizeEstimate_) {
00118 m_keySizeEstimate = keySizeEstimate_;
00119 return *this;
00120 }
00121
00128 ConfigurationBuilder& pingOnStartup(bool pingOnStartup_) {
00129 m_pingOnStartup = pingOnStartup_;
00130 return *this;
00131 }
00132
00140 ConfigurationBuilder& protocolVersion(const std::string &protocolVersion_) {
00141 m_protocolVersion = protocolVersion_;
00142 return *this;
00143 }
00144
00151 ConfigurationBuilder& socketTimeout(int socketTimeout_) {
00152 m_socketTimeout = socketTimeout_;
00153 return *this;
00154 }
00155
00161 SslConfigurationBuilder& ssl() {
00162 return sslConfigurationBuilder;
00163 }
00164
00170 ConfigurationBuilder& tcpNoDelay(bool tcpNoDelay_) {
00171 m_tcpNoDelay = tcpNoDelay_;
00172 return *this;
00173 }
00174
00180 ConfigurationBuilder& valueSizeEstimate(int valueSizeEstimate_) {
00181 m_valueSizeEstimate = valueSizeEstimate_;
00182 return *this;
00183 }
00184
00191 Configuration build() {
00192 return create();
00193 }
00194
00201 virtual Configuration create() {
00202 std::vector<ServerConfiguration> servers;
00203 if (m_servers.size() > 0) {
00204 for (std::vector<ServerConfigurationBuilder>::iterator it = m_servers.begin(); it < m_servers.end(); it++) {
00205 servers.push_back(it->create());
00206 }
00207 } else {
00208 servers.push_back(ServerConfigurationBuilder(*this).create());
00209 }
00210
00211 return Configuration(m_protocolVersion,
00212 connectionPoolConfigurationBuilder.create(),
00213 m_connectionTimeout,
00214 m_forceReturnValue,
00215 m_keySizeEstimate,
00216 m_pingOnStartup,
00217 servers,
00218 m_socketTimeout,
00219 sslConfigurationBuilder.create(),
00220 m_tcpNoDelay,
00221 m_valueSizeEstimate);
00222
00223 }
00224
00231 virtual ConfigurationBuilder& read(Configuration& configuration) {
00232
00233 m_protocolVersion = configuration.getProtocolVersionCString();
00234 m_connectionTimeout = configuration.getConnectionTimeout();
00235 m_forceReturnValue = configuration.isForceReturnValue();
00236 m_pingOnStartup = configuration.isPingOnStartup();
00237 m_socketTimeout = configuration.getSocketTimeout();
00238 m_tcpNoDelay = configuration.isTcpNoDelay();
00239 m_keySizeEstimate = configuration.getKeySizeEstimate();
00240 m_valueSizeEstimate = configuration.getValueSizeEstimate();
00241 return *this;
00242 }
00243
00244
00245 HR_EXTERN static const char *PROTOCOL_VERSION_12;
00246
00247 private:
00248 int m_connectionTimeout;
00249 bool m_forceReturnValue;
00250 int m_keySizeEstimate;
00251 bool m_pingOnStartup;
00252 std::string m_protocolVersion;
00253 std::vector<ServerConfigurationBuilder> m_servers;
00254 int m_socketTimeout;
00255 bool m_tcpNoDelay;
00256 int m_valueSizeEstimate;
00257
00258 ConnectionPoolConfigurationBuilder connectionPoolConfigurationBuilder;
00259 SslConfigurationBuilder sslConfigurationBuilder;
00260 };
00261
00262 inline ServerConfigurationBuilder &ConfigurationChildBuilder::addServer() {
00263 return m_builder->addServer();
00264 }
00265
00266 inline ConfigurationBuilder &ConfigurationChildBuilder::addServers(const std::string &servers) {
00267 return m_builder->addServers(servers);
00268 }
00269
00270 inline ConnectionPoolConfigurationBuilder &ConfigurationChildBuilder::connectionPool() {
00271 return m_builder->connectionPool();
00272 }
00273
00274 inline ConfigurationBuilder &ConfigurationChildBuilder::connectionTimeout(int connectionTimeout_) {
00275 return m_builder->connectionTimeout(connectionTimeout_);
00276 }
00277
00278 inline ConfigurationBuilder &ConfigurationChildBuilder::forceReturnValues(bool forceReturnValues_) {
00279 return m_builder->forceReturnValues(forceReturnValues_);
00280 }
00281
00282 inline ConfigurationBuilder &ConfigurationChildBuilder::keySizeEstimate(int keySizeEstimate_) {
00283 return m_builder->keySizeEstimate(keySizeEstimate_);
00284 }
00285
00286 inline ConfigurationBuilder &ConfigurationChildBuilder::pingOnStartup(bool pingOnStartup_) {
00287 return m_builder->pingOnStartup(pingOnStartup_);
00288 }
00289
00290 inline ConfigurationBuilder &ConfigurationChildBuilder::protocolVersion(const std::string &protocolVersion_) {
00291 return m_builder->protocolVersion(protocolVersion_);
00292 }
00293
00294 inline ConfigurationBuilder &ConfigurationChildBuilder::socketTimeout(int socketTimeout_) {
00295 return m_builder->socketTimeout(socketTimeout_);
00296 }
00297
00298 inline SslConfigurationBuilder &ConfigurationChildBuilder::ssl() {
00299 return m_builder->ssl();
00300 }
00301
00302 inline ConfigurationBuilder &ConfigurationChildBuilder::tcpNoDelay(bool tcpNoDelay_) {
00303 return m_builder->tcpNoDelay(tcpNoDelay_);
00304 }
00305
00306 inline ConfigurationBuilder &ConfigurationChildBuilder::valueSizeEstimate(int valueSizeEstimate_) {
00307 return m_builder->valueSizeEstimate(valueSizeEstimate_);
00308 }
00309
00310 inline Configuration ConfigurationChildBuilder::build() {
00311 return m_builder->build();
00312 }
00313
00314
00315 }}
00316
00317 #endif // ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H