001/* 002 * Copyright (c) 2011-2018 Nexmo Inc 003 * 004 * Permission is hereby granted, free of charge, to any person obtaining a copy 005 * of this software and associated documentation files (the "Software"), to deal 006 * in the Software without restriction, including without limitation the rights 007 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 008 * copies of the Software, and to permit persons to whom the Software is 009 * furnished to do so, subject to the following conditions: 010 * 011 * The above copyright notice and this permission notice shall be included in 012 * all copies or substantial portions of the Software. 013 * 014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 017 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 019 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 020 * THE SOFTWARE. 021 */ 022package com.nexmo.client; 023 024public class HttpConfig { 025 private static final String DEFAULT_API_BASE_URI = "https://api.nexmo.com"; 026 private static final String DEFAULT_REST_BASE_URI = "https://rest.nexmo.com"; 027 private static final String DEFAULT_SNS_BASE_URI = "https://sns.nexmo.com"; 028 029 private String apiBaseUri; 030 private String restBaseUri; 031 private String snsBaseUri; 032 033 private HttpConfig(Builder builder) { 034 this.apiBaseUri = builder.apiBaseUri; 035 this.restBaseUri = builder.restBaseUri; 036 this.snsBaseUri = builder.snsBaseUri; 037 } 038 039 public String getApiBaseUri() { 040 return apiBaseUri; 041 } 042 043 public String getRestBaseUri() { 044 return restBaseUri; 045 } 046 047 public String getSnsBaseUri() { 048 return snsBaseUri; 049 } 050 051 public boolean isDefaultApiBaseUri() { 052 return DEFAULT_API_BASE_URI.equals(apiBaseUri); 053 } 054 055 public boolean isDefaultRestBaseUri() { 056 return DEFAULT_REST_BASE_URI.equals(restBaseUri); 057 } 058 059 public boolean isDefaultSnsBaseUri() { 060 return DEFAULT_SNS_BASE_URI.equals(snsBaseUri); 061 } 062 063 public String getVersionedApiBaseUri(String version) { 064 return appendVersionToUri(apiBaseUri, version); 065 } 066 067 public String getVersionedRestBaseUri(String version) { 068 return appendVersionToUri(restBaseUri, version); 069 } 070 071 public String getVersionedSnsBaseUri(String version) { 072 return appendVersionToUri(snsBaseUri, version); 073 } 074 075 private String appendVersionToUri(String uri, String version) { 076 return uri + "/" + version; 077 } 078 079 /** 080 * @return an HttpConfig object with sensible defaults. 081 */ 082 public static HttpConfig defaultConfig() { 083 return new Builder().build(); 084 } 085 086 public static Builder builder() { 087 return new Builder(); 088 } 089 090 public static class Builder { 091 private String apiBaseUri; 092 private String restBaseUri; 093 private String snsBaseUri; 094 095 public Builder() { 096 this.apiBaseUri = DEFAULT_API_BASE_URI; 097 this.restBaseUri = DEFAULT_REST_BASE_URI; 098 this.snsBaseUri = DEFAULT_SNS_BASE_URI; 099 } 100 101 /** 102 * @param apiBaseUri The base uri to use in place of {@link HttpConfig#DEFAULT_API_BASE_URI} 103 * 104 * @return The {@link Builder} to keep building. 105 */ 106 public Builder apiBaseUri(String apiBaseUri) { 107 this.apiBaseUri = sanitizeUri(apiBaseUri); 108 return this; 109 } 110 111 /** 112 * @param restBaseUri The base uri to use in place of {@link HttpConfig#DEFAULT_REST_BASE_URI} 113 * 114 * @return The {@link Builder} to keep building. 115 */ 116 public Builder restBaseUri(String restBaseUri) { 117 this.restBaseUri = sanitizeUri(restBaseUri); 118 return this; 119 } 120 121 /** 122 * @param snsBaseUri The base uri to use in place of {@link HttpConfig#DEFAULT_SNS_BASE_URI} 123 * 124 * @return The {@link Builder} to keep building. 125 */ 126 public Builder snsBaseUri(String snsBaseUri) { 127 this.snsBaseUri = sanitizeUri(snsBaseUri); 128 return this; 129 } 130 131 /** 132 * @param baseUri The base uri to use in place of {@link HttpConfig#DEFAULT_REST_BASE_URI}, {@link HttpConfig#DEFAULT_API_BASE_URI}, and {@link HttpConfig#DEFAULT_SNS_BASE_URI} 133 * 134 * @return The {@link Builder} to keep building. 135 */ 136 public Builder baseUri(String baseUri) { 137 String sanitizedUri = sanitizeUri(baseUri); 138 this.apiBaseUri = sanitizedUri; 139 this.restBaseUri = sanitizedUri; 140 this.snsBaseUri = sanitizedUri; 141 return this; 142 } 143 144 /** 145 * @return A new {@link HttpConfig} object from the stored builder options. 146 */ 147 public HttpConfig build() { 148 return new HttpConfig(this); 149 } 150 151 private String sanitizeUri(String uri) { 152 if (uri != null && uri.endsWith("/")) { 153 return uri.substring(0, uri.length() - 1); 154 } 155 156 return uri; 157 } 158 } 159}