/**
* This code was generated by
* \ / _ _ _| _ _
* | (_)\/(_)(_|\/| |(/_ v1.0.0
* / /
*/
package com.twilio.rest.api.v2010.account;
import com.twilio.base.Updater;
import com.twilio.converter.Promoter;
import com.twilio.exception.ApiConnectionException;
import com.twilio.exception.ApiException;
import com.twilio.exception.RestException;
import com.twilio.http.HttpMethod;
import com.twilio.http.Request;
import com.twilio.http.Response;
import com.twilio.http.TwilioRestClient;
import com.twilio.rest.Domains;
import java.net.URI;
import java.util.List;
public class ConnectAppUpdater extends Updater<ConnectApp> {
private String pathAccountSid;
private final String pathSid;
private URI authorizeRedirectUrl;
private String companyName;
private HttpMethod deauthorizeCallbackMethod;
private URI deauthorizeCallbackUrl;
private String description;
private String friendlyName;
private URI homepageUrl;
private List<ConnectApp.Permission> permissions;
/**
* Construct a new ConnectAppUpdater.
*
* @param pathSid The sid
*/
public ConnectAppUpdater(final String pathSid) {
this.pathSid = pathSid;
}
/**
* Construct a new ConnectAppUpdater.
*
* @param pathAccountSid The account_sid
* @param pathSid The sid
*/
public ConnectAppUpdater(final String pathAccountSid,
final String pathSid) {
this.pathAccountSid = pathAccountSid;
this.pathSid = pathSid;
}
/**
* The URL the user's browser will redirect to after Twilio authenticates the
* user and obtains authorization for this Connect App..
*
* @param authorizeRedirectUrl URIL Twilio sends requests when users authorize
* @return this
*/
public ConnectAppUpdater setAuthorizeRedirectUrl(final URI authorizeRedirectUrl) {
this.authorizeRedirectUrl = authorizeRedirectUrl;
return this;
}
/**
* The URL the user's browser will redirect to after Twilio authenticates the
* user and obtains authorization for this Connect App..
*
* @param authorizeRedirectUrl URIL Twilio sends requests when users authorize
* @return this
*/
public ConnectAppUpdater setAuthorizeRedirectUrl(final String authorizeRedirectUrl) {
return setAuthorizeRedirectUrl(Promoter.uriFromString(authorizeRedirectUrl));
}
/**
* The company name set for this Connect App..
*
* @param companyName The company name set for this Connect App.
* @return this
*/
public ConnectAppUpdater setCompanyName(final String companyName) {
this.companyName = companyName;
return this;
}
/**
* The HTTP method to be used when making a request to the
* `DeauthorizeCallbackUrl`..
*
* @param deauthorizeCallbackMethod HTTP method Twilio WIll use making requests
* to the url
* @return this
*/
public ConnectAppUpdater setDeauthorizeCallbackMethod(final HttpMethod deauthorizeCallbackMethod) {
this.deauthorizeCallbackMethod = deauthorizeCallbackMethod;
return this;
}
/**
* The URL to which Twilio will send a request when a user de-authorizes this
* Connect App..
*
* @param deauthorizeCallbackUrl URL Twilio will send a request when a user
* de-authorizes this app
* @return this
*/
public ConnectAppUpdater setDeauthorizeCallbackUrl(final URI deauthorizeCallbackUrl) {
this.deauthorizeCallbackUrl = deauthorizeCallbackUrl;
return this;
}
/**
* The URL to which Twilio will send a request when a user de-authorizes this
* Connect App..
*
* @param deauthorizeCallbackUrl URL Twilio will send a request when a user
* de-authorizes this app
* @return this
*/
public ConnectAppUpdater setDeauthorizeCallbackUrl(final String deauthorizeCallbackUrl) {
return setDeauthorizeCallbackUrl(Promoter.uriFromString(deauthorizeCallbackUrl));
}
/**
* A more detailed human readable description of the Connect App..
*
* @param description A more detailed human readable description
* @return this
*/
public ConnectAppUpdater setDescription(final String description) {
this.description = description;
return this;
}
/**
* A human readable name for the Connect App..
*
* @param friendlyName A human readable name for the Connect App.
* @return this
*/
public ConnectAppUpdater setFriendlyName(final String friendlyName) {
this.friendlyName = friendlyName;
return this;
}
/**
* The public URL where users can obtain more information about this Connect
* App..
*
* @param homepageUrl The URL users can obtain more information
* @return this
*/
public ConnectAppUpdater setHomepageUrl(final URI homepageUrl) {
this.homepageUrl = homepageUrl;
return this;
}
/**
* The public URL where users can obtain more information about this Connect
* App..
*
* @param homepageUrl The URL users can obtain more information
* @return this
*/
public ConnectAppUpdater setHomepageUrl(final String homepageUrl) {
return setHomepageUrl(Promoter.uriFromString(homepageUrl));
}
/**
* The set of permissions that your ConnectApp requests..
*
* @param permissions The set of permissions that your ConnectApp requests.
* @return this
*/
public ConnectAppUpdater setPermissions(final List<ConnectApp.Permission> permissions) {
this.permissions = permissions;
return this;
}
/**
* The set of permissions that your ConnectApp requests..
*
* @param permissions The set of permissions that your ConnectApp requests.
* @return this
*/
public ConnectAppUpdater setPermissions(final ConnectApp.Permission permissions) {
return setPermissions(Promoter.listOfOne(permissions));
}
/**
* Make the request to the Twilio API to perform the update.
*
* @param client TwilioRestClient with which to make the request
* @return Updated ConnectApp
*/
@Override
@SuppressWarnings("checkstyle:linelength")
public ConnectApp update(final TwilioRestClient client) {
this.pathAccountSid = this.pathAccountSid == null ? client.getAccountSid() : this.pathAccountSid;
Request request = new Request(
HttpMethod.POST,
Domains.API.toString(),
"/2010-04-01/Accounts/" + this.pathAccountSid + "/ConnectApps/" + this.pathSid + ".json",
client.getRegion()
);
addPostParams(request);
Response response = client.request(request);
if (response == null) {
throw new ApiConnectionException("ConnectApp update failed: Unable to connect to server");
} else if (!TwilioRestClient.SUCCESS.apply(response.getStatusCode())) {
RestException restException = RestException.fromJson(response.getStream(), client.getObjectMapper());
if (restException == null) {
throw new ApiException("Server Error, no content");
}
throw new ApiException(
restException.getMessage(),
restException.getCode(),
restException.getMoreInfo(),
restException.getStatus(),
null
);
}
return ConnectApp.fromJson(response.getStream(), client.getObjectMapper());
}
/**
* Add the requested post parameters to the Request.
*
* @param request Request to add post params to
*/
private void addPostParams(final Request request) {
if (authorizeRedirectUrl != null) {
request.addPostParam("AuthorizeRedirectUrl", authorizeRedirectUrl.toString());
}
if (companyName != null) {
request.addPostParam("CompanyName", companyName);
}
if (deauthorizeCallbackMethod != null) {
request.addPostParam("DeauthorizeCallbackMethod", deauthorizeCallbackMethod.toString());
}
if (deauthorizeCallbackUrl != null) {
request.addPostParam("DeauthorizeCallbackUrl", deauthorizeCallbackUrl.toString());
}
if (description != null) {
request.addPostParam("Description", description);
}
if (friendlyName != null) {
request.addPostParam("FriendlyName", friendlyName);
}
if (homepageUrl != null) {
request.addPostParam("HomepageUrl", homepageUrl.toString());
}
if (permissions != null) {
for (ConnectApp.Permission prop : permissions) {
request.addPostParam("Permissions", prop.toString());
}
}
}
}