This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 4a7848d  Context API refactoring.
4a7848d is described below

commit 4a7848d21aeedb1d51c187622aae4184681fe654
Author: JamesBognar <[email protected]>
AuthorDate: Thu Sep 23 16:47:02 2021 -0400

    Context API refactoring.
---
 .../org/apache/juneau/rest/client/RestClient.java  |   4 +-
 .../juneau/rest/client/RestClientBuilder.java      | 369 ++++++++++-----------
 .../juneau/rest/mock/MockRestClientBuilder.java    |  19 --
 3 files changed, 177 insertions(+), 215 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index f54e499..51db01d 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -1737,8 +1737,6 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
         */
        public static final String RESTCLIENT_skipEmptyQueryData = PREFIX + 
"skipEmptyQueryData.b";
 
-       static final String RESTCLIENT_INTERNAL_pathDataBuilder = PREFIX + 
"pathDataBuilder.o";
-
        final HeaderList.Builder headerData;
        final PartList.Builder queryData, formData, pathData;
        final CloseableHttpClient httpClient;
@@ -1809,9 +1807,9 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
                headerData = builder.headerData().build().copy();
                queryData = builder.queryData().build().copy();
                formData = builder.formData().build().copy();
+               pathData = builder.pathData().build().copy();
 
                ContextProperties cp = 
getContextProperties().copy().apply(getBeanContext().getContextProperties()).build();
-               this.pathData = 
cp.getInstance(RESTCLIENT_INTERNAL_pathDataBuilder, 
PartList.Builder.class).orElseGet(PartList.Builder::new).copy();
                this.skipEmptyHeaders = 
cp.getBoolean(RESTCLIENT_skipEmptyHeaders).orElse(false);
                this.skipEmptyQueryData = 
cp.getBoolean(RESTCLIENT_skipEmptyQueryData).orElse(false);
                this.skipEmptyFormData = 
cp.getBoolean(RESTCLIENT_skipEmptyFormData).orElse(false);
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
index f7bc966..0629d3a 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
@@ -109,7 +109,6 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         */
        protected RestClientBuilder() {
                super();
-               this.pathData = PartList.create();
                this.serializerGroupBuilder = 
SerializerGroup.create().beanContextBuilder(getBeanContextBuilder());
                this.parserGroupBuilder = 
ParserGroup.create().beanContextBuilder(getBeanContextBuilder());
                this.partSerializerBuilder = (SerializerBuilder) 
OpenApiSerializer.create().beanContextBuilder(getBeanContextBuilder());
@@ -160,23 +159,10 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
        }
 
        private ContextProperties contextProperties() {
-               set(RESTCLIENT_INTERNAL_pathDataBuilder, pathData);
+               set("RestClient.random", new Random().nextInt());  // TODO - 
Should be able to get rid of this once context properties go away.
                return getContextProperties();
        }
 
-       /**
-        * Returns the builder for the form data parameter list.
-        *
-        * <p>
-        * Allows you to perform operations on the form data parameters that 
aren't otherwise exposed on this API, such
-        * as Prepend/Replace/Default operations.
-        *
-        * @return The form data parameter list builder.
-        */
-       public PartList.Builder getPathData() {
-               return pathData;
-       }
-
        
//------------------------------------------------------------------------------------------------------------------
        // Convenience marshalling support methods.
        
//------------------------------------------------------------------------------------------------------------------
@@ -1572,6 +1558,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * @param name The parameter name.
         * @param value The parameter value supplier.
         * @return This object (for method chaining).
+        * @see #queryData()
         */
        @FluentSetter
        public RestClientBuilder queryData(String name, Supplier<String> value) 
{
@@ -1636,7 +1623,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * The default behavior creates an empty builder.
         *
         * @return The query data list builder.
-        * @see #queryData()
+        * @see #formData()
         */
        protected PartList.Builder createFormData() {
                return PartList.create();
@@ -1664,6 +1651,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * @param parts
         *      The form-data parameters.
         * @return This object (for method chaining).
+        * @see #formData()
         */
        @FluentSetter
        public RestClientBuilder formData(NameValuePair...parts) {
@@ -1690,6 +1678,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         *
         * @param parts The parts.
         * @return This object (for method chaining).
+        * @see #formData()
         */
        public RestClientBuilder formDataDefault(NameValuePair...parts) {
                formData().setDefault(parts);
@@ -1713,6 +1702,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * @param name The parameter name.
         * @param value The parameter value.
         * @return This object (for method chaining).
+        * @see #formData()
         */
        @FluentSetter
        public RestClientBuilder formData(String name, String value) {
@@ -1737,6 +1727,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         * @param name The parameter name.
         * @param value The parameter value supplier.
         * @return This object (for method chaining).
+        * @see #formData()
         */
        @FluentSetter
        public RestClientBuilder formData(String name, Supplier<String> value) {
@@ -1745,6 +1736,175 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
        }
 
        
//------------------------------------------------------------------------------------------------------------------
+       // pathData
+       
//------------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the list of path data parameters that get 
applied to all requests created by this builder.
+        *
+        * <p>
+        * This is the primary method for accessing the path data parameter 
list.
+        * On first call, the builder is created via the method {@link 
#createFormData()}.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Create a client that uses "bar" for the "{foo}" path 
variable on every request.</jc>
+        *      RestClientBuilder <jv>builder</jv> = 
RestClient.<jsm>create</jsm>();
+        *      <jv>builder</jv>.formData().setDefault(<js>"foo"</js>, 
<js>"bar"</js>));
+        *      RestClient <jv>client</jv> = <jv>builder</jv>.build();
+        * </p>
+        *
+        * <p>
+        * The following convenience methods are also provided for updating the 
parameters:
+        * <ul>
+        *      <li class='jm'>{@link #pathData(NameValuePair...)}
+        *      <li class='jm'>{@link #pathDataDefault(NameValuePair...)}
+        *      <li class='jm'>{@link #pathData(String,String)}
+        *      <li class='jm'>{@link #pathData(String,Supplier)}
+        * </ul>
+        *
+        * <p>
+        * Note that the {@link #apply(Consumer)} method can be used to call 
this method without breaking fluent call chains.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      RestClient <jv>client</jv> = RestClient
+        *              .<jsm>create</jsm>()
+        *              .apply(<jv>x</jv> -&gt; 
<jv>x</jv>.pathData().setDefault(<js>"foo"</js>, <js>"bar"</js>))
+        *              .build();
+        * </p>
+        *
+        * @return The form data list builder.
+        */
+       public final PartList.Builder pathData() {
+               if (pathData == null)
+                       pathData = createPathData();
+               return pathData;
+       }
+
+       /**
+        * Creates the builder for the path data list.
+        *
+        * <p>
+        * Subclasses can override this method to provide their own 
implementation.
+        *
+        * <p>
+        * The default behavior creates an empty builder.
+        *
+        * @return The query data list builder.
+        * @see #pathData()
+        */
+       protected PartList.Builder createPathData() {
+               return PartList.create();
+       }
+
+       /**
+        * Sets multiple path parameters on all requests.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jk>import static</jk> org.apache.juneau.http.HttpParts.*;
+        *
+        *      RestClient <jv>client</jv> = RestClient
+        *              .<jsm>create</jsm>()
+        *              .pathData(
+        *                      <jsm>stringPart</jsm>(<js>"foo"</js>, 
<js>"bar"</js>),
+        *                      <jsm>booleanPart</jsm>(<js>"baz"</js>, 
<jk>true</jk>)
+        *              )
+        *              .build();
+        * </p>
+        *
+        * <p>
+        * This is a shortcut for calling 
<c>pathData().append(<jv>parts</jv>)</c>.
+        *
+        * @param parts
+        *      The path parameters.
+        * @return This object (for method chaining).
+        * @see #pathData()
+        */
+       @FluentSetter
+       public RestClientBuilder pathData(NameValuePair...parts) {
+               pathData().append(parts);
+               return this;
+       }
+
+       /**
+        * Sets default path parameter values.
+        *
+        * <p>
+        * Uses default values for specified parameters if not otherwise 
specified on the outgoing requests.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      RestClient <jv>client</jv> = RestClient
+        *              .<jsm>create</jsm>()
+        *              .pathDataDefault(<jsm>stringPart</jsm>(<js>"foo"</js>, 
()-&gt;<js>"bar"</js>));
+        *              .build();
+        * </p>
+        *
+        * <p>
+        * This is a shortcut for calling 
<c>pathData().setDefault(<jv>parts</jv>)</c>.
+        *
+        * @param parts The parts.
+        * @return This object (for method chaining).
+        * @see #pathData()
+        */
+       public RestClientBuilder pathDataDefault(NameValuePair...parts) {
+               pathData().setDefault(parts);
+               return this;
+       }
+
+       /**
+        * Appends a path parameter to all request bodies.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      RestClient <jv>client</jv> = RestClient
+        *              .<jsm>create</jsm>()
+        *              .pathData(<js>"foo"</js>, <js>"bar"</js>)
+        *              .build();
+        * </p>
+        *
+        * <p>
+        * This is a shortcut for calling 
<c>pathData().append(<jv>name</jv>,<jv>value</jv>)</c>.
+        *
+        * @param name The parameter name.
+        * @param value The parameter value.
+        * @return This object (for method chaining).
+        * @see #pathData()
+        */
+       @FluentSetter
+       public RestClientBuilder pathData(String name, String value) {
+               pathData().append(name, value);
+               return this;
+       }
+
+       /**
+        * Sets a path parameter with a dynamic value to all request bodies.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      RestClient <jv>client</jv> = RestClient
+        *              .<jsm>create</jsm>()
+        *              .pathData(<js>"foo"</js>, ()-&gt;<js>"bar"</js>)
+        *              .build();
+        * </p>
+        *
+        * <p>
+        * This is a shortcut for calling 
<c>pathData().append(<jv>name</jv>,<jv>value</jv>)</c>.
+        *
+        * @param name The parameter name.
+        * @param value The parameter value supplier.
+        * @return This object (for method chaining).
+        * @see #pathData()
+        */
+       @FluentSetter
+       public RestClientBuilder pathData(String name, Supplier<String> value) {
+               pathData().set(name, value);
+               return this;
+       }
+
+       
//------------------------------------------------------------------------------------------------------------------
        // Logging.
        
//------------------------------------------------------------------------------------------------------------------
 
@@ -1956,183 +2116,6 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // HTTP parts
-       
//-----------------------------------------------------------------------------------------------------------------
-
-       /**
-        * Sets a path parameter on all requests.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jk>import static</jk> org.apache.juneau.http.HttpParts.*;
-        *
-        *      RestClient <jv>client</jv> = RestClient
-        *              .<jsm>create</jsm>()
-        *              .pathData(<jsm>stringPart</jsm>(<js>"foo"</js>, 
<js>"bar"</js>))
-        *              .build();
-        * </p>
-        *
-        * <p>
-        * This is a shortcut for calling 
<c>getPathData().set(<jv>part</jv>)</c>.
-        *
-        * @param part
-        *      The parameter to set.
-        *      <br><jk>null</jk> values are ignored.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestClientBuilder pathData(NameValuePair part) {
-               getPathData().set(part);
-               return this;
-       }
-
-       /**
-        * Sets multiple path parameters on all requests.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jk>import static</jk> org.apache.juneau.http.HttpParts.*;
-        *
-        *      RestClient <jv>client</jv> = RestClient
-        *              .<jsm>create</jsm>()
-        *              .pathData(
-        *                      <jsm>stringPart</jsm>(<js>"foo"</js>, 
<js>"bar"</js>),
-        *                      <jsm>booleanPart</jsm>(<js>"baz"</js>, 
<jk>true</jk>)
-        *              )
-        *              .build();
-        * </p>
-        *
-        * <p>
-        * This is a shortcut for calling 
<c>getPathData().append(<jv>parts</jv>)</c>.
-        *
-        * @param parts
-        *      The path parameters.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestClientBuilder pathData(NameValuePair...parts) {
-               getPathData().append(parts);
-               return this;
-       }
-
-       /**
-        * Appends multiple path parameters to all requests.
-        *
-        * <p>
-        * This is a shortcut for calling 
<c>getPathData().append(<jv>parts</jv>)</c>.
-        *
-        * @param parts
-        *      The parts to set.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestClientBuilder pathData(PartList parts) {
-               getPathData().append(parts);
-               return this;
-       }
-
-       /**
-        * Appends a path parameter to all request bodies.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      RestClient <jv>client</jv> = RestClient
-        *              .<jsm>create</jsm>()
-        *              .pathData(<js>"foo"</js>, <js>"bar"</js>)
-        *              .build();
-        * </p>
-        *
-        * <p>
-        * This is a shortcut for calling 
<c>getPathData().append(<jv>name</jv>,<jv>value</jv>)</c>.
-        *
-        * @param name The parameter name.
-        * @param value The parameter value.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestClientBuilder pathData(String name, String value) {
-               getPathData().append(name, value);
-               return this;
-       }
-
-       /**
-        * Sets a path parameter with a dynamic value to all request bodies.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      RestClient <jv>client</jv> = RestClient
-        *              .<jsm>create</jsm>()
-        *              .pathData(<js>"foo"</js>, ()-&gt;<js>"bar"</js>)
-        *              .build();
-        * </p>
-        *
-        * <p>
-        * This is a shortcut for calling 
<c>pathData().append(<jv>name</jv>,<jv>value</jv>)</c>.
-        *
-        * @param name The parameter name.
-        * @param value The parameter value supplier.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestClientBuilder pathData(String name, Supplier<String> value) {
-               getPathData().set(name, value);
-               return this;
-       }
-
-       /**
-        * Sets default path parameter values.
-        *
-        * <p>
-        * Uses default values for specified parameters if not otherwise 
specified on the outgoing requests.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      RestClient <jv>client</jv> = RestClient
-        *              .<jsm>create</jsm>()
-        *              .defaultPathData(<jsm>stringPart</jsm>(<js>"foo"</js>, 
()-&gt;<js>"bar"</js>));
-        *              .build();
-        * </p>
-        *
-        * <p>
-        * This is a shortcut for calling 
<c>getPathData().setDefault(<jv>parts</jv>)</c>.
-        *
-        * @param parts The parts.
-        * @return This object (for method chaining).
-        */
-       public RestClientBuilder defaultPathData(NameValuePair...parts) {
-               getPathData().setDefault(parts);
-               return this;
-       }
-
-       /**
-        * Sets path parameters to all request URLs using free-form key/value 
pairs.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      RestClient <jv>client</jv> = RestClient
-        *              .<jsm>create</jsm>()
-        *              
.pathDataPairs(<js>"key1"</js>,<js>"val1"</js>,<js>"key2"</js>,<js>"val2"</js>)
-        *              .build();
-        * </p>
-        *
-        * @param pairs The form-data key/value pairs.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestClientBuilder pathDataPairs(String...pairs) {
-               if (pairs.length % 2 != 0)
-                       throw new RuntimeException("Odd number of parameters 
passed into pathDataPairs(String...)");
-               PartList.Builder b  = getPathData();
-               for (int i = 0; i < pairs.length; i+=2)
-                       b.append(pairs[i], pairs[i+1]);
-               return this;
-       }
-
-       
//-----------------------------------------------------------------------------------------------------------------
-       // Standard headers.
-       
//-----------------------------------------------------------------------------------------------------------------
-
-       
//-----------------------------------------------------------------------------------------------------------------
        // Properties
        
//-----------------------------------------------------------------------------------------------------------------
 
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
index 38b9f51..143da14 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
@@ -32,7 +32,6 @@ import org.apache.http.impl.client.*;
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.http.header.*;
-import org.apache.juneau.http.part.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.marshall.*;
@@ -1243,18 +1242,6 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder pathData(NameValuePair part) {
-               super.pathData(part);
-               return this;
-       }
-
-       @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder pathData(PartList parts) {
-               super.pathData(parts);
-               return this;
-       }
-
-       @Override /* GENERATED - RestClientBuilder */
        public MockRestClientBuilder pathData(String name, String value) {
                super.pathData(name, value);
                return this;
@@ -1267,12 +1254,6 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder pathDataPairs(String...pairs) {
-               super.pathDataPairs(pairs);
-               return this;
-       }
-
-       @Override /* GENERATED - RestClientBuilder */
        public MockRestClientBuilder plainText() {
                super.plainText();
                return this;

Reply via email to