/**
  * Returns the fully configured {@link OAuthService}
  *
  * @return fully configured {@link OAuthService}
  */
 public OAuthService build() {
   Preconditions.checkNotNull(api, "You must specify a valid api through the provider() method");
   Preconditions.checkEmptyString(apiKey, "You must provide an api key");
   Preconditions.checkEmptyString(apiSecret, "You must provide an api secret");
   return api.createService(
       new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, grantType, debugStream));
 }
 /**
  * Configures the api secret
  *
  * @param apiSecret The api secret for your application
  * @return the {@link ServiceBuilder} instance for method chaining
  */
 public ServiceBuilder apiSecret(String apiSecret) {
   Preconditions.checkEmptyString(apiSecret, "Invalid Api secret");
   this.apiSecret = apiSecret;
   return this;
 }
 /**
  * Configures the api key
  *
  * @param apiKey The api key for your application
  * @return the {@link ServiceBuilder} instance for method chaining
  */
 public ServiceBuilder apiKey(String apiKey) {
   Preconditions.checkEmptyString(apiKey, "Invalid Api key");
   this.apiKey = apiKey;
   return this;
 }
 /**
  * Configures the OAuth grant type . This is only necessary in some APIs (like Salesforce's).
  *
  * @param String - OAuth grant type
  * @return the {@link ServiceBuilder} instance for method chaining
  */
 public ServiceBuilder grantType(String type) {
   Preconditions.checkEmptyString(type, "Invalid grant type");
   this.grantType = type;
   return this;
 }
 /**
  * Configures the OAuth scope. This is only necessary in some APIs (like Google's).
  *
  * @param scope The OAuth scope
  * @return the {@link ServiceBuilder} instance for method chaining
  */
 public ServiceBuilder scope(String scope) {
   Preconditions.checkEmptyString(scope, "Invalid OAuth scope");
   this.scope = scope;
   return this;
 }