/// <summary>
        /// Build the OAuthFlow instance.
        /// </summary>
        /// <returns> the OAuthFlow instance </returns>
        /// <exception cref="System.InvalidOperationException"> if ClientId, ClientSecret or RedirectURL isn't set yet. </exception>
        public virtual OAuthFlow Build()
        {
            if (httpClient == null)
            {
                httpClient = new DefaultHttpClient();
            }

            if (tokenURL == null)
            {
                tokenURL = DEFAULT_TOKEN_URL;
            }

            if (authorizationURL == null)
            {
                authorizationURL = DEFAULT_AUTHORIZATION_URL;
            }

            if (jsonSerializer == null)
            {
                jsonSerializer = new JsonNetSerializer();
            }

            if (clientId == null || clientSecret == null || redirectURL == null)
            {
                throw new InvalidOperationException();
            }

            return(new OAuthFlowImpl(clientId, clientSecret, redirectURL, authorizationURL, tokenURL, httpClient, jsonSerializer));
        }
        /// <summary>
        /// <para>Set the JsonSerializer.</para>
        /// </summary>
        /// <param name="jsonSerializer"> the JsonSerializer </param>
        /// <returns> the oAuthFlowBuilder </returns>
        /// <exception cref="System.InvalidOperationException"> if any argument is null/empty string </exception>
        public virtual OAuthFlowBuilder SetJsonSerializer(JsonSerializer jsonSerializer)
        {
            Util.ThrowIfNull(jsonSerializer);

            this.jsonSerializer = jsonSerializer;
            return(this);
        }
        /// <summary>
        /// <para>Set the JsonSerializer.</para>
        /// </summary>
        /// <param name="jsonSerializer"> the JsonSerializer </param>
        /// <returns> the oAuthFlowBuilder </returns>
        /// <exception cref="System.InvalidOperationException"> if any argument is null/empty string </exception>
        public virtual OAuthFlowBuilder SetJsonSerializer(JsonSerializer jsonSerializer)
        {
            Util.ThrowIfNull(jsonSerializer);

            this.jsonSerializer = jsonSerializer;
            return this;
        }
        /// <summary>
        /// Build the OAuthFlow instance.
        /// </summary>
        /// <returns> the OAuthFlow instance </returns>
        /// <exception cref="System.InvalidOperationException"> if ClientId, ClientSecret or RedirectURL isn't set yet. </exception>
        public virtual OAuthFlow Build()
        {
            if (httpClient == null)
            {
                httpClient = new DefaultHttpClient();
            }

            if (tokenURL == null)
            {
                tokenURL = DEFAULT_TOKEN_URL;
            }

            if (authorizationURL == null)
            {
                authorizationURL = DEFAULT_AUTHORIZATION_URL;
            }

            if (jsonSerializer == null)
            {
                jsonSerializer = new JsonNetSerializer();
            }

            if (clientId == null || clientSecret == null || redirectURL == null)
            {
                throw new InvalidOperationException();
            }

            return new OAuthFlowImpl(clientId, clientSecret, redirectURL, authorizationURL, tokenURL, httpClient, jsonSerializer);
        }