Skip to content

Commit 3d86cf9

Browse files
Allow client-side validation to be disabled via configuration
1 parent eaaa466 commit 3d86cf9

2 files changed

Lines changed: 63 additions & 2 deletions

File tree

src/main/java/engineer/nightowl/sonos/api/SonosApiConfiguration.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package engineer.nightowl.sonos.api;
22

33
import org.apache.commons.codec.binary.Base64;
4+
import org.apache.commons.lang3.builder.EqualsBuilder;
5+
import org.apache.commons.lang3.builder.HashCodeBuilder;
46
import org.apache.http.Header;
57
import org.apache.http.message.BasicHeader;
68

@@ -17,6 +19,7 @@ public class SonosApiConfiguration
1719
private String apiSecret;
1820
private String authBaseUrl;
1921
private String controlBaseUrl;
22+
private Boolean clientSideValidationEnabled;
2023

2124
/**
2225
* <p>Constructor for SonosApiConfiguration.</p>
@@ -111,10 +114,22 @@ public void setControlBaseUrl(final String controlBaseUrl)
111114
this.controlBaseUrl = controlBaseUrl;
112115
}
113116

117+
public Boolean isClientSideValidationEnabled()
118+
{
119+
return clientSideValidationEnabled;
120+
}
121+
122+
public void setClientSideValidationEnabled(Boolean clientSideValidationEnabled)
123+
{
124+
this.clientSideValidationEnabled = clientSideValidationEnabled;
125+
}
126+
127+
114128
public void loadDefaults()
115129
{
116130
setAuthBaseUrl("api.sonos.com");
117131
setControlBaseUrl("api.ws.sonos.com/control/api");
132+
setClientSideValidationEnabled(Boolean.TRUE);
118133
}
119134

120135
/**
@@ -129,4 +144,49 @@ public Header getAuthorizationHeader()
129144
final String headerValue = String.join(" ", "Basic", authBase64);
130145
return new BasicHeader("Authorization", headerValue);
131146
}
147+
148+
@Override
149+
public String toString()
150+
{
151+
return "SonosApiConfiguration{" +
152+
"applicationId='" + applicationId + '\'' +
153+
", apiKey='" + apiKey + '\'' +
154+
", apiSecret='" + apiSecret + '\'' +
155+
", authBaseUrl='" + authBaseUrl + '\'' +
156+
", controlBaseUrl='" + controlBaseUrl + '\'' +
157+
", clientSideValidationEnabled=" + clientSideValidationEnabled +
158+
'}';
159+
}
160+
161+
@Override
162+
public boolean equals(Object o)
163+
{
164+
if (this == o) return true;
165+
166+
if (o == null || getClass() != o.getClass()) return false;
167+
168+
SonosApiConfiguration that = (SonosApiConfiguration) o;
169+
170+
return new EqualsBuilder()
171+
.append(applicationId, that.applicationId)
172+
.append(apiKey, that.apiKey)
173+
.append(apiSecret, that.apiSecret)
174+
.append(authBaseUrl, that.authBaseUrl)
175+
.append(controlBaseUrl, that.controlBaseUrl)
176+
.append(clientSideValidationEnabled, that.clientSideValidationEnabled)
177+
.isEquals();
178+
}
179+
180+
@Override
181+
public int hashCode()
182+
{
183+
return new HashCodeBuilder(17, 37)
184+
.append(applicationId)
185+
.append(apiKey)
186+
.append(apiSecret)
187+
.append(authBaseUrl)
188+
.append(controlBaseUrl)
189+
.append(clientSideValidationEnabled)
190+
.toHashCode();
191+
}
132192
}

src/main/java/engineer/nightowl/sonos/api/resource/BaseResource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,10 @@ <T, U> T postToApi(final Class<T> returnType, final String token, final String p
218218
final U content) throws SonosApiClientException, SonosApiError
219219
{
220220
final HttpPost request = getPostRequest(token, path);
221-
// If the content for the request has the ability to be validated, do so.
221+
final Boolean validationEnabled = apiClient.getConfiguration().isClientSideValidationEnabled();
222+
// If the content for the request has the ability to be validated, do so if enabled.
222223
// If the object is invalid, there's no point sending it to the API to be rejected.
223-
if (content instanceof Validatable)
224+
if (validationEnabled && content instanceof Validatable)
224225
{
225226
((Validatable) content).validate();
226227
}

0 commit comments

Comments
 (0)