Skip to content

Commit

Permalink
Merge pull request #53 from contentful/client-builder
Browse files Browse the repository at this point in the history
Pass client builder to private constructor
  • Loading branch information
tomxor committed Dec 1, 2014
2 parents 4d57a26 + ad238b4 commit 42c7a4f
Showing 1 changed file with 62 additions and 51 deletions.
113 changes: 62 additions & 51 deletions src/main/java/com/contentful/java/cda/CDAClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,15 @@ public class CDAClient {
// Executors
ExecutorService executorService;

private CDAClient() {
}
private CDAClient(Builder builder) {
if (builder.accessToken == null) {
throw new IllegalArgumentException("Access token must be defined.");
}

if (builder.spaceKey == null) {
throw new IllegalArgumentException("Space ID must be defined.");
}

/**
* Initialization method - should be called once all configuration properties are set.
*/
private void init(Builder builder) {
// Initialize members
this.customTypesMap = new HashMap<String, Class<?>>();
this.spaceKey = builder.spaceKey;
this.accessToken = builder.accessToken;
Expand All @@ -102,37 +103,10 @@ private void init(Builder builder) {
new RestAdapter.Builder().setConverter(new GsonConverter(gson))
.setRequestInterceptor(getRequestInterceptor());

String endpoint;
if (builder.previewMode) {
endpoint = Constants.ENDPOINT_PREVIEW;
} else {
endpoint = Constants.ENDPOINT_CDA;
}

// SSL
if (builder.dontUseSSL) {
httpScheme = Constants.SCHEME_HTTP;
} else {
httpScheme = Constants.SCHEME_HTTPS;
}

restBuilder.setEndpoint(String.format("%s://%s",
httpScheme, endpoint));

// Client provider
if (builder.clientProvider != null) {
restBuilder.setClient(builder.clientProvider);
}

// Error handler
if (builder.errorHandler != null) {
restBuilder.setErrorHandler(builder.errorHandler);
}

// Log level
if (builder.logLevel != null) {
restBuilder.setLogLevel(builder.logLevel);
}
setEndPoint(builder, restBuilder);
setClientProvider(builder, restBuilder);
setErrorHandler(builder, restBuilder);
setLogLevel(builder, restBuilder);

// Create a Retrofit service
service = restBuilder.build().create(CDAService.class);
Expand All @@ -154,6 +128,42 @@ public void run() {
});
}

private void setLogLevel(Builder builder, RestAdapter.Builder restBuilder) {
if (builder.logLevel != null) {
restBuilder.setLogLevel(builder.logLevel);
}
}

private void setErrorHandler(Builder builder, RestAdapter.Builder restBuilder) {
if (builder.errorHandler != null) {
restBuilder.setErrorHandler(builder.errorHandler);
}
}

private void setClientProvider(Builder builder, RestAdapter.Builder restBuilder) {
if (builder.clientProvider != null) {
restBuilder.setClient(builder.clientProvider);
}
}

private void setEndPoint(Builder builder, RestAdapter.Builder restBuilder) {
String endpoint;
if (builder.previewMode) {
endpoint = Constants.ENDPOINT_PREVIEW;
} else {
endpoint = Constants.ENDPOINT_CDA;
}

// SSL
if (builder.secure) {
httpScheme = Constants.SCHEME_HTTPS;
} else {
httpScheme = Constants.SCHEME_HTTP;
}

restBuilder.setEndpoint(String.format("%s://%s", httpScheme, endpoint));
}

/**
* Initialize {@link com.google.gson.Gson} instances.
*/
Expand Down Expand Up @@ -817,14 +827,18 @@ private String getUserAgent() {
*/
public static class Builder {
// Configuration
private String accessToken;

private String spaceKey;
private Client.Provider clientProvider;
private ErrorHandler errorHandler;
private boolean dontUseSSL = false;
private RestAdapter.LogLevel logLevel;
private boolean previewMode = false;
String accessToken;
String spaceKey;
Client.Provider clientProvider;
ErrorHandler errorHandler;
RestAdapter.LogLevel logLevel;
boolean secure;
boolean previewMode;

public Builder() {
// Default configuration
this.secure = true;
}

/**
* Sets the access token to be used with this client.
Expand Down Expand Up @@ -928,7 +942,7 @@ public Builder setSpaceKey(String spaceKey) {
* @return this {@code Builder} instance
*/
public Builder noSSL() {
this.dontUseSSL = true;
this.secure = false;
return this;
}

Expand All @@ -947,10 +961,7 @@ public Builder preview() {
* @return Client instance
*/
public CDAClient build() {
CDAClient client = new CDAClient();
client.init(this);

return client;
return new CDAClient(this);
}
}
}

0 comments on commit 42c7a4f

Please sign in to comment.