sijie closed pull request #835: Allow subclasses of AbstractConfiguration to 
use fluent style
URL: https://github.com/apache/bookkeeper/pull/835
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java
index 69e113993..d0f8a64fc 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java
@@ -314,7 +314,7 @@ public static Builder forConfig(final ClientConfiguration 
conf) {
      */
     public BookKeeper(String servers) throws IOException, InterruptedException,
         BKException {
-        this((ClientConfiguration) (new 
ClientConfiguration().setZkServers(servers)));
+        this(new ClientConfiguration().setZkServers(servers));
     }
 
     /**
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
index 09fda4815..0d6321f80 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
@@ -136,7 +136,7 @@
      *             BookKeeper client.
      */
     public BookKeeperAdmin(String zkServers) throws IOException, 
InterruptedException, BKException {
-        this((ClientConfiguration) (new 
ClientConfiguration().setZkServers(zkServers)));
+        this(new ClientConfiguration().setZkServers(zkServers));
     }
 
     /**
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java
index 9f8c503b6..b197b1ecf 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java
@@ -35,7 +35,8 @@
 /**
  * Abstract configuration.
  */
-public abstract class AbstractConfiguration extends CompositeConfiguration {
+public abstract class AbstractConfiguration<T extends AbstractConfiguration>
+    extends CompositeConfiguration {
 
     public static final String READ_SYSTEM_PROPERTIES_PROPERTY = 
"org.apache.bookkeeper.conf.readsystemproperties";
 
@@ -158,9 +159,9 @@ public String getZkServers() {
      * @param zkServers
      *          ZooKeeper servers to connect
      */
-    public AbstractConfiguration setZkServers(String zkServers) {
+    public T setZkServers(String zkServers) {
         setProperty(ZK_SERVERS, zkServers);
-        return this;
+        return getThis();
     }
 
     /**
@@ -179,9 +180,9 @@ public int getZkTimeout() {
      *          ZooKeeper server timeout
      * @return server configuration
      */
-    public AbstractConfiguration setZkTimeout(int zkTimeout) {
+    public T setZkTimeout(int zkTimeout) {
         setProperty(ZK_TIMEOUT, Integer.toString(zkTimeout));
-        return this;
+        return getThis();
     }
 
     /**
@@ -380,10 +381,10 @@ public Feature getFeature(String configProperty, Feature 
defaultValue) {
      *          the client authentication provider factory class name
      * @return client configuration
      */
-    public AbstractConfiguration setClientAuthProviderFactoryClass(
+    public T setClientAuthProviderFactoryClass(
             String factoryClass) {
         setProperty(CLIENT_AUTH_PROVIDER_FACTORY_CLASS, factoryClass);
-        return this;
+        return getThis();
     }
 
     /**
@@ -414,9 +415,9 @@ public int getNettyMaxFrameSizeBytes() {
      *          the max size in bytes
      * @return server configuration
      */
-    public AbstractConfiguration setNettyMaxFrameSizeBytes(int maxSize) {
+    public T setNettyMaxFrameSizeBytes(int maxSize) {
         setProperty(NETTY_MAX_FRAME_SIZE, String.valueOf(maxSize));
-        return this;
+        return getThis();
     }
 
     /**
@@ -435,9 +436,9 @@ public String getTLSProviderFactoryClass() {
      *            the client security provider factory class name
      * @return client configuration
      */
-    public AbstractConfiguration setTLSProviderFactoryClass(String 
factoryClass) {
+    public T setTLSProviderFactoryClass(String factoryClass) {
         setProperty(TLS_PROVIDER_FACTORY_CLASS, factoryClass);
-        return this;
+        return getThis();
     }
 
     /**
@@ -456,9 +457,9 @@ public String getTLSProvider() {
      *            TLS Provider type
      * @return Client Configuration
      */
-    public AbstractConfiguration setTLSProvider(String provider) {
+    public T setTLSProvider(String provider) {
         setProperty(TLS_PROVIDER, provider);
-        return this;
+        return getThis();
     }
 
     /**
@@ -478,9 +479,9 @@ public boolean getTLSClientAuthentication() {
      *            Whether to send a certificate or not
      * @return client configuration
      */
-    public AbstractConfiguration setTLSClientAuthentication(boolean enabled) {
+    public T setTLSClientAuthentication(boolean enabled) {
         setProperty(TLS_CLIENT_AUTHENTICATION, enabled);
-        return this;
+        return getThis();
     }
 
     /**
@@ -491,10 +492,10 @@ public AbstractConfiguration 
setTLSClientAuthentication(boolean enabled) {
      *            comma separated list of enabled TLS cipher suites
      * @return current configuration
      */
-    public AbstractConfiguration setTLSEnabledCipherSuites(
+    public T setTLSEnabledCipherSuites(
             String list) {
         setProperty(TLS_ENABLED_CIPHER_SUITES, list);
-        return this;
+        return getThis();
     }
 
     /**
@@ -516,10 +517,10 @@ public String getTLSEnabledCipherSuites() {
      *            comma separated list of enabled TLS cipher suites
      * @return current configuration
      */
-    public AbstractConfiguration setTLSEnabledProtocols(
+    public T setTLSEnabledProtocols(
             String list) {
         setProperty(TLS_ENABLED_PROTOCOLS, list);
-        return this;
+        return getThis();
     }
 
     /**
@@ -532,4 +533,10 @@ public AbstractConfiguration setTLSEnabledProtocols(
     public String getTLSEnabledProtocols() {
         return getString(TLS_ENABLED_PROTOCOLS, null);
     }
+
+
+    /**
+     * Trickery to allow inheritance with fluent style.
+     */
+    protected abstract T getThis();
 }
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ClientConfiguration.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ClientConfiguration.java
index 93adc1fa1..257c36734 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ClientConfiguration.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ClientConfiguration.java
@@ -39,7 +39,7 @@
 /**
  * Configuration settings for client side.
  */
-public class ClientConfiguration extends AbstractConfiguration {
+public class ClientConfiguration extends 
AbstractConfiguration<ClientConfiguration> {
 
     // Throttle value
     protected static final String THROTTLE = "throttle";
@@ -1669,4 +1669,9 @@ public ClientConfiguration 
setStoreSystemtimeAsLedgerCreationTime(boolean enable
     public boolean getStoreSystemtimeAsLedgerCreationTime() {
         return getBoolean(STORE_SYSTEMTIME_AS_LEDGER_CREATION_TIME, false);
     }
+
+    @Override
+    protected ClientConfiguration getThis() {
+        return this;
+    }
 }
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java
index 19d5df10e..38eccbae3 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java
@@ -34,7 +34,7 @@
 /**
  * Configuration manages server-side settings.
  */
-public class ServerConfiguration extends AbstractConfiguration {
+public class ServerConfiguration extends 
AbstractConfiguration<ServerConfiguration> {
     // Entry Log Parameters
     protected static final String ENTRY_LOG_SIZE_LIMIT = "logSizeLimit";
     protected static final String ENTRY_LOG_FILE_PREALLOCATION_ENABLED = 
"entryLogFilePreallocationEnabled";
@@ -2497,4 +2497,8 @@ public void setRegistrationManagerClass(
                 DEFAULT_LOADER);
     }
 
+    @Override
+    protected ServerConfiguration getThis() {
+        return this;
+    }
 }
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManagerFactory.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManagerFactory.java
index 91d83e79d..651076fdb 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManagerFactory.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManagerFactory.java
@@ -109,7 +109,7 @@ public abstract LedgerUnderreplicationManager 
newLedgerUnderreplicationManager()
      * @throws IOException
      */
     public static LedgerManagerFactory newLedgerManagerFactory(
-        final AbstractConfiguration conf, final ZooKeeper zk)
+        final AbstractConfiguration<?> conf, final ZooKeeper zk)
             throws IOException, KeeperException, InterruptedException {
         Class<? extends LedgerManagerFactory> factoryClass;
         try {
@@ -252,7 +252,7 @@ private static LedgerManagerFactory createNewLMFactory(
      * @param zk
      *            Zookeeper instance
      */
-    public void format(final AbstractConfiguration conf, final ZooKeeper zk)
+    public void format(final AbstractConfiguration<?> conf, final ZooKeeper zk)
             throws InterruptedException, KeeperException, IOException {
 
         Class<? extends LedgerManagerFactory> factoryClass;


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to