diff --git a/pom.xml b/pom.xml index 9c48ce63..d69b0c45 100644 --- a/pom.xml +++ b/pom.xml @@ -160,6 +160,14 @@ 2.9.9 + + + + com.fasterxml.jackson.datatype + jackson-datatype-jdk8 + 2.9.9 + + org.slf4j slf4j-api diff --git a/src/main/java/com/treasuredata/client/AbstractTDClientBuilder.java b/src/main/java/com/treasuredata/client/AbstractTDClientBuilder.java index 64e969d6..7680479a 100644 --- a/src/main/java/com/treasuredata/client/AbstractTDClientBuilder.java +++ b/src/main/java/com/treasuredata/client/AbstractTDClientBuilder.java @@ -18,10 +18,10 @@ */ package com.treasuredata.client; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; +import java.util.Optional; import java.util.Properties; import static com.treasuredata.client.TDClientConfig.ENV_TD_CLIENT_APIKEY; @@ -50,13 +50,13 @@ */ public abstract class AbstractTDClientBuilder> { - protected Optional endpoint = Optional.absent(); - protected Optional port = Optional.absent(); + protected Optional endpoint = Optional.empty(); + protected Optional port = Optional.empty(); protected boolean useSSL = true; - protected Optional apiKey = Optional.absent(); - protected Optional user = Optional.absent(); - protected Optional password = Optional.absent(); - protected Optional proxy = Optional.absent(); + protected Optional apiKey = Optional.empty(); + protected Optional user = Optional.empty(); + protected Optional password = Optional.empty(); + protected Optional proxy = Optional.empty(); protected int retryLimit = 7; protected int retryInitialIntervalMillis = 500; protected int retryMaxIntervalMillis = 60000; @@ -73,7 +73,7 @@ private static Optional getConfigProperty(Properties p, TDClientConfig.T private static Optional getConfigProperty(Properties p, String key) { - return Optional.fromNullable(p.getProperty(key)); + return Optional.ofNullable(p.getProperty(key)); } private static Optional getConfigPropertyInt(Properties p, TDClientConfig.Type key) @@ -93,7 +93,7 @@ private static Optional getConfigPropertyInt(Properties p, String key) } } else { - return Optional.absent(); + return Optional.empty(); } } @@ -114,7 +114,7 @@ private static Optional getConfigPropertyBoolean(Properties p, String k } } else { - return Optional.absent(); + return Optional.empty(); } } @@ -130,7 +130,7 @@ private static Optional getConfigPropertyDouble(Properties p, TDClientCo } } else { - return Optional.absent(); + return Optional.empty(); } } @@ -169,24 +169,29 @@ protected AbstractTDClientBuilder(boolean loadTDConf) */ public BuilderImpl setProperties(Properties p) { - this.endpoint = getConfigProperty(p, API_ENDPOINT) - .or(getConfigProperty(p, "endpoint")) - .or(endpoint); - this.port = getConfigPropertyInt(p, API_PORT) - .or(getConfigPropertyInt(p, "port")) - .or(port); - this.useSSL = getConfigPropertyBoolean(p, USESSL) - .or(getConfigPropertyBoolean(p, "usessl")) - .or(useSSL); - this.apiKey = getConfigProperty(p, APIKEY) - .or(getConfigProperty(p, "apikey")) - .or(apiKey); - this.user = getConfigProperty(p, USER) - .or(getConfigProperty(p, "user")) - .or(user); - this.password = getConfigProperty(p, PASSOWRD) - .or(getConfigProperty(p, "password")) - .or(password); + this.endpoint = getConfigProperty(p, API_ENDPOINT).isPresent() + ? getConfigProperty(p, API_ENDPOINT) : getConfigProperty(p, "endpoint").isPresent() + ? getConfigProperty(p, "endpoint") : endpoint; + + this.port = getConfigPropertyInt(p, API_PORT).isPresent() + ? getConfigPropertyInt(p, API_PORT) : getConfigPropertyInt(p, "port").isPresent() + ? getConfigPropertyInt(p, "port") : port; + + this.useSSL = getConfigPropertyBoolean(p, USESSL).isPresent() + ? getConfigPropertyBoolean(p, USESSL).get() : getConfigPropertyBoolean(p, "usessl").isPresent() + ? getConfigPropertyBoolean(p, "usessl").get() : useSSL; + + this.apiKey = getConfigProperty(p, APIKEY).isPresent() + ? getConfigProperty(p, APIKEY) : getConfigProperty(p, "apikey").isPresent() + ? getConfigProperty(p, "apikey") : apiKey; + + this.user = getConfigProperty(p, USER).isPresent() + ? getConfigProperty(p, USER) : getConfigProperty(p, "user").isPresent() + ? getConfigProperty(p, "user") : user; + + this.password = getConfigProperty(p, PASSOWRD).isPresent() + ? getConfigProperty(p, PASSOWRD) : getConfigProperty(p, "password").isPresent() + ? getConfigProperty(p, "password") : password; // proxy boolean hasProxy = false; @@ -223,16 +228,24 @@ public BuilderImpl setProperties(Properties p) hasProxy = true; proxyConfig.setPassword(proxyPassword.get()); } - this.proxy = Optional.fromNullable(hasProxy ? proxyConfig.createProxyConfig() : null); + this.proxy = Optional.ofNullable(hasProxy ? proxyConfig.createProxyConfig() : null); // http client parameter - this.retryLimit = getConfigPropertyInt(p, RETRY_LIMIT).or(retryLimit); - this.retryInitialIntervalMillis = getConfigPropertyInt(p, RETRY_INITIAL_INTERVAL_MILLIS).or(retryInitialIntervalMillis); - this.retryMaxIntervalMillis = getConfigPropertyInt(p, RETRY_MAX_INTERVAL_MILLIS).or(retryMaxIntervalMillis); - this.retryMultiplier = getConfigPropertyDouble(p, RETRY_MULTIPLIER).or(retryMultiplier); - this.connectTimeoutMillis = getConfigPropertyInt(p, CONNECT_TIMEOUT_MILLIS).or(connectTimeoutMillis); - this.readTimeoutMillis = getConfigPropertyInt(p, READ_TIMEOUT_MILLIS).or(readTimeoutMillis); - this.connectionPoolSize = getConfigPropertyInt(p, CONNECTION_POOL_SIZE).or(connectionPoolSize); + + this.retryLimit = getConfigPropertyInt(p, RETRY_LIMIT).isPresent() + ? getConfigPropertyInt(p, RETRY_LIMIT).get() : retryLimit; + this.retryInitialIntervalMillis = getConfigPropertyInt(p, RETRY_INITIAL_INTERVAL_MILLIS).isPresent() + ? getConfigPropertyInt(p, RETRY_INITIAL_INTERVAL_MILLIS).get() : retryInitialIntervalMillis; + this.retryMaxIntervalMillis = getConfigPropertyInt(p, RETRY_MAX_INTERVAL_MILLIS).isPresent() + ? getConfigPropertyInt(p, RETRY_MAX_INTERVAL_MILLIS).get() : retryMaxIntervalMillis; + this.retryMultiplier = getConfigPropertyDouble(p, RETRY_MULTIPLIER).isPresent() + ? getConfigPropertyDouble(p, RETRY_MULTIPLIER).get() : retryMultiplier; + this.connectTimeoutMillis = getConfigPropertyInt(p, CONNECT_TIMEOUT_MILLIS).isPresent() + ? getConfigPropertyInt(p, CONNECT_TIMEOUT_MILLIS).get() : connectTimeoutMillis; + this.readTimeoutMillis = getConfigPropertyInt(p, READ_TIMEOUT_MILLIS).isPresent() + ? getConfigPropertyInt(p, READ_TIMEOUT_MILLIS).get() : readTimeoutMillis; + this.connectionPoolSize = getConfigPropertyInt(p, CONNECTION_POOL_SIZE).isPresent() + ? getConfigPropertyInt(p, CONNECTION_POOL_SIZE).get() : connectionPoolSize; return self(); } diff --git a/src/main/java/com/treasuredata/client/ProxyConfig.java b/src/main/java/com/treasuredata/client/ProxyConfig.java index 6e779c6d..aae46871 100644 --- a/src/main/java/com/treasuredata/client/ProxyConfig.java +++ b/src/main/java/com/treasuredata/client/ProxyConfig.java @@ -18,11 +18,11 @@ */ package com.treasuredata.client; -import com.google.common.base.Optional; - import java.net.URI; import java.net.URISyntaxException; +import java.util.Optional; + /** * Proxy configuration to access TD API */ @@ -102,8 +102,8 @@ public static class ProxyConfigBuilder private String host = "localhost"; private int port = 8080; private boolean useSSL = false; - private Optional user = Optional.absent(); - private Optional password = Optional.absent(); + private Optional user = Optional.empty(); + private Optional password = Optional.empty(); public ProxyConfigBuilder() { diff --git a/src/main/java/com/treasuredata/client/TDApiRequest.java b/src/main/java/com/treasuredata/client/TDApiRequest.java index ccabe43f..f32d28f7 100644 --- a/src/main/java/com/treasuredata/client/TDApiRequest.java +++ b/src/main/java/com/treasuredata/client/TDApiRequest.java @@ -18,7 +18,6 @@ */ package com.treasuredata.client; -import com.google.common.base.Optional; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; @@ -32,6 +31,7 @@ import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import static com.google.common.base.Preconditions.checkNotNull; @@ -142,12 +142,12 @@ public static class Builder private String path; private Map queryParams; private ImmutableMultimap.Builder headerParams; - private Optional postJson = Optional.absent(); - private Optional file = Optional.absent(); - private Optional content = Optional.absent(); + private Optional postJson = Optional.empty(); + private Optional file = Optional.empty(); + private Optional content = Optional.empty(); private int contentOffset; private int contentLength; - private Optional followRedirects = Optional.absent(); + private Optional followRedirects = Optional.empty(); Builder(TDHttpMethod method, String path) { diff --git a/src/main/java/com/treasuredata/client/TDClient.java b/src/main/java/com/treasuredata/client/TDClient.java index 37eb604f..a5d35001 100644 --- a/src/main/java/com/treasuredata/client/TDClient.java +++ b/src/main/java/com/treasuredata/client/TDClient.java @@ -24,7 +24,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; -import com.google.common.base.Optional; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -76,6 +75,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Properties; import java.util.regex.Pattern; @@ -237,13 +237,13 @@ protected ResultType doPost(String path, Map queryP protected ResultType doPost(String path, Class resultTypeClass) throws TDClientException { - return this.doPost(path, ImmutableMap.of(), Optional.absent(), resultTypeClass); + return this.doPost(path, ImmutableMap.of(), Optional.empty(), resultTypeClass); } protected ResultType doPost(String path, Map queryParam, Class resultTypeClass) throws TDClientException { - return this.doPost(path, queryParam, Optional.absent(), resultTypeClass); + return this.doPost(path, queryParam, Optional.empty(), resultTypeClass); } protected ResultType doPut(String path, Map queryParam, File file, Class resultTypeClass) @@ -343,7 +343,7 @@ public TDUserList listUsers() public String serverStatus() { // No API key is requried for server_status - return httpClient.call(TDApiRequest.Builder.GET("/v3/system/server_status").build(), Optional.absent()); + return httpClient.call(TDApiRequest.Builder.GET("/v3/system/server_status").build(), Optional.empty()); } @Override @@ -654,7 +654,7 @@ public String submit(TDJobRequest jobRequest) doPost( buildUrl("/v3/job/issue", jobRequest.getType().getType(), jobRequest.getDatabase()), queryParam, - jobRequest.getConfig().transform(new Function() + jobRequest.getConfig().map(new Function() { public String apply(ObjectNode config) { @@ -781,13 +781,13 @@ public void performBulkImportSession(String sessionName, Optional poolNa @Override public void performBulkImportSession(String sessionName, TDJob.Priority priority) { - performBulkImportSession(sessionName, Optional.absent(), priority); + performBulkImportSession(sessionName, Optional.empty(), priority); } @Override public void performBulkImportSession(String sessionName, Optional poolName, TDJob.Priority priority) { - Optional jsonBody = Optional.absent(); + Optional jsonBody = Optional.empty(); if (poolName.isPresent()) { jsonBody = Optional.of(JSONObject.toJSONString(ImmutableMap.of("pool_name", poolName.get()))); } @@ -1062,7 +1062,7 @@ public Optional tableDistribution(String databaseName, Stri return Optional.of(distribution); } catch (TDClientHttpNotFoundException e) { - return Optional.absent(); + return Optional.empty(); } } diff --git a/src/main/java/com/treasuredata/client/TDClientApi.java b/src/main/java/com/treasuredata/client/TDClientApi.java index 699f650f..22943534 100644 --- a/src/main/java/com/treasuredata/client/TDClientApi.java +++ b/src/main/java/com/treasuredata/client/TDClientApi.java @@ -19,7 +19,6 @@ package com.treasuredata.client; import com.google.common.base.Function; -import com.google.common.base.Optional; import com.google.common.collect.Multimap; import com.treasuredata.client.model.TDApiKey; import com.treasuredata.client.model.TDBulkImportSession; @@ -50,6 +49,7 @@ import java.io.InputStream; import java.util.Date; import java.util.List; +import java.util.Optional; /** * Treasure Data Client API diff --git a/src/main/java/com/treasuredata/client/TDClientConfig.java b/src/main/java/com/treasuredata/client/TDClientConfig.java index 35d59ead..3702633a 100644 --- a/src/main/java/com/treasuredata/client/TDClientConfig.java +++ b/src/main/java/com/treasuredata/client/TDClientConfig.java @@ -19,7 +19,6 @@ package com.treasuredata.client; import com.fasterxml.jackson.annotation.JsonCreator; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; import com.google.common.io.Files; @@ -33,6 +32,7 @@ import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Optional; import java.util.Properties; /** @@ -122,7 +122,7 @@ public static List knownProperties() int connectionPoolSize, Multimap headers) { - this.endpoint = endpoint.or("api.treasuredata.com"); + this.endpoint = endpoint.orElse("api.treasuredata.com"); this.port = port; this.useSSL = useSSL; this.apiKey = apiKey; diff --git a/src/main/java/com/treasuredata/client/TDClientException.java b/src/main/java/com/treasuredata/client/TDClientException.java index 49820131..71d00fb8 100644 --- a/src/main/java/com/treasuredata/client/TDClientException.java +++ b/src/main/java/com/treasuredata/client/TDClientException.java @@ -18,7 +18,7 @@ */ package com.treasuredata.client; -import com.google.common.base.Optional; +import java.util.Optional; import static com.google.common.base.Preconditions.checkNotNull; @@ -84,7 +84,7 @@ public TDClientException(ErrorType errorType, Exception cause) public TDClientException(ErrorType errorType, String message) { - this(errorType, message, Optional.absent()); + this(errorType, message, Optional.empty()); } public ErrorType getErrorType() diff --git a/src/main/java/com/treasuredata/client/TDClientHttpConflictException.java b/src/main/java/com/treasuredata/client/TDClientHttpConflictException.java index 02c5953a..0dd01490 100644 --- a/src/main/java/com/treasuredata/client/TDClientHttpConflictException.java +++ b/src/main/java/com/treasuredata/client/TDClientHttpConflictException.java @@ -18,7 +18,7 @@ */ package com.treasuredata.client; -import com.google.common.base.Optional; +import java.util.Optional; /** * On 409 conflict error (e.g., database already exists) @@ -42,6 +42,6 @@ public TDClientHttpConflictException(String errorMessage, String conflictsWith) public Optional getConflictsWith() { - return Optional.fromNullable(conflictsWith); + return Optional.ofNullable(conflictsWith); } } diff --git a/src/main/java/com/treasuredata/client/TDClientHttpException.java b/src/main/java/com/treasuredata/client/TDClientHttpException.java index 718b1fa6..89254028 100644 --- a/src/main/java/com/treasuredata/client/TDClientHttpException.java +++ b/src/main/java/com/treasuredata/client/TDClientHttpException.java @@ -18,9 +18,8 @@ */ package com.treasuredata.client; -import com.google.common.base.Optional; - import java.util.Date; +import java.util.Optional; /** * Exception class for reporting http server status code @@ -47,7 +46,7 @@ public int getStatusCode() public Optional getRetryAfter() { if (retryAfter == -1) { - return Optional.absent(); + return Optional.empty(); } else { return Optional.of(new Date(retryAfter)); diff --git a/src/main/java/com/treasuredata/client/TDHttpClient.java b/src/main/java/com/treasuredata/client/TDHttpClient.java index b87a41f8..63e5d02f 100644 --- a/src/main/java/com/treasuredata/client/TDHttpClient.java +++ b/src/main/java/com/treasuredata/client/TDHttpClient.java @@ -26,11 +26,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.datatype.guava.GuavaModule; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.base.Joiner; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import com.treasuredata.client.impl.ProxyAuthenticator; @@ -57,6 +57,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; @@ -85,6 +86,7 @@ public class TDHttpClient static ObjectMapper defaultObjectMapper = new ObjectMapper() .registerModule(new JsonOrgModule()) // for mapping query json strings into JSONObject .registerModule(new GuavaModule()) // for mapping to Guava Optional class + .registerModule(new Jdk8Module()) // for handling java.util.Optional correctly .configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); @@ -203,14 +205,14 @@ protected String getClientName() public Request prepareRequest(TDApiRequest apiRequest, Optional apiKeyCache) { String queryStr = ""; - String portStr = config.port.transform(new Function() + String portStr = config.port.map(new Function() { @Override public String apply(Integer input) { return ":" + input.toString(); } - }).or(""); + }).orElse(""); String requestUri = apiRequest.getPath().startsWith("http") ? apiRequest.getPath() : String.format("%s://%s%s%s", config.useSSL ? "https" : "http", config.endpoint, portStr, apiRequest.getPath()); @@ -248,7 +250,7 @@ public String apply(Integer input) } // Set API Key after setting the other headers - Optional apiKey = apiKeyCache.or(config.apiKey); + Optional apiKey = apiKeyCache.isPresent() ? apiKeyCache : config.apiKey; if (apiKey.isPresent()) { String auth; if (isNakedTD1Key(apiKey.get())) { @@ -334,7 +336,7 @@ protected static class RequestContext public RequestContext(TDClientConfig config, TDApiRequest apiRequest, Optional apiKeyCache) { - this(new ExponentialBackOff(config.retryInitialIntervalMillis, config.retryMaxIntervalMillis, config.retryMultiplier), apiRequest, apiKeyCache, Optional.absent()); + this(new ExponentialBackOff(config.retryInitialIntervalMillis, config.retryMaxIntervalMillis, config.retryMultiplier), apiRequest, apiKeyCache, Optional.empty()); } public RequestContext(ExponentialBackOff backoff, TDApiRequest apiRequest, Optional apiKeyCache, Optional rootCause) diff --git a/src/main/java/com/treasuredata/client/TDRequestErrorHandler.java b/src/main/java/com/treasuredata/client/TDRequestErrorHandler.java index 946941d3..b7542d24 100644 --- a/src/main/java/com/treasuredata/client/TDRequestErrorHandler.java +++ b/src/main/java/com/treasuredata/client/TDRequestErrorHandler.java @@ -1,7 +1,6 @@ package com.treasuredata.client; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Optional; import com.treasuredata.client.model.TDApiErrorMessage; import okhttp3.Response; import org.slf4j.Logger; @@ -25,6 +24,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -246,7 +246,7 @@ private static String parseConflictsWith(TDApiErrorMessage errorResponse) @VisibleForTesting public static Optional extractErrorResponse(Response response) { - Optional content = Optional.absent(); + Optional content = Optional.empty(); try { try { content = Optional.of(response.body().string()); @@ -261,12 +261,12 @@ public static Optional extractErrorResponse(Response response } else { // Error message from Proxy server etc. - return Optional.of(new TDApiErrorMessage("error", content.or("[empty]"), "error")); + return Optional.of(new TDApiErrorMessage("error", content.orElse("[empty]"), "error")); } } catch (IOException e) { - logger.warn("Failed to parse the error response {}: {}\n{}", response.request().url(), content.or("[empty]"), e.getMessage()); + logger.warn("Failed to parse the error response {}: {}\n{}", response.request().url(), content.orElse("[empty]"), e.getMessage()); } - return Optional.absent(); + return Optional.empty(); } } diff --git a/src/main/java/com/treasuredata/client/impl/ProxyAuthenticator.java b/src/main/java/com/treasuredata/client/impl/ProxyAuthenticator.java index 048434f2..03f34eec 100644 --- a/src/main/java/com/treasuredata/client/impl/ProxyAuthenticator.java +++ b/src/main/java/com/treasuredata/client/impl/ProxyAuthenticator.java @@ -18,7 +18,6 @@ */ package com.treasuredata.client.impl; -import com.google.common.base.Optional; import com.treasuredata.client.ProxyConfig; import com.treasuredata.client.TDClientException; import com.treasuredata.client.TDClientHttpException; @@ -31,6 +30,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; +import java.util.Optional; import static com.google.common.net.HttpHeaders.PROXY_AUTHORIZATION; @@ -42,7 +42,7 @@ public class ProxyAuthenticator { private final Logger logger = LoggerFactory.getLogger(ProxyAuthenticator.class); private final ProxyConfig proxyConfig; - private Optional proxyAuthCache = Optional.absent(); + private Optional proxyAuthCache = Optional.empty(); public ProxyAuthenticator(ProxyConfig proxyConfig) { @@ -62,7 +62,7 @@ public Request authenticate(Route route, Response response) if (!proxyAuthCache.isPresent()) { logger.debug("Proxy authorization requested for " + route.address()); proxyAuthCache = Optional.of( - Credentials.basic(proxyConfig.getUser().or(""), proxyConfig.getPassword().or("")) + Credentials.basic(proxyConfig.getUser().orElse(""), proxyConfig.getPassword().orElse("")) ); } return response.request().newBuilder() diff --git a/src/main/java/com/treasuredata/client/model/ObjectMappers.java b/src/main/java/com/treasuredata/client/model/ObjectMappers.java index 2e45ec42..d550aa8b 100644 --- a/src/main/java/com/treasuredata/client/model/ObjectMappers.java +++ b/src/main/java/com/treasuredata/client/model/ObjectMappers.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.guava.GuavaModule; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule; import com.google.common.annotations.VisibleForTesting; @@ -36,6 +37,7 @@ private static ObjectMapper createCompactMapper() ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JsonOrgModule()); mapper.registerModule(new GuavaModule().configureAbsentsAsNulls(false)); + mapper.registerModule(new Jdk8Module()); mapper.setSerializationInclusion(JsonInclude.Include.NON_ABSENT); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); return mapper; diff --git a/src/main/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequest.java b/src/main/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequest.java index 5d184dbe..c00edfa9 100644 --- a/src/main/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequest.java +++ b/src/main/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequest.java @@ -2,7 +2,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.base.Optional; + +import java.util.Optional; public class TDBulkLoadSessionStartRequest { @@ -21,20 +22,20 @@ public class TDBulkLoadSessionStartRequest TDBulkLoadSessionStartRequest(TDBulkLoadSessionStartRequestBuilder builder) { - this.scheduledTime = builder.getScheduledTime().orNull(); - this.domainKey = builder.getDomainKey().orNull(); + this.scheduledTime = builder.getScheduledTime().orElse(null); + this.domainKey = builder.getDomainKey().orElse(null); } @JsonProperty("scheduled_time") public Optional getScheduledTime() { - return Optional.fromNullable(scheduledTime); + return Optional.ofNullable(scheduledTime); } @JsonProperty("domain_key") public Optional getDomainKey() { - return Optional.fromNullable(domainKey); + return Optional.ofNullable(domainKey); } @Override diff --git a/src/main/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequestBuilder.java b/src/main/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequestBuilder.java index b8fcc612..616c2291 100644 --- a/src/main/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequestBuilder.java +++ b/src/main/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequestBuilder.java @@ -1,6 +1,6 @@ package com.treasuredata.client.model; -import com.google.common.base.Optional; +import java.util.Optional; public class TDBulkLoadSessionStartRequestBuilder { @@ -13,7 +13,7 @@ public class TDBulkLoadSessionStartRequestBuilder public Optional getScheduledTime() { - return Optional.fromNullable(scheduledTime); + return Optional.ofNullable(scheduledTime); } public TDBulkLoadSessionStartRequestBuilder setScheduledTime(String scheduledTime) @@ -29,13 +29,13 @@ public TDBulkLoadSessionStartRequestBuilder setScheduledTime(long scheduledTime) public TDBulkLoadSessionStartRequestBuilder setScheduledTime(Optional scheduledTime) { - this.scheduledTime = scheduledTime.orNull(); + this.scheduledTime = scheduledTime.orElse(null); return this; } public Optional getDomainKey() { - return Optional.fromNullable(domainKey); + return Optional.ofNullable(domainKey); } public TDBulkLoadSessionStartRequestBuilder setDomainKey(String domainKey) @@ -46,7 +46,7 @@ public TDBulkLoadSessionStartRequestBuilder setDomainKey(String domainKey) public TDBulkLoadSessionStartRequestBuilder setDomainKey(Optional domainKey) { - return setDomainKey(domainKey.orNull()); + return setDomainKey(domainKey.orElse(null)); } public TDBulkLoadSessionStartRequest build() diff --git a/src/main/java/com/treasuredata/client/model/TDColumnType.java b/src/main/java/com/treasuredata/client/model/TDColumnType.java index 5d18f902..fc3ce6c4 100644 --- a/src/main/java/com/treasuredata/client/model/TDColumnType.java +++ b/src/main/java/com/treasuredata/client/model/TDColumnType.java @@ -20,21 +20,21 @@ import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.treasuredata.client.model.impl.TDColumnTypeDeserializer; import java.io.Serializable; import java.util.List; +import java.util.Optional; @JsonDeserialize(using = TDColumnTypeDeserializer.class) public class TDColumnType implements Serializable { - public static final TDColumnType INT = new TDColumnType(TDTypeName.INT, Optional.>absent()); - public static final TDColumnType LONG = new TDColumnType(TDTypeName.LONG, Optional.>absent()); - public static final TDColumnType FLOAT = new TDColumnType(TDTypeName.FLOAT, Optional.>absent()); - public static final TDColumnType DOUBLE = new TDColumnType(TDTypeName.DOUBLE, Optional.>absent()); - public static final TDColumnType STRING = new TDColumnType(TDTypeName.STRING, Optional.>absent()); + public static final TDColumnType INT = new TDColumnType(TDTypeName.INT, Optional.>empty()); + public static final TDColumnType LONG = new TDColumnType(TDTypeName.LONG, Optional.>empty()); + public static final TDColumnType FLOAT = new TDColumnType(TDTypeName.FLOAT, Optional.>empty()); + public static final TDColumnType DOUBLE = new TDColumnType(TDTypeName.DOUBLE, Optional.>empty()); + public static final TDColumnType STRING = new TDColumnType(TDTypeName.STRING, Optional.>empty()); public static final List primitiveTypes = ImmutableList.of(INT, LONG, FLOAT, DOUBLE, STRING); @@ -49,12 +49,12 @@ public static TDColumnType newMapType(TDColumnType keyType, TDColumnType valueTy } private final TDTypeName typeName; - private final Optional> elementTypes; + private final List elementTypes; private TDColumnType(TDTypeName typeName, Optional> elementTypes) { this.typeName = typeName; - this.elementTypes = elementTypes; + this.elementTypes = elementTypes.isPresent() ? elementTypes.get() : null; } public TDTypeName getTypeName() @@ -64,7 +64,7 @@ public TDTypeName getTypeName() public boolean isPrimitive() { - return !elementTypes.isPresent(); + return elementTypes == null; } public boolean isArrayType() @@ -82,7 +82,7 @@ public TDColumnType getArrayElementType() if (!isArrayType()) { throw new UnsupportedOperationException("getArrayElementType is not supported for " + this); } - return elementTypes.get().get(0); + return elementTypes.get(0); } public TDColumnType getMapKeyType() @@ -90,7 +90,7 @@ public TDColumnType getMapKeyType() if (!isMapType()) { throw new UnsupportedOperationException("getmapKeyType is not supported for " + this); } - return elementTypes.get().get(0); + return elementTypes.get(0); } public TDColumnType getMapValueType() @@ -98,7 +98,7 @@ public TDColumnType getMapValueType() if (!isMapType()) { throw new UnsupportedOperationException("getMapValueType is not supported for " + this); } - return elementTypes.get().get(1); + return elementTypes.get(1); } @JsonValue diff --git a/src/main/java/com/treasuredata/client/model/TDDatabase.java b/src/main/java/com/treasuredata/client/model/TDDatabase.java index 7f4268e2..07ddad30 100644 --- a/src/main/java/com/treasuredata/client/model/TDDatabase.java +++ b/src/main/java/com/treasuredata/client/model/TDDatabase.java @@ -21,7 +21,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Objects; -import com.google.common.base.Optional; + +import java.util.Optional; @JsonCollectionRootName(value = "databases") public class TDDatabase diff --git a/src/main/java/com/treasuredata/client/model/TDExportJobRequest.java b/src/main/java/com/treasuredata/client/model/TDExportJobRequest.java index 55c05d47..8e6e3b86 100644 --- a/src/main/java/com/treasuredata/client/model/TDExportJobRequest.java +++ b/src/main/java/com/treasuredata/client/model/TDExportJobRequest.java @@ -18,11 +18,11 @@ */ package com.treasuredata.client.model; -import com.google.common.base.Optional; import org.immutables.builder.Builder; import org.immutables.value.Value; import java.util.Date; +import java.util.Optional; /** * @@ -68,7 +68,7 @@ public TDExportJobRequest( this.bucketName = bucketName; this.filePrefix = filePrefix; this.poolName = poolName; - this.domainKey = Optional.absent(); + this.domainKey = Optional.empty(); } private TDExportJobRequest(String database, String table, Date from, Date to, TDExportFileFormatType fileFormat, String accessKeyId, String secretAccessKey, String bucketName, String filePrefix, Optional poolName, Optional domainKey) diff --git a/src/main/java/com/treasuredata/client/model/TDExportResultJobRequest.java b/src/main/java/com/treasuredata/client/model/TDExportResultJobRequest.java index 56e508fe..9510a203 100644 --- a/src/main/java/com/treasuredata/client/model/TDExportResultJobRequest.java +++ b/src/main/java/com/treasuredata/client/model/TDExportResultJobRequest.java @@ -1,9 +1,10 @@ package com.treasuredata.client.model; -import com.google.common.base.Optional; import org.immutables.builder.Builder; import org.immutables.value.Value; +import java.util.Optional; + @Value.Style(typeBuilder = "TDExportResultJobRequestBuilder") public class TDExportResultJobRequest { @@ -47,9 +48,9 @@ static TDExportResultJobRequest of(String jobId, Optional resultConnectionSettings) { return new TDExportResultJobRequest(jobId, - resultOutput.or(""), - resultConnectionId.or(""), - resultConnectionSettings.or("")); + resultOutput.orElse(""), + resultConnectionId.orElse(""), + resultConnectionSettings.orElse("")); } public static TDExportResultJobRequestBuilder builder() diff --git a/src/main/java/com/treasuredata/client/model/TDJob.java b/src/main/java/com/treasuredata/client/model/TDJob.java index 35c58ba6..2e52a834 100644 --- a/src/main/java/com/treasuredata/client/model/TDJob.java +++ b/src/main/java/com/treasuredata/client/model/TDJob.java @@ -22,7 +22,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonValue; import com.google.common.base.Function; -import com.google.common.base.Optional; + +import java.util.Optional; /** * @@ -153,12 +154,12 @@ public Debug(@JsonProperty("cmdout") Optional cmdout, @JsonProperty("std public String getCmdout() { - return cmdout.or(""); + return cmdout.orElse(""); } public String getStderr() { - return stderr.or(""); + return stderr.orElse(""); } @Override @@ -346,14 +347,14 @@ public Optional getEngineVersion() */ public String getCmdOut() { - return debug.transform(new Function() + return debug.map(new Function() { @Override public String apply(Debug input) { return input.getCmdout(); } - }).or(""); + }).orElse(""); } /** @@ -363,14 +364,14 @@ public String apply(Debug input) */ public String getStdErr() { - return debug.transform(new Function() + return debug.map(new Function() { @Override public String apply(Debug input) { return input.getStderr(); } - }).or(""); + }).orElse(""); } @Override diff --git a/src/main/java/com/treasuredata/client/model/TDJobList.java b/src/main/java/com/treasuredata/client/model/TDJobList.java index 492894d1..c0b320ba 100644 --- a/src/main/java/com/treasuredata/client/model/TDJobList.java +++ b/src/main/java/com/treasuredata/client/model/TDJobList.java @@ -20,9 +20,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Joiner; -import com.google.common.base.Optional; import java.util.List; +import java.util.Optional; /** * diff --git a/src/main/java/com/treasuredata/client/model/TDJobRequest.java b/src/main/java/com/treasuredata/client/model/TDJobRequest.java index e93e8099..cbcf66eb 100644 --- a/src/main/java/com/treasuredata/client/model/TDJobRequest.java +++ b/src/main/java/com/treasuredata/client/model/TDJobRequest.java @@ -19,7 +19,8 @@ package com.treasuredata.client.model; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.base.Optional; + +import java.util.Optional; /** * @@ -53,11 +54,11 @@ public TDJobRequest(String database, TDJob.Type type, String query, TDJob.Priori this.poolName = poolName; this.table = table; this.config = config; - this.scheduledTime = Optional.absent(); - this.domainKey = Optional.absent(); - this.resultConnectionId = Optional.absent(); - this.resultConnectionSettings = Optional.absent(); - this.engineVersion = Optional.absent(); + this.scheduledTime = Optional.empty(); + this.domainKey = Optional.empty(); + this.resultConnectionId = Optional.empty(); + this.resultConnectionSettings = Optional.empty(); + this.engineVersion = Optional.empty(); } private TDJobRequest(TDJobRequestBuilder builder) diff --git a/src/main/java/com/treasuredata/client/model/TDJobRequestBuilder.java b/src/main/java/com/treasuredata/client/model/TDJobRequestBuilder.java index 84a0f74b..004cdd7d 100644 --- a/src/main/java/com/treasuredata/client/model/TDJobRequestBuilder.java +++ b/src/main/java/com/treasuredata/client/model/TDJobRequestBuilder.java @@ -19,7 +19,8 @@ package com.treasuredata.client.model; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.base.Optional; + +import java.util.Optional; public class TDJobRequestBuilder { @@ -28,15 +29,15 @@ public class TDJobRequestBuilder private String query; private TDJob.Priority priority = TDJob.Priority.NORMAL; private String result; - private Optional retryLimit = Optional.absent(); + private Optional retryLimit = Optional.empty(); private String poolName; - private Optional table = Optional.absent(); - private Optional config = Optional.absent(); - private Optional scheduledTime = Optional.absent(); - private Optional domainKey = Optional.absent(); - private Optional resultConnectionId = Optional.absent(); - private Optional resultConnectionSettings = Optional.absent(); - private Optional engineVersion = Optional.absent(); + private Optional table = Optional.empty(); + private Optional config = Optional.empty(); + private Optional scheduledTime = Optional.empty(); + private Optional domainKey = Optional.empty(); + private Optional resultConnectionId = Optional.empty(); + private Optional resultConnectionSettings = Optional.empty(); + private Optional engineVersion = Optional.empty(); public TDJobRequestBuilder setResultOutput(String result) { @@ -46,7 +47,7 @@ public TDJobRequestBuilder setResultOutput(String result) public Optional getResultOutput() { - return Optional.fromNullable(result); + return Optional.ofNullable(result); } public TDJobRequestBuilder setDatabase(String database) @@ -124,7 +125,7 @@ public TDJobRequestBuilder setPoolName(String poolName) public Optional getPoolName() { - return Optional.fromNullable(poolName); + return Optional.ofNullable(poolName); } public TDJobRequestBuilder setTable(String table) @@ -151,7 +152,7 @@ public Optional getConfig() public TDJobRequestBuilder setScheduledTime(Long scheduledTime) { - return setScheduledTime(Optional.fromNullable(scheduledTime)); + return setScheduledTime(Optional.ofNullable(scheduledTime)); } public TDJobRequestBuilder setScheduledTime(Optional scheduledTime) @@ -178,7 +179,7 @@ public TDJobRequestBuilder setDomainKey(Optional domainKey) public TDJobRequestBuilder setDomainKey(String domainKey) { - return setDomainKey(Optional.fromNullable(domainKey)); + return setDomainKey(Optional.ofNullable(domainKey)); } public Optional getResultConnectionId() @@ -210,18 +211,18 @@ public TDJobRequestBuilder setResultConnectionSettings(Optional resultCo public TDJobRequestBuilder setResultConnectionSettings(String resultConnectionSettings) { - return setResultConnectionSettings(Optional.fromNullable(resultConnectionSettings)); + return setResultConnectionSettings(Optional.ofNullable(resultConnectionSettings)); } public TDJobRequestBuilder setEngineVersion(String engineVersion) { - this.engineVersion = Optional.fromNullable(TDJob.EngineVersion.fromString(engineVersion)); + this.engineVersion = Optional.ofNullable(TDJob.EngineVersion.fromString(engineVersion)); return this; } public TDJobRequestBuilder setEngineVersion(TDJob.EngineVersion engineVersion) { - this.engineVersion = Optional.fromNullable(engineVersion); + this.engineVersion = Optional.ofNullable(engineVersion); return this; } diff --git a/src/main/java/com/treasuredata/client/model/TDSavedQueryBuilder.java b/src/main/java/com/treasuredata/client/model/TDSavedQueryBuilder.java index fae9eb2f..e86f9214 100644 --- a/src/main/java/com/treasuredata/client/model/TDSavedQueryBuilder.java +++ b/src/main/java/com/treasuredata/client/model/TDSavedQueryBuilder.java @@ -18,22 +18,23 @@ */ package com.treasuredata.client.model; -import com.google.common.base.Optional; import com.treasuredata.client.TDClientException; +import java.util.Optional; + public class TDSavedQueryBuilder { - private Optional name = Optional.absent(); - private Optional cron = Optional.absent(); - private Optional type = Optional.absent(); - private Optional query = Optional.absent(); - private Optional timezone = Optional.absent(); - private Optional delay = Optional.absent(); - private Optional database = Optional.absent(); - private Optional priority = Optional.absent(); - private Optional retryLimit = Optional.absent(); - private Optional result = Optional.absent(); - private Optional engineVersion = Optional.absent(); + private Optional name = Optional.empty(); + private Optional cron = Optional.empty(); + private Optional type = Optional.empty(); + private Optional query = Optional.empty(); + private Optional timezone = Optional.empty(); + private Optional delay = Optional.empty(); + private Optional database = Optional.empty(); + private Optional priority = Optional.empty(); + private Optional retryLimit = Optional.empty(); + private Optional result = Optional.empty(); + private Optional engineVersion = Optional.empty(); public TDSavedQueryBuilder setName(String name) { @@ -97,7 +98,7 @@ public TDSavedQueryBuilder setResult(String result) public TDSavedQueryBuilder setEngineVersion(TDJob.EngineVersion engineVersion) { - this.engineVersion = Optional.fromNullable(engineVersion); + this.engineVersion = Optional.ofNullable(engineVersion); return this; } @@ -118,16 +119,16 @@ public TDSaveQueryRequest build() return new TDSaveQueryRequest( name.get(), - cron.or(""), + cron.orElse(""), type.get(), query.get(), timezone.get(), - delay.or(0L), + delay.orElse(0L), database.get(), - priority.or(TDJob.Priority.NORMAL.toInt()), - retryLimit.or(0), - result.or(""), - engineVersion.orNull() + priority.orElse(TDJob.Priority.NORMAL.toInt()), + retryLimit.orElse(0), + result.orElse(""), + engineVersion.orElse(null) ); } diff --git a/src/main/java/com/treasuredata/client/model/TDSavedQueryHistory.java b/src/main/java/com/treasuredata/client/model/TDSavedQueryHistory.java index 445abec4..24e48fa3 100644 --- a/src/main/java/com/treasuredata/client/model/TDSavedQueryHistory.java +++ b/src/main/java/com/treasuredata/client/model/TDSavedQueryHistory.java @@ -19,9 +19,9 @@ package com.treasuredata.client.model; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.base.Optional; import java.util.List; +import java.util.Optional; public class TDSavedQueryHistory { diff --git a/src/main/java/com/treasuredata/client/model/TDSavedQueryStartRequest.java b/src/main/java/com/treasuredata/client/model/TDSavedQueryStartRequest.java index ff0ede1e..92806406 100644 --- a/src/main/java/com/treasuredata/client/model/TDSavedQueryStartRequest.java +++ b/src/main/java/com/treasuredata/client/model/TDSavedQueryStartRequest.java @@ -2,10 +2,10 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.common.base.Optional; import org.immutables.value.Value; import java.util.Date; +import java.util.Optional; @Value.Immutable @Value.Style(visibility = Value.Style.ImplementationVisibility.PACKAGE) diff --git a/src/main/java/com/treasuredata/client/model/TDSavedQueryStartRequestV4.java b/src/main/java/com/treasuredata/client/model/TDSavedQueryStartRequestV4.java index c3264fca..be22577a 100644 --- a/src/main/java/com/treasuredata/client/model/TDSavedQueryStartRequestV4.java +++ b/src/main/java/com/treasuredata/client/model/TDSavedQueryStartRequestV4.java @@ -3,11 +3,11 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.common.base.Optional; import org.immutables.value.Value; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.Optional; import java.util.TimeZone; @Value.Immutable diff --git a/src/main/java/com/treasuredata/client/model/TDSavedQueryUpdateRequest.java b/src/main/java/com/treasuredata/client/model/TDSavedQueryUpdateRequest.java index 1c66e10f..d0264bf1 100644 --- a/src/main/java/com/treasuredata/client/model/TDSavedQueryUpdateRequest.java +++ b/src/main/java/com/treasuredata/client/model/TDSavedQueryUpdateRequest.java @@ -24,8 +24,10 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.guava.GuavaModule; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Optional; + +import java.util.Optional; /** * Update request for saved queries. Use {@link TDSavedQuery#newUpdateRequestBuilder()} to build this object. @@ -78,6 +80,7 @@ static ObjectMapper getObjectMapper() ObjectMapper mapper = new ObjectMapper(); // Configure object mapper to exclude Optional.absent values in the generated json string mapper.registerModule(new GuavaModule().configureAbsentsAsNulls(false)); + mapper.registerModule(new Jdk8Module()); // Required to make java.util.Optional serialize correctly mapper.setSerializationInclusion(JsonInclude.Include.NON_ABSENT); return mapper; } @@ -103,16 +106,16 @@ public String toJson() public TDSaveQueryRequest merge(TDSavedQuery base) { return new TDSaveQueryRequest( - name.or(base.getName()), - cron.or(base.getCron()), - type.or(base.getType()), - query.or(base.getQuery()), - timezone.or(base.getTimezone()), - delay.or(base.getDelay()), - database.or(base.getDatabase()), - priority.or(base.getPriority()), - retryLimit.or(base.getRetryLimit()), - result.or(base.getResult()), + name.orElse(base.getName()), + cron.orElse(base.getCron()), + type.orElse(base.getType()), + query.orElse(base.getQuery()), + timezone.orElse(base.getTimezone()), + delay.orElse(base.getDelay()), + database.orElse(base.getDatabase()), + priority.orElse(base.getPriority()), + retryLimit.orElse(base.getRetryLimit()), + result.orElse(base.getResult()), engineVersion.isPresent() ? engineVersion.get() : base.getEngineVersion()); } diff --git a/src/main/java/com/treasuredata/client/model/TDSavedQueryUpdateRequestBuilder.java b/src/main/java/com/treasuredata/client/model/TDSavedQueryUpdateRequestBuilder.java index ea3af591..0ec20c43 100644 --- a/src/main/java/com/treasuredata/client/model/TDSavedQueryUpdateRequestBuilder.java +++ b/src/main/java/com/treasuredata/client/model/TDSavedQueryUpdateRequestBuilder.java @@ -18,24 +18,24 @@ */ package com.treasuredata.client.model; -import com.google.common.base.Optional; +import java.util.Optional; /** * */ public class TDSavedQueryUpdateRequestBuilder { - private Optional name = Optional.absent(); - private Optional cron = Optional.absent(); - private Optional type = Optional.absent(); - private Optional query = Optional.absent(); - private Optional timezone = Optional.absent(); - private Optional delay = Optional.absent(); - private Optional database = Optional.absent(); - private Optional priority = Optional.absent(); - private Optional retryLimit = Optional.absent(); - private Optional result = Optional.absent(); - private Optional engineVersion = Optional.absent(); + private Optional name = Optional.empty(); + private Optional cron = Optional.empty(); + private Optional type = Optional.empty(); + private Optional query = Optional.empty(); + private Optional timezone = Optional.empty(); + private Optional delay = Optional.empty(); + private Optional database = Optional.empty(); + private Optional priority = Optional.empty(); + private Optional retryLimit = Optional.empty(); + private Optional result = Optional.empty(); + private Optional engineVersion = Optional.empty(); TDSavedQueryUpdateRequestBuilder() { diff --git a/src/main/java/com/treasuredata/client/model/TDUser.java b/src/main/java/com/treasuredata/client/model/TDUser.java index e3b9d0ec..1cf92eb5 100644 --- a/src/main/java/com/treasuredata/client/model/TDUser.java +++ b/src/main/java/com/treasuredata/client/model/TDUser.java @@ -3,9 +3,11 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.common.base.Optional; + import org.immutables.value.Value; +import java.util.Optional; + @Value.Immutable @Value.Style(visibility = Value.Style.ImplementationVisibility.PACKAGE) @JsonSerialize(as = ImmutableTDUser.class) diff --git a/src/test/java/com/treasuredata/client/TDRequestErrorHandlerTest.java b/src/test/java/com/treasuredata/client/TDRequestErrorHandlerTest.java index b25a7ba8..8df767a4 100644 --- a/src/test/java/com/treasuredata/client/TDRequestErrorHandlerTest.java +++ b/src/test/java/com/treasuredata/client/TDRequestErrorHandlerTest.java @@ -1,6 +1,5 @@ package com.treasuredata.client; -import com.google.common.base.Optional; import com.treasuredata.client.model.TDApiErrorMessage; import okhttp3.Headers; import okhttp3.MediaType; @@ -18,6 +17,7 @@ import org.slf4j.LoggerFactory; import java.util.Date; +import java.util.Optional; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertFalse; diff --git a/src/test/java/com/treasuredata/client/TestTDClient.java b/src/test/java/com/treasuredata/client/TestTDClient.java index 73e8d2d3..21a6d12e 100644 --- a/src/test/java/com/treasuredata/client/TestTDClient.java +++ b/src/test/java/com/treasuredata/client/TestTDClient.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.base.Function; import com.google.common.base.Joiner; -import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.base.Strings; import com.google.common.base.Throwables; @@ -104,6 +103,7 @@ import java.util.GregorianCalendar; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Properties; import java.util.Set; import java.util.TimeZone; @@ -801,7 +801,7 @@ public void submitExportJob() "secret access key", "bucket", "prefix/", - Optional.absent()); + Optional.empty()); client.createDatabaseIfNotExists(SAMPLE_DB); client.createTableIfNotExists(SAMPLE_DB, "sample_output"); String jobId = client.submitExportJob(jobRequest); @@ -893,7 +893,7 @@ private Optional findTable(String databaseName, String tableName) return Optional.of(table); } } - return Optional.absent(); + return Optional.empty(); } @Test @@ -1461,7 +1461,7 @@ private Optional findSavedQuery(String name) return Optional.of(q); } } - return Optional.absent(); + return Optional.empty(); } private void validateSavedQuery(TDSaveQueryRequest expected, TDSavedQuery target) diff --git a/src/test/java/com/treasuredata/client/TestTDClientConfig.java b/src/test/java/com/treasuredata/client/TestTDClientConfig.java index 69d5e2c3..c3cdb655 100644 --- a/src/test/java/com/treasuredata/client/TestTDClientConfig.java +++ b/src/test/java/com/treasuredata/client/TestTDClientConfig.java @@ -18,7 +18,6 @@ */ package com.treasuredata.client; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableSet; @@ -32,6 +31,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Optional; import java.util.Properties; import java.util.Set; @@ -252,10 +252,10 @@ public void apikeyWither() assertThat(config.withApiKey("foo").apiKey, is(Optional.of("foo"))); assertThat(config.withApiKey(Optional.of("foo")).apiKey, is(Optional.of("foo"))); - assertThat(config.withApiKey(Optional.absent()).apiKey, is(Optional.absent())); + assertThat(config.withApiKey(Optional.empty()).apiKey, is(Optional.empty())); assertThat(config.withApiKey("foo").withApiKey("bar").apiKey, is(Optional.of("bar"))); - assertThat(config.withApiKey("foo").withApiKey(Optional.absent()).apiKey, is(Optional.absent())); - assertThat(config.withApiKey(Optional.absent()).withApiKey("bar").apiKey, is(Optional.of("bar"))); + assertThat(config.withApiKey("foo").withApiKey(Optional.empty()).apiKey, is(Optional.empty())); + assertThat(config.withApiKey(Optional.empty()).withApiKey("bar").apiKey, is(Optional.of("bar"))); } private Matcher> equalTo(final Multimap multimap) diff --git a/src/test/java/com/treasuredata/client/TestTDHttpClient.java b/src/test/java/com/treasuredata/client/TestTDHttpClient.java index da5a8f1c..2a254d1d 100644 --- a/src/test/java/com/treasuredata/client/TestTDHttpClient.java +++ b/src/test/java/com/treasuredata/client/TestTDHttpClient.java @@ -18,7 +18,6 @@ */ package com.treasuredata.client; -import com.google.common.base.Optional; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Protocol; @@ -40,6 +39,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.Date; +import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -77,7 +77,7 @@ public void tearDown() public void addHttpRequestHeader() { TDApiRequest req = TDApiRequest.Builder.GET("/v3/system/server_status").addHeader("TEST_HEADER", "hello td-client-java").build(); - String resp = client.submitRequest(req, Optional.absent(), stringContentHandler); + String resp = client.submitRequest(req, Optional.empty(), stringContentHandler); } @Test @@ -85,7 +85,7 @@ public void deleteMethodTest() { try { TDApiRequest req = TDApiRequest.Builder.DELETE("/v3/dummy_endpoint").build(); - String resp = client.submitRequest(req, Optional.absent(), stringContentHandler); + String resp = client.submitRequest(req, Optional.empty(), stringContentHandler); fail(); } catch (TDClientHttpException e) { @@ -111,7 +111,7 @@ public void retryOn429() final byte[] body = "foobar".getBytes("UTF-8"); final long retryAfterSeconds = 5; - byte[] result = client.submitRequest(req, Optional.absent(), new TDHttpRequestHandler() + byte[] result = client.submitRequest(req, Optional.empty(), new TDHttpRequestHandler() { @Override public Response send(OkHttpClient httpClient, Request request) @@ -169,7 +169,7 @@ public void retryOn429WithoutRetryAfter() .build() .httpClient; - int requests = failWith429(Optional.absent(), Optional.>absent()); + int requests = failWith429(Optional.empty(), Optional.>empty()); assertThat(requests, is(4)); } @@ -184,7 +184,7 @@ public void retryOn429WithInvalidRetryAfter() .build() .httpClient; - int requests = failWith429(Optional.of("foobar"), Optional.>absent()); + int requests = failWith429(Optional.of("foobar"), Optional.>empty()); assertThat(requests, is(4)); } @@ -267,7 +267,7 @@ public void readBodyAsBytes() final byte[] body = new byte[3 * 1024 * 1024]; Arrays.fill(body, (byte) 100); - byte[] res = client.submitRequest(req, Optional.absent(), new TestDefaultHandler(body)); + byte[] res = client.submitRequest(req, Optional.empty(), new TestDefaultHandler(body)); assertThat(res, is(body)); } @@ -311,7 +311,7 @@ private int failWith429(final Optional retryAfterValue, final Optionalabsent(), new TDHttpRequestHandler() + client.submitRequest(req, Optional.empty(), new TDHttpRequestHandler() { @Override public Response send(OkHttpClient httpClient, Request request) @@ -347,7 +347,7 @@ public byte[] onSuccess(Response response) } TDClientHttpTooManyRequestsException tooManyRequestsException = (TDClientHttpTooManyRequestsException) e; if (retryAfterMatcher.isPresent()) { - assertThat(tooManyRequestsException.getRetryAfter().orNull(), retryAfterMatcher.get()); + assertThat(tooManyRequestsException.getRetryAfter().orElse(null), retryAfterMatcher.get()); } } diff --git a/src/test/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequestTest.java b/src/test/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequestTest.java index cbcd1599..b4db827f 100644 --- a/src/test/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequestTest.java +++ b/src/test/java/com/treasuredata/client/model/TDBulkLoadSessionStartRequestTest.java @@ -1,6 +1,7 @@ package com.treasuredata.client.model; -import com.google.common.base.Optional; +import java.util.Optional; + import org.junit.Test; import static com.treasuredata.client.model.ObjectMappers.compactMapper; @@ -14,7 +15,7 @@ public class TDBulkLoadSessionStartRequestTest public void defaultValues() throws Exception { - assertThat(TDBulkLoadSessionStartRequest.builder().build().getScheduledTime(), is(Optional.absent())); + assertThat(TDBulkLoadSessionStartRequest.builder().build().getScheduledTime(), is(Optional.empty())); } @Test diff --git a/src/test/java/com/treasuredata/client/model/TestTDColumn.java b/src/test/java/com/treasuredata/client/model/TestTDColumn.java index f8016782..8abd6ba7 100644 --- a/src/test/java/com/treasuredata/client/model/TestTDColumn.java +++ b/src/test/java/com/treasuredata/client/model/TestTDColumn.java @@ -22,12 +22,16 @@ import com.google.common.collect.ImmutableSet; import org.junit.Test; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.Serializable; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashSet; +import java.util.Objects; import java.util.Set; import static com.treasuredata.client.model.TDColumnType.FLOAT; @@ -220,26 +224,87 @@ public void parseUnknownType() TDColumnType.parseColumnType("xint"); } - private static void checkSerialization(Object o) + private static byte[] pickle(T obj) throws IOException { - ByteArrayOutputStream b = new ByteArrayOutputStream(); - ObjectOutputStream os = new ObjectOutputStream(b); - os.writeObject(o); - os.close(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(obj); + oos.close(); + return baos.toByteArray(); + } + + private static T unpickle(byte[] b, Class cl) + throws IOException, ClassNotFoundException + { + ByteArrayInputStream bais = new ByteArrayInputStream(b); + ObjectInputStream ois = new ObjectInputStream(bais); + Object o = ois.readObject(); + return cl.cast(o); } @Test public void serializableTest() throws Exception { - checkSerialization(new TDColumn("int", TDColumnType.INT)); - checkSerialization(new TDColumn("str", TDColumnType.STRING)); - checkSerialization(new TDColumn("long", TDColumnType.LONG)); - checkSerialization(new TDColumn("double", TDColumnType.DOUBLE)); - checkSerialization(new TDColumn("float", TDColumnType.FLOAT)); - checkSerialization(newArrayType(TDColumnType.STRING)); - checkSerialization(newMapType(TDColumnType.INT, TDColumnType.STRING)); + // + // Check primitive TDColumnType types + // + + { + TDColumn in = new TDColumn("int", TDColumnType.INT); + byte[] p = pickle(in); + TDColumn out = unpickle(p, TDColumn.class); + + assertTrue(Objects.equals(in, out)); + } + { + TDColumn in = new TDColumn("int", TDColumnType.STRING); + byte[] p = pickle(in); + TDColumn out = unpickle(p, TDColumn.class); + + assertTrue(Objects.equals(in, out)); + } + { + TDColumn in = new TDColumn("int", TDColumnType.LONG); + byte[] p = pickle(in); + TDColumn out = unpickle(p, TDColumn.class); + + assertTrue(Objects.equals(in, out)); + } + { + TDColumn in = new TDColumn("int", TDColumnType.DOUBLE); + byte[] p = pickle(in); + TDColumn out = unpickle(p, TDColumn.class); + + assertTrue(Objects.equals(in, out)); + } + { + TDColumn in = new TDColumn("int", TDColumnType.FLOAT); + byte[] p = pickle(in); + TDColumn out = unpickle(p, TDColumn.class); + + assertTrue(Objects.equals(in, out)); + } + + // + // Check the other TDColumnType types + // + + { + TDColumn in = new TDColumn("array", newArrayType(TDColumnType.STRING)); + byte[] p = pickle(in); + TDColumn out = unpickle(p, TDColumn.class); + + assertTrue(Objects.equals(in, out)); + } + { + TDColumn in = new TDColumn("map", newMapType(TDColumnType.INT, TDColumnType.STRING)); + byte[] p = pickle(in); + TDColumn out = unpickle(p, TDColumn.class); + + assertTrue(Objects.equals(in, out)); + } } private static void checkJsonSerDe(TDColumn column)