/builddir/build/BUILD/infinispan-hotrod-cpp-6.2.1.Final-Source/include/infinispan/hotrod/ConfigurationBuilder.h

Go to the documentation of this file.
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 // Methods on this class cannot be invoked across library boundary, therefore, it can use STL.
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)) // passing uninitialized 'this'
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         // TODO: handle IPv6 addresses
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         // FIXME: read pool, ssl and server configs
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     // DEPRECATED: use Configuration::PROTOCOL_VERSION_12 instead
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 }} // namespace
00316 
00317 #endif // ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H

Generated on 25 Mar 2015 for JBoss Data Grid HotRod C++ Client by  doxygen 1.4.7