/**
* This code was generated by
* \ / _ _ _| _ _
* | (_)\/(_)(_|\/| |(/_ v1.0.0
* / /
*/
package com.twilio.rest.chat.v2;
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 ServiceUpdater extends Updater<Service> {
private final String pathSid;
private String friendlyName;
private String defaultServiceRoleSid;
private String defaultChannelRoleSid;
private String defaultChannelCreatorRoleSid;
private Boolean readStatusEnabled;
private Boolean reachabilityEnabled;
private Integer typingIndicatorTimeout;
private Integer consumptionReportInterval;
private Boolean notificationsNewMessageEnabled;
private String notificationsNewMessageTemplate;
private String notificationsNewMessageSound;
private Boolean notificationsNewMessageBadgeCountEnabled;
private Boolean notificationsAddedToChannelEnabled;
private String notificationsAddedToChannelTemplate;
private String notificationsAddedToChannelSound;
private Boolean notificationsRemovedFromChannelEnabled;
private String notificationsRemovedFromChannelTemplate;
private String notificationsRemovedFromChannelSound;
private Boolean notificationsInvitedToChannelEnabled;
private String notificationsInvitedToChannelTemplate;
private String notificationsInvitedToChannelSound;
private URI preWebhookUrl;
private URI postWebhookUrl;
private HttpMethod webhookMethod;
private List<String> webhookFilters;
private Integer limitsChannelMembers;
private Integer limitsUserChannels;
/**
* Construct a new ServiceUpdater.
*
* @param pathSid The sid
*/
public ServiceUpdater(final String pathSid) {
this.pathSid = pathSid;
}
/**
* The friendly_name.
*
* @param friendlyName The friendly_name
* @return this
*/
public ServiceUpdater setFriendlyName(final String friendlyName) {
this.friendlyName = friendlyName;
return this;
}
/**
* The default_service_role_sid.
*
* @param defaultServiceRoleSid The default_service_role_sid
* @return this
*/
public ServiceUpdater setDefaultServiceRoleSid(final String defaultServiceRoleSid) {
this.defaultServiceRoleSid = defaultServiceRoleSid;
return this;
}
/**
* The default_channel_role_sid.
*
* @param defaultChannelRoleSid The default_channel_role_sid
* @return this
*/
public ServiceUpdater setDefaultChannelRoleSid(final String defaultChannelRoleSid) {
this.defaultChannelRoleSid = defaultChannelRoleSid;
return this;
}
/**
* The default_channel_creator_role_sid.
*
* @param defaultChannelCreatorRoleSid The default_channel_creator_role_sid
* @return this
*/
public ServiceUpdater setDefaultChannelCreatorRoleSid(final String defaultChannelCreatorRoleSid) {
this.defaultChannelCreatorRoleSid = defaultChannelCreatorRoleSid;
return this;
}
/**
* The read_status_enabled.
*
* @param readStatusEnabled The read_status_enabled
* @return this
*/
public ServiceUpdater setReadStatusEnabled(final Boolean readStatusEnabled) {
this.readStatusEnabled = readStatusEnabled;
return this;
}
/**
* The reachability_enabled.
*
* @param reachabilityEnabled The reachability_enabled
* @return this
*/
public ServiceUpdater setReachabilityEnabled(final Boolean reachabilityEnabled) {
this.reachabilityEnabled = reachabilityEnabled;
return this;
}
/**
* The typing_indicator_timeout.
*
* @param typingIndicatorTimeout The typing_indicator_timeout
* @return this
*/
public ServiceUpdater setTypingIndicatorTimeout(final Integer typingIndicatorTimeout) {
this.typingIndicatorTimeout = typingIndicatorTimeout;
return this;
}
/**
* The consumption_report_interval.
*
* @param consumptionReportInterval The consumption_report_interval
* @return this
*/
public ServiceUpdater setConsumptionReportInterval(final Integer consumptionReportInterval) {
this.consumptionReportInterval = consumptionReportInterval;
return this;
}
/**
* The notifications.new_message.enabled.
*
* @param notificationsNewMessageEnabled The notifications.new_message.enabled
* @return this
*/
public ServiceUpdater setNotificationsNewMessageEnabled(final Boolean notificationsNewMessageEnabled) {
this.notificationsNewMessageEnabled = notificationsNewMessageEnabled;
return this;
}
/**
* The notifications.new_message.template.
*
* @param notificationsNewMessageTemplate The notifications.new_message.template
* @return this
*/
public ServiceUpdater setNotificationsNewMessageTemplate(final String notificationsNewMessageTemplate) {
this.notificationsNewMessageTemplate = notificationsNewMessageTemplate;
return this;
}
/**
* The notifications.new_message.sound.
*
* @param notificationsNewMessageSound The notifications.new_message.sound
* @return this
*/
public ServiceUpdater setNotificationsNewMessageSound(final String notificationsNewMessageSound) {
this.notificationsNewMessageSound = notificationsNewMessageSound;
return this;
}
/**
* The notifications.new_message.badge_count_enabled.
*
* @param notificationsNewMessageBadgeCountEnabled The
* notifications.new_message.badge_count_enabled
* @return this
*/
public ServiceUpdater setNotificationsNewMessageBadgeCountEnabled(final Boolean notificationsNewMessageBadgeCountEnabled) {
this.notificationsNewMessageBadgeCountEnabled = notificationsNewMessageBadgeCountEnabled;
return this;
}
/**
* The notifications.added_to_channel.enabled.
*
* @param notificationsAddedToChannelEnabled The
* notifications.added_to_channel.enabled
* @return this
*/
public ServiceUpdater setNotificationsAddedToChannelEnabled(final Boolean notificationsAddedToChannelEnabled) {
this.notificationsAddedToChannelEnabled = notificationsAddedToChannelEnabled;
return this;
}
/**
* The notifications.added_to_channel.template.
*
* @param notificationsAddedToChannelTemplate The
* notifications.added_to_channel.template
* @return this
*/
public ServiceUpdater setNotificationsAddedToChannelTemplate(final String notificationsAddedToChannelTemplate) {
this.notificationsAddedToChannelTemplate = notificationsAddedToChannelTemplate;
return this;
}
/**
* The notifications.added_to_channel.sound.
*
* @param notificationsAddedToChannelSound The
* notifications.added_to_channel.sound
* @return this
*/
public ServiceUpdater setNotificationsAddedToChannelSound(final String notificationsAddedToChannelSound) {
this.notificationsAddedToChannelSound = notificationsAddedToChannelSound;
return this;
}
/**
* The notifications.removed_from_channel.enabled.
*
* @param notificationsRemovedFromChannelEnabled The
* notifications.removed_from_channel.enabled
* @return this
*/
public ServiceUpdater setNotificationsRemovedFromChannelEnabled(final Boolean notificationsRemovedFromChannelEnabled) {
this.notificationsRemovedFromChannelEnabled = notificationsRemovedFromChannelEnabled;
return this;
}
/**
* The notifications.removed_from_channel.template.
*
* @param notificationsRemovedFromChannelTemplate The
* notifications.removed_from_channel.template
* @return this
*/
public ServiceUpdater setNotificationsRemovedFromChannelTemplate(final String notificationsRemovedFromChannelTemplate) {
this.notificationsRemovedFromChannelTemplate = notificationsRemovedFromChannelTemplate;
return this;
}
/**
* The notifications.removed_from_channel.sound.
*
* @param notificationsRemovedFromChannelSound The
* notifications.removed_from_channel.sound
* @return this
*/
public ServiceUpdater setNotificationsRemovedFromChannelSound(final String notificationsRemovedFromChannelSound) {
this.notificationsRemovedFromChannelSound = notificationsRemovedFromChannelSound;
return this;
}
/**
* The notifications.invited_to_channel.enabled.
*
* @param notificationsInvitedToChannelEnabled The
* notifications.invited_to_channel.enabled
* @return this
*/
public ServiceUpdater setNotificationsInvitedToChannelEnabled(final Boolean notificationsInvitedToChannelEnabled) {
this.notificationsInvitedToChannelEnabled = notificationsInvitedToChannelEnabled;
return this;
}
/**
* The notifications.invited_to_channel.template.
*
* @param notificationsInvitedToChannelTemplate The
* notifications.invited_to_channel.template
* @return this
*/
public ServiceUpdater setNotificationsInvitedToChannelTemplate(final String notificationsInvitedToChannelTemplate) {
this.notificationsInvitedToChannelTemplate = notificationsInvitedToChannelTemplate;
return this;
}
/**
* The notifications.invited_to_channel.sound.
*
* @param notificationsInvitedToChannelSound The
* notifications.invited_to_channel.sound
* @return this
*/
public ServiceUpdater setNotificationsInvitedToChannelSound(final String notificationsInvitedToChannelSound) {
this.notificationsInvitedToChannelSound = notificationsInvitedToChannelSound;
return this;
}
/**
* The pre_webhook_url.
*
* @param preWebhookUrl The pre_webhook_url
* @return this
*/
public ServiceUpdater setPreWebhookUrl(final URI preWebhookUrl) {
this.preWebhookUrl = preWebhookUrl;
return this;
}
/**
* The pre_webhook_url.
*
* @param preWebhookUrl The pre_webhook_url
* @return this
*/
public ServiceUpdater setPreWebhookUrl(final String preWebhookUrl) {
return setPreWebhookUrl(Promoter.uriFromString(preWebhookUrl));
}
/**
* The post_webhook_url.
*
* @param postWebhookUrl The post_webhook_url
* @return this
*/
public ServiceUpdater setPostWebhookUrl(final URI postWebhookUrl) {
this.postWebhookUrl = postWebhookUrl;
return this;
}
/**
* The post_webhook_url.
*
* @param postWebhookUrl The post_webhook_url
* @return this
*/
public ServiceUpdater setPostWebhookUrl(final String postWebhookUrl) {
return setPostWebhookUrl(Promoter.uriFromString(postWebhookUrl));
}
/**
* The webhook_method.
*
* @param webhookMethod The webhook_method
* @return this
*/
public ServiceUpdater setWebhookMethod(final HttpMethod webhookMethod) {
this.webhookMethod = webhookMethod;
return this;
}
/**
* The webhook_filters.
*
* @param webhookFilters The webhook_filters
* @return this
*/
public ServiceUpdater setWebhookFilters(final List<String> webhookFilters) {
this.webhookFilters = webhookFilters;
return this;
}
/**
* The webhook_filters.
*
* @param webhookFilters The webhook_filters
* @return this
*/
public ServiceUpdater setWebhookFilters(final String webhookFilters) {
return setWebhookFilters(Promoter.listOfOne(webhookFilters));
}
/**
* The limits.channel_members.
*
* @param limitsChannelMembers The limits.channel_members
* @return this
*/
public ServiceUpdater setLimitsChannelMembers(final Integer limitsChannelMembers) {
this.limitsChannelMembers = limitsChannelMembers;
return this;
}
/**
* The limits.user_channels.
*
* @param limitsUserChannels The limits.user_channels
* @return this
*/
public ServiceUpdater setLimitsUserChannels(final Integer limitsUserChannels) {
this.limitsUserChannels = limitsUserChannels;
return this;
}
/**
* Make the request to the Twilio API to perform the update.
*
* @param client TwilioRestClient with which to make the request
* @return Updated Service
*/
@Override
@SuppressWarnings("checkstyle:linelength")
public Service update(final TwilioRestClient client) {
Request request = new Request(
HttpMethod.POST,
Domains.CHAT.toString(),
"/v2/Services/" + this.pathSid + "",
client.getRegion()
);
addPostParams(request);
Response response = client.request(request);
if (response == null) {
throw new ApiConnectionException("Service 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 Service.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 (friendlyName != null) {
request.addPostParam("FriendlyName", friendlyName);
}
if (defaultServiceRoleSid != null) {
request.addPostParam("DefaultServiceRoleSid", defaultServiceRoleSid);
}
if (defaultChannelRoleSid != null) {
request.addPostParam("DefaultChannelRoleSid", defaultChannelRoleSid);
}
if (defaultChannelCreatorRoleSid != null) {
request.addPostParam("DefaultChannelCreatorRoleSid", defaultChannelCreatorRoleSid);
}
if (readStatusEnabled != null) {
request.addPostParam("ReadStatusEnabled", readStatusEnabled.toString());
}
if (reachabilityEnabled != null) {
request.addPostParam("ReachabilityEnabled", reachabilityEnabled.toString());
}
if (typingIndicatorTimeout != null) {
request.addPostParam("TypingIndicatorTimeout", typingIndicatorTimeout.toString());
}
if (consumptionReportInterval != null) {
request.addPostParam("ConsumptionReportInterval", consumptionReportInterval.toString());
}
if (notificationsNewMessageEnabled != null) {
request.addPostParam("Notifications.NewMessage.Enabled", notificationsNewMessageEnabled.toString());
}
if (notificationsNewMessageTemplate != null) {
request.addPostParam("Notifications.NewMessage.Template", notificationsNewMessageTemplate);
}
if (notificationsNewMessageSound != null) {
request.addPostParam("Notifications.NewMessage.Sound", notificationsNewMessageSound);
}
if (notificationsNewMessageBadgeCountEnabled != null) {
request.addPostParam("Notifications.NewMessage.BadgeCountEnabled", notificationsNewMessageBadgeCountEnabled.toString());
}
if (notificationsAddedToChannelEnabled != null) {
request.addPostParam("Notifications.AddedToChannel.Enabled", notificationsAddedToChannelEnabled.toString());
}
if (notificationsAddedToChannelTemplate != null) {
request.addPostParam("Notifications.AddedToChannel.Template", notificationsAddedToChannelTemplate);
}
if (notificationsAddedToChannelSound != null) {
request.addPostParam("Notifications.AddedToChannel.Sound", notificationsAddedToChannelSound);
}
if (notificationsRemovedFromChannelEnabled != null) {
request.addPostParam("Notifications.RemovedFromChannel.Enabled", notificationsRemovedFromChannelEnabled.toString());
}
if (notificationsRemovedFromChannelTemplate != null) {
request.addPostParam("Notifications.RemovedFromChannel.Template", notificationsRemovedFromChannelTemplate);
}
if (notificationsRemovedFromChannelSound != null) {
request.addPostParam("Notifications.RemovedFromChannel.Sound", notificationsRemovedFromChannelSound);
}
if (notificationsInvitedToChannelEnabled != null) {
request.addPostParam("Notifications.InvitedToChannel.Enabled", notificationsInvitedToChannelEnabled.toString());
}
if (notificationsInvitedToChannelTemplate != null) {
request.addPostParam("Notifications.InvitedToChannel.Template", notificationsInvitedToChannelTemplate);
}
if (notificationsInvitedToChannelSound != null) {
request.addPostParam("Notifications.InvitedToChannel.Sound", notificationsInvitedToChannelSound);
}
if (preWebhookUrl != null) {
request.addPostParam("PreWebhookUrl", preWebhookUrl.toString());
}
if (postWebhookUrl != null) {
request.addPostParam("PostWebhookUrl", postWebhookUrl.toString());
}
if (webhookMethod != null) {
request.addPostParam("WebhookMethod", webhookMethod.toString());
}
if (webhookFilters != null) {
for (String prop : webhookFilters) {
request.addPostParam("WebhookFilters", prop);
}
}
if (limitsChannelMembers != null) {
request.addPostParam("Limits.ChannelMembers", limitsChannelMembers.toString());
}
if (limitsUserChannels != null) {
request.addPostParam("Limits.UserChannels", limitsUserChannels.toString());
}
}
}