You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ne...@apache.org on 2018/06/25 22:06:59 UTC

[trafficcontrol] branch master updated (e8463e8 -> c34f20b)

This is an automated email from the ASF dual-hosted git repository.

neuman pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git.


    from e8463e8  Fix DSR API tests that are requesting an invalid DS type
     new 213f65b  Added Java API foundations. Added foundation for TrafficOps java api
     new eac7735  Added debuging statements. Added support for cancel chaining via futures. Added Close support for TOSession. Fixes for request build and submit.
     new 11036df  Add support for filters for getServers and getDeliveryServices within the Java API.
     new d6e7d10  Updated Java API client unittests
     new cb30f32  Default RestClient value for Java API Client
     new d0c7977  Added README and IDE setup guide for Java API Client
     new 1c8fa3f  Fix README links within Java API Client
     new a47734e  Fix format within README of java api client
     new 9cf7703  Fix issue with rest client
     new 7bf3c51  Added Apache License to all Java API Files
     new 8879cce  Change packaging to org.apache.trafficcontrol
     new c34f20b  Update pom group_ids to match apache naming.

The 12 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 traffic_control/clients/java/.gitignore            |   5 +
 traffic_control/clients/java/CONTRIBUTE.md         |  41 +++++
 .../clients/java}/README.md                        |  10 +-
 traffic_control/clients/java/common/.gitignore     |   1 +
 traffic_control/clients/java/common/pom.xml        |  48 ++++++
 .../trafficcontrol/client/RestApiSession.java      | 180 ++++++++++++++++++++
 .../client/exception/InvalidJsonException.java     |  41 +++++
 .../client/exception/LoginException.java           |  25 ++-
 .../client/exception/OperationException.java       |  41 +++++
 .../client/exception/TrafficControlException.java  |  41 +++++
 traffic_control/clients/java/pom.xml               |  66 ++++++++
 traffic_control/clients/java/trafficops/.gitignore |   1 +
 traffic_control/clients/java/trafficops/README.md  |  88 ++++++++++
 traffic_control/clients/java/trafficops/pom.xml    |  59 +++++++
 .../client/trafficops/ResponseFuture.java          | 143 ++++++++++++++++
 .../client/trafficops/TOSession.java               | 185 +++++++++++++++++++++
 .../client/trafficops/models/Alert.java            |  28 ++--
 .../client/trafficops/models/Response.java         |  30 ++--
 .../client/trafficops/TOSessionTest.java           | 128 ++++++++++++++
 .../trafficops/src/test/resources/logback-test.xml |  13 +-
 20 files changed, 1136 insertions(+), 38 deletions(-)
 create mode 100644 traffic_control/clients/java/.gitignore
 create mode 100644 traffic_control/clients/java/CONTRIBUTE.md
 copy {traffic_portal => traffic_control/clients/java}/README.md (75%)
 create mode 100644 traffic_control/clients/java/common/.gitignore
 create mode 100644 traffic_control/clients/java/common/pom.xml
 create mode 100644 traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/RestApiSession.java
 create mode 100644 traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/InvalidJsonException.java
 copy traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/loc/NetworkNodeException.java => traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/LoginException.java (50%)
 create mode 100644 traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/OperationException.java
 create mode 100644 traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/TrafficControlException.java
 create mode 100644 traffic_control/clients/java/pom.xml
 create mode 100644 traffic_control/clients/java/trafficops/.gitignore
 create mode 100644 traffic_control/clients/java/trafficops/README.md
 create mode 100644 traffic_control/clients/java/trafficops/pom.xml
 create mode 100644 traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/ResponseFuture.java
 create mode 100644 traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/TOSession.java
 copy traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/request/DNSRequest.java => traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/models/Alert.java (63%)
 copy traffic_router/core/src/main/java/com/comcast/cdn/traffic_control/traffic_router/core/router/DNSRouteResult.java => traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/models/Response.java (54%)
 create mode 100644 traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/client/trafficops/TOSessionTest.java
 copy BUILD.md => traffic_control/clients/java/trafficops/src/test/resources/logback-test.xml (75%)


[trafficcontrol] 03/12: Add support for filters for getServers and getDeliveryServices within the Java API.

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit 11036df69aaf5237ccef6254b86fe2ae18bc04fe
Author: nerdynick <ne...@gmail.com>
AuthorDate: Thu May 17 11:37:52 2018 -0600

    Add support for filters for getServers and getDeliveryServices within the Java API.
---
 .../cdn/traffic_control/RestApiSession.java        |  67 ++-----
 .../cdn/traffic_control/ResponseFuture.java        | 127 ++++++++++++
 .../com/comcast/cdn/traffic_control/TOSession.java | 223 +++++++++------------
 .../cdn/traffic_control/models/Response.java       |   6 +-
 .../comcast/cdn/traffic_control/TOSessionTest.java |   2 +-
 5 files changed, 245 insertions(+), 180 deletions(-)

diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
index 1e140b0..c6bc632 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
@@ -32,15 +32,26 @@ import com.google.common.collect.ImmutableList;
 public abstract class RestApiSession implements Closeable {
 	private static final Logger LOG = LoggerFactory.getLogger(RestApiSession.class);
 
-	private static final String URL_FORMAT_STR = "%s://%s:%s/%s/%s/%s";
-	
-	public static final String DEFAULT_API_PATH = "api";
-	public static final String DEFAULT_API_VERSION = "1.2";
 	public static final ImmutableList<Header> DEFAULT_HEADERS;
 	static {
 		DEFAULT_HEADERS = ImmutableList.<Header>builder()
 				.add(new BasicHeader("Content-Type", "application/json; charset=UTF-8")).build();
 	};
+	
+	public abstract ImmutableList<Header> defaultHeaders();
+	public abstract Builder toBuilder();
+
+	@AutoValue.Builder
+	public abstract static class Builder {
+		public abstract RestApiSession build();
+
+		public abstract Builder setDefaultHeaders(ImmutableList<Header> headers);
+		public abstract ImmutableList.Builder<Header> defaultHeadersBuilder();
+	}
+	public static Builder builder() {
+		return new AutoValue_RestApiSession.Builder()
+				.setDefaultHeaders(DEFAULT_HEADERS);
+	}
 
 	private CloseableHttpAsyncClient httpclient;
 
@@ -79,11 +90,6 @@ public abstract class RestApiSession implements Closeable {
 			httpclient = null;
 		}
 	}
-
-	public String buildUrl(String path) {
-		return String.format(URL_FORMAT_STR, this.ssl() ?"https":"http", this.host(), this.port(), this.apiBasePath(),
-				this.apiVersion(), path);
-	}
 	
 	public CompletableFuture<HttpResponse> get(String url) {
 		return execute(RequestBuilder.get(url));
@@ -120,6 +126,9 @@ public abstract class RestApiSession implements Closeable {
 		return future;
 	}
 	
+	/**
+	 * An adapter around a FutureCallback to provide a CompletableFuture for use with HttpAsyncClients.  
+	 */
 	private class CompletableFutureCallback extends CompletableFuture<HttpResponse> implements FutureCallback<HttpResponse>{
 		private Future<HttpResponse> reFuture;
 		
@@ -153,44 +162,4 @@ public abstract class RestApiSession implements Closeable {
 			this.reFuture = reFuture;
 		}
 	}
-
-	public abstract String host();
-
-	public abstract int port();
-
-	public abstract String apiVersion();
-
-	public abstract String apiBasePath();
-
-	public abstract ImmutableList<Header> defaultHeaders();
-
-	public abstract boolean ssl();
-
-	static Builder builder() {
-		return new AutoValue_RestApiSession.Builder()
-				.setApiBasePath(DEFAULT_API_PATH)
-				.setApiVersion(DEFAULT_API_VERSION)
-				.setDefaultHeaders(DEFAULT_HEADERS);
-	}
-	
-	public abstract Builder toBuilder();
-
-	@AutoValue.Builder
-	public abstract static class Builder {
-		public abstract RestApiSession build();
-
-		public abstract Builder setHost(String host);
-
-		public abstract Builder setPort(int port);
-
-		public abstract Builder setApiVersion(String version);
-
-		public abstract Builder setApiBasePath(String version);
-
-		public abstract Builder setSsl(boolean ssl);
-
-		public abstract Builder setDefaultHeaders(ImmutableList<Header> headers);
-		public abstract ImmutableList.Builder<Header> defaultHeadersBuilder();
-
-	}
 }
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java
new file mode 100644
index 0000000..af2b655
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java
@@ -0,0 +1,127 @@
+package com.comcast.cdn.traffic_control;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.BiConsumer;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.RequestBuilder;
+import org.apache.http.entity.StringEntity;
+
+import com.comcast.cdn.traffic_control.exception.LoginException;
+import com.comcast.cdn.traffic_control.exception.OperationException;
+import com.comcast.cdn.traffic_control.models.Alert;
+import com.comcast.cdn.traffic_control.models.Response;
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Charsets;
+import com.google.common.base.Strings;
+
+@AutoValue
+public abstract class ResponseFuture<T extends Response> extends CompletableFuture<T> implements BiConsumer<HttpResponse, Throwable> {
+	public static enum Method{
+		POST, GET
+	}
+	
+	public abstract Optional<BiConsumer<ResponseFuture<T>, Throwable>> handleException();
+	public abstract Class<T> responseType();
+	public abstract ResponseFuture.Method method();
+	public abstract URI uri();
+	public abstract RestApiSession session();
+	public abstract Optional<String> body();
+	
+	private CompletableFuture<HttpResponse> subFuture;
+	
+	public static <T extends Response> ResponseFuture.Builder<T> builder(Class<T> response) {
+		return new AutoValue_ResponseFuture.Builder<T>()
+				.setResponseType(response);
+	}
+	public static ResponseFuture.Builder<Response> builder() {
+		return builder(Response.class);
+	}
+	
+	@Override
+	public boolean cancel(boolean mayInterruptIfRunning) {
+		if(subFuture != null) {
+			return subFuture.cancel(mayInterruptIfRunning);
+		}
+		return false;
+	}
+	
+	public ResponseFuture<T> execute(){
+		RequestBuilder rBuilder = RequestBuilder
+				.create(this.method().toString())
+				.setUri(this.uri());
+		if(this.body().isPresent()) {
+			rBuilder.setEntity(new StringEntity(this.body().get(), Charsets.UTF_8));
+		}
+		subFuture = this.session().execute(rBuilder);
+		subFuture.whenComplete(this);
+		return this;
+	}
+	
+	@AutoValue.Builder
+	public abstract static class Builder<T extends Response> {
+		public ResponseFuture<T> build(){
+			return autoBuild().execute();
+		}
+		protected abstract ResponseFuture<T> autoBuild();
+		public abstract ResponseFuture.Builder<T> setHandleException(BiConsumer<ResponseFuture<T>, Throwable> function);
+		public abstract ResponseFuture.Builder<T> setResponseType(Class<T> respone);
+		public abstract ResponseFuture.Builder<T> setMethod(ResponseFuture.Method method);
+		public abstract ResponseFuture.Builder<T> setUri(URI uri);
+		public ResponseFuture.Builder<T> setUri(String uri){
+			if(!Strings.isNullOrEmpty(uri)) {
+				this.setUri(URI.create(uri));
+			}
+			return this;
+		}
+		
+		public abstract ResponseFuture.Builder<T> setSession(RestApiSession session);
+		public abstract ResponseFuture.Builder<T> setBody(String body);
+	}
+	
+	@Override
+	public void accept(HttpResponse res, Throwable u) {
+		try {
+			switch(res.getStatusLine().getStatusCode()) {
+				case 200:
+					break;
+				case 401:
+					_handleException(new LoginException("Login required"));
+					return;
+				default:
+					_handleException(new OperationException(String.format("None 200 response: %s %s", res.getStatusLine().getStatusCode(), res.getStatusLine().getReasonPhrase())));
+					return;
+			}
+			
+			InputStreamReader r = new InputStreamReader(res.getEntity().getContent());
+			T resp = TOSession.gson.fromJson(r, responseType());
+			if(resp.getAlerts() != null) {
+				for(Alert a: resp.getAlerts()) {
+					if("error".equals(a.getLevel())) {
+						_handleException(new OperationException("Recieved error from server: "+ a.getText()));
+						return;
+					}
+				}
+			}
+			
+			this.complete(resp);
+		} catch (UnsupportedOperationException | IOException e) {
+			_handleException(new OperationException("Reading response failed", e));
+			return;
+		}
+	}
+	
+	private void _handleException(Throwable t) {
+		if(handleException().isPresent()) {
+			handleException().get().accept(this, t);
+		}
+		
+		if(!this.isDone()) {
+			this.completeExceptionally(t);
+		}
+	}
+}
\ No newline at end of file
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
index a5e307c..605d228 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
@@ -2,23 +2,22 @@ package com.comcast.cdn.traffic_control;
 
 import java.io.Closeable;
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.Optional;
+import java.net.URI;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.CompletableFuture;
-import java.util.function.BiConsumer;
 
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.RequestBuilder;
-import org.apache.http.entity.StringEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.message.BasicNameValuePair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.comcast.cdn.traffic_control.exception.LoginException;
-import com.comcast.cdn.traffic_control.exception.OperationException;
-import com.comcast.cdn.traffic_control.models.Alert;
 import com.comcast.cdn.traffic_control.models.Response;
 import com.google.auto.value.AutoValue;
-import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableMap;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
@@ -27,31 +26,67 @@ import com.google.gson.GsonBuilder;
 public abstract class TOSession implements Closeable {
 	private static final Logger LOG = LoggerFactory.getLogger(TOSession.class);
 	
-	private static final Gson gson = new GsonBuilder()
+	private static final String URL_FORMAT_STR = "/%s/%s/%s";
+	
+	public static final String DEFAULT_API_PATH = "api";
+	public static final String DEFAULT_API_VERSION = "1.2";
+	
+	public abstract RestApiSession restClient();
+	public abstract String host();
+	public abstract int port();
+	public abstract boolean ssl();
+	public abstract String apiVersion();
+	public abstract String apiBasePath();
+	
+	static final Gson gson = new GsonBuilder()
 			.create();
 	
 	private boolean isLoggedIn = false;
 	
-	public void close() throws IOException {
-		this.restClient().close();
+	protected URIBuilder newUriBuilder(final String path) {
+		final String _path = String.format(URL_FORMAT_STR, this.apiBasePath(), this.apiVersion(), path);
+		
+		return new URIBuilder()
+				.setScheme(this.ssl() ? "https" : "http")
+				.setHost(this.host())
+				.setPort(this.port())
+				.setPath(_path);
+	}
+	protected List<NameValuePair> toPairs(Map<String, ?> params){
+		if(params != null && !params.isEmpty()) {
+			List<NameValuePair> pairs = new LinkedList<>();
+			for(Map.Entry<String, ?> param: params.entrySet()) {
+				pairs.add(new BasicNameValuePair(param.getKey(), param.getValue().toString()));
+			}
+		}
+		return Collections.emptyList();
 	}
 	
-	public String toUrl() {
-		return this.restClient().buildUrl("/");
+	public void close() throws IOException {
+		this.restClient().close();
 	}
 	public boolean isLoggedIn() {
 		return isLoggedIn;
 	}
 	
 	public CompletableFuture<Boolean> login(final String username, final String password) {
-		final String url = this.restClient().buildUrl("user/login.json");
-		LOG.debug("Logging into: {}", url);
+		URI uri;
+		try {
+			uri = this.newUriBuilder("user/login.json")
+					.build();
+		} catch (Throwable e) {
+			final CompletableFuture<Boolean> f = new CompletableFuture<>();
+			f.completeExceptionally(e);
+			return f;
+		}
+		
+		LOG.debug("Logging into: {}", uri);
 		return ResponseFuture.builder()
 			.setHandleException((f,t)-> {
 				f.completeExceptionally(new LoginException(String.format("Failed to login with username %s", username), t));
 			})
 			.setMethod(ResponseFuture.Method.POST)
-			.setUrl(url)
+			.setUri(uri)
 			.setSession(this.restClient())
 			.setBody(gson.toJson(ImmutableMap.<String,String>of("u", username, "p", password))).build()
 			.thenApply(r->{
@@ -59,132 +94,54 @@ public abstract class TOSession implements Closeable {
 				return true;
 			});
 	}
-	
 	public CompletableFuture<Response.CollectionResponse> getServers(){
-		final String url = this.restClient().buildUrl("servers.json");
+		return this.getServers(null);
+	}
+	public CompletableFuture<Response.CollectionResponse> getServers(final Map<String, ?> filterParams){
+		URI uri;
+		try {
+			uri = this.newUriBuilder("servers.json")
+					.setParameters(this.toPairs(filterParams))
+					.build();
+		} catch (Throwable e) {
+			final CompletableFuture<Response.CollectionResponse> f = new CompletableFuture<>();
+			f.completeExceptionally(e);
+			return f;
+		}
 		return ResponseFuture.builder(Response.CollectionResponse.class)
 				.setMethod(ResponseFuture.Method.GET)
-				.setUrl(url)
+				.setUri(uri)
 				.setSession(this.restClient())
 				.build();
 	}
 	
 	public CompletableFuture<Response.CollectionResponse> getDeliveryServices(){
-		final String url = this.restClient().buildUrl("deliveryservices.json");
-		LOG.debug("getDeliveryService url {}", url);
+		return this.getDeliveryServices(null);
+	}
+	public CompletableFuture<Response.CollectionResponse> getDeliveryServices(final Map<String, ?> filterParams){
+		URI uri;
+		try {
+			uri = this.newUriBuilder("deliveryservices.json")
+					.setParameters(this.toPairs(filterParams))
+					.build();
+		} catch (Throwable e) {
+			final CompletableFuture<Response.CollectionResponse> f = new CompletableFuture<>();
+			f.completeExceptionally(e);
+			return f;
+		}
+		LOG.debug("getDeliveryService url {}", uri);
 		return ResponseFuture.builder(Response.CollectionResponse.class)
 				.setMethod(ResponseFuture.Method.GET)
-				.setUrl(url)
+				.setUri(uri)
 				.setSession(this.restClient())
 				.build();
 	}
 	
 	
-	@AutoValue
-	protected abstract static class ResponseFuture<T extends Response> extends CompletableFuture<T> implements BiConsumer<HttpResponse, Throwable> {
-		private static final Logger LOG = LoggerFactory.getLogger(ResponseFuture.class);
-		public static enum Method{
-			POST	, GET
-		}
-		
-		public abstract Optional<BiConsumer<ResponseFuture<T>, Throwable>> handleException();
-		public abstract Class<T> responseType();
-		public abstract Method method();
-		public abstract String url();
-		public abstract RestApiSession session();
-		public abstract Optional<String> body();
-		
-		private CompletableFuture<HttpResponse> subFuture;
-		
-		public static <T extends Response> Builder<T> builder(Class<T> response) {
-			return new AutoValue_TOSession_ResponseFuture.Builder<T>()
-					.setResponseType(response);
-		}
-		public static Builder<Response> builder() {
-			return builder(Response.class);
-		}
-		
-		@Override
-		public boolean cancel(boolean mayInterruptIfRunning) {
-			if(subFuture != null) {
-				return subFuture.cancel(mayInterruptIfRunning);
-			}
-			return false;
-		}
-		
-		public ResponseFuture<T> execute(){
-			RequestBuilder rBuilder = RequestBuilder
-					.create(this.method().toString())
-					.setUri(this.url());
-			if(this.body().isPresent()) {
-				rBuilder.setEntity(new StringEntity(this.body().get(), Charsets.UTF_8));
-			}
-			subFuture = this.session().execute(rBuilder);
-			subFuture.whenComplete(this);
-			return this;
-		}
-		
-		@AutoValue.Builder
-		public abstract static class Builder<T extends Response> {
-			public ResponseFuture<T> build(){
-				return autoBuild().execute();
-			}
-			protected abstract ResponseFuture<T> autoBuild();
-			public abstract Builder<T> setHandleException(BiConsumer<ResponseFuture<T>, Throwable> function);
-			public abstract Builder<T> setResponseType(Class<T> respone);
-			public abstract Builder<T> setMethod(Method method);
-			public abstract Builder<T> setUrl(String url);
-			public abstract Builder<T> setSession(RestApiSession session);
-			public abstract Builder<T> setBody(String body);
-		}
-		
-		@Override
-		public void accept(HttpResponse res, Throwable u) {
-			try {
-				switch(res.getStatusLine().getStatusCode()) {
-					case 200:
-						break;
-					case 401:
-						_handleException(new LoginException("Login required"));
-						return;
-					default:
-						_handleException(new OperationException(String.format("None 200 response: %s %s", res.getStatusLine().getStatusCode(), res.getStatusLine().getReasonPhrase())));
-						return;
-				}
-				
-				InputStreamReader r = new InputStreamReader(res.getEntity().getContent());
-				T resp = gson.fromJson(r, responseType());
-				if(resp.getAlerts() != null) {
-					for(Alert a: resp.getAlerts()) {
-						if("error".equals(a.getLevel())) {
-							_handleException(new OperationException("Recieved error from server: "+ a.getText()));
-							return;
-						}
-					}
-				}
-				
-				this.complete(resp);
-			} catch (UnsupportedOperationException | IOException e) {
-				_handleException(new OperationException("Reading response failed", e));
-				return;
-			}
-		}
-		
-		private void _handleException(Throwable t) {
-			if(handleException().isPresent()) {
-				handleException().get().accept(this, t);
-			}
-			
-			if(!this.isDone()) {
-				this.completeExceptionally(t);
-			}
-		}
-	}
-	
-	public abstract RestApiSession restClient();
-	
 	public static Builder builder() {
-		return new AutoValue_TOSession.Builder();
+		return new AutoValue_TOSession.Builder()
+				.setApiBasePath(DEFAULT_API_PATH)
+				.setApiVersion(DEFAULT_API_VERSION);
 	}
 	public abstract Builder toBuilder();
 	
@@ -194,5 +151,17 @@ public abstract class TOSession implements Closeable {
 		
 		public abstract Builder setRestClient(RestApiSession restClient);
 		public abstract RestApiSession.Builder restClientBuilder();
+
+		public abstract Builder setHost(String host);
+		public abstract Builder setPort(int port);
+		public abstract Builder setApiVersion(String version);
+		public abstract Builder setApiBasePath(String version);
+		public abstract Builder setSsl(boolean ssl);
+		
+		public Builder fromURI(URI uri){
+			return this.setSsl(uri.getScheme().equals("http") ? false: true)
+					.setHost(uri.getHost())
+					.setPort(uri.getPort());
+		}
 	}
 }
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
index 987aee2..ef7b50b 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
@@ -14,13 +14,13 @@ public class Response {
 	}
 	
 	public class CollectionResponse extends Response {
-		private List<Map<String, Object>> response;
+		private List<Map<String, ?>> response;
 
-		public List<Map<String, Object>> getResponse() {
+		public List<Map<String, ?>> getResponse() {
 			return response;
 		}
 
-		public void setResponse(List<Map<String, Object>> response) {
+		public void setResponse(List<Map<String, ?>> response) {
 			this.response = response;
 		}
 	}
diff --git a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java b/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
index efa310e..cfd6d27 100644
--- a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
+++ b/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
@@ -78,7 +78,7 @@ public class TOSessionTest {
 		assertNotNull(cResp.getResponse());
 		assertEquals(1, cResp.getResponse().size());
 		
-		final Map<String,Object> service = cResp.getResponse().get(0);
+		final Map<String,?> service = cResp.getResponse().get(0);
 		assertEquals("us-co-denver", service.get("cachegroup"));
 		LOG.debug("Service: {}", service);
 	}


[trafficcontrol] 09/12: Fix issue with rest client

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit 9cf770363a2e05a96bc757ef90aa7a1a45fd2933
Author: nerdynick <ne...@gmail.com>
AuthorDate: Thu May 17 12:19:12 2018 -0600

    Fix issue with rest client
---
 .../src/main/java/com/comcast/cdn/traffic_control/TOSession.java         | 1 -
 1 file changed, 1 deletion(-)

diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
index 1e264ec..081ce13 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
@@ -142,7 +142,6 @@ public abstract class TOSession implements Closeable {
 		final Builder b = new AutoValue_TOSession.Builder()
 				.setApiBasePath(DEFAULT_API_PATH)
 				.setApiVersion(DEFAULT_API_VERSION);
-		b.restClientBuilder();
 		
 		return b;
 	}


[trafficcontrol] 12/12: Update pom group_ids to match apache naming.

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit c34f20ba17c6f865f280026e86f889fde220c43e
Author: nerdynick <ne...@gmail.com>
AuthorDate: Wed Jun 20 12:12:53 2018 -0600

    Update pom group_ids to match apache naming.
---
 traffic_control/clients/java/common/pom.xml                   |  2 +-
 .../apache/trafficcontrol/{ => client}/RestApiSession.java    |  4 ++--
 .../{ => client}/exception/InvalidJsonException.java          |  2 +-
 .../trafficcontrol/{ => client}/exception/LoginException.java |  2 +-
 .../{ => client}/exception/OperationException.java            |  2 +-
 .../{ => client}/exception/TrafficControlException.java       |  2 +-
 traffic_control/clients/java/pom.xml                          |  2 +-
 traffic_control/clients/java/trafficops/pom.xml               |  4 ++--
 .../{ => client/trafficops}/ResponseFuture.java               | 11 ++++++-----
 .../trafficcontrol/{ => client/trafficops}/TOSession.java     |  7 ++++---
 .../trafficcontrol/{ => client/trafficops}/models/Alert.java  |  2 +-
 .../{ => client/trafficops}/models/Response.java              |  2 +-
 .../trafficcontrol/{ => client/trafficops}/TOSessionTest.java |  8 ++++----
 13 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/traffic_control/clients/java/common/pom.xml b/traffic_control/clients/java/common/pom.xml
index f1f208f..4e26bc2 100644
--- a/traffic_control/clients/java/common/pom.xml
+++ b/traffic_control/clients/java/common/pom.xml
@@ -21,7 +21,7 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
-		<groupId>com.comcast.cdn.traffic_control</groupId>
+		<groupId>org.apache.trafficcontrol</groupId>
 		<artifactId>traffic-control-java-client</artifactId>
 		<version>0.0.1-SNAPSHOT</version>
 	</parent>
diff --git a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/RestApiSession.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/RestApiSession.java
similarity index 97%
rename from traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/RestApiSession.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/RestApiSession.java
index 41e6133..e8f1a01 100644
--- a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/RestApiSession.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/RestApiSession.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol;
+package org.apache.trafficcontrol.client;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -35,7 +35,7 @@ import org.apache.http.impl.client.BasicCookieStore;
 import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
 import org.apache.http.impl.nio.client.HttpAsyncClients;
 import org.apache.http.message.BasicHeader;
-import org.apache.trafficcontrol.exception.OperationException;
+import org.apache.trafficcontrol.client.exception.OperationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/InvalidJsonException.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/InvalidJsonException.java
similarity index 95%
rename from traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/InvalidJsonException.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/InvalidJsonException.java
index 8ff59b4..b1a07c7 100644
--- a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/InvalidJsonException.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/InvalidJsonException.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol.exception;
+package org.apache.trafficcontrol.client.exception;
 
 public class InvalidJsonException extends TrafficControlException {
 	private static final long serialVersionUID = 1884362711438565843L;
diff --git a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/LoginException.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/LoginException.java
similarity index 95%
rename from traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/LoginException.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/LoginException.java
index 05b739e..ad172ec 100644
--- a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/LoginException.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/LoginException.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol.exception;
+package org.apache.trafficcontrol.client.exception;
 
 public class LoginException extends TrafficControlException {
 	private static final long serialVersionUID = -5021620597469977194L;
diff --git a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/OperationException.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/OperationException.java
similarity index 95%
rename from traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/OperationException.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/OperationException.java
index 08d93ef..414bae5 100644
--- a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/OperationException.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/OperationException.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol.exception;
+package org.apache.trafficcontrol.client.exception;
 
 public class OperationException extends TrafficControlException {
 	private static final long serialVersionUID = 8799467021892976240L;
diff --git a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/TrafficControlException.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/TrafficControlException.java
similarity index 95%
rename from traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/TrafficControlException.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/TrafficControlException.java
index 4daacfb..ad9142f 100644
--- a/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/TrafficControlException.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/client/exception/TrafficControlException.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol.exception;
+package org.apache.trafficcontrol.client.exception;
 
 public class TrafficControlException extends Exception {
 	private static final long serialVersionUID = 914940907727369814L;
diff --git a/traffic_control/clients/java/pom.xml b/traffic_control/clients/java/pom.xml
index 18eb1af..ae9ce55 100644
--- a/traffic_control/clients/java/pom.xml
+++ b/traffic_control/clients/java/pom.xml
@@ -20,7 +20,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
-	<groupId>com.comcast.cdn.traffic_control</groupId>
+	<groupId>org.apache.trafficcontrol</groupId>
 	<artifactId>traffic-control-java-client</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
 	<packaging>pom</packaging>
diff --git a/traffic_control/clients/java/trafficops/pom.xml b/traffic_control/clients/java/trafficops/pom.xml
index 56f350a..a04105d 100644
--- a/traffic_control/clients/java/trafficops/pom.xml
+++ b/traffic_control/clients/java/trafficops/pom.xml
@@ -21,14 +21,14 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
-		<groupId>com.comcast.cdn.traffic_control</groupId>
+		<groupId>org.apache.trafficcontrol</groupId>
 		<artifactId>traffic-control-java-client</artifactId>
 		<version>0.0.1-SNAPSHOT</version>
 	</parent>
 	<artifactId>traffic-control-java-client-trafficops</artifactId>
 	<dependencies>
 		<dependency>
-			<groupId>com.comcast.cdn.traffic_control</groupId>
+			<groupId>org.apache.trafficcontrol</groupId>
 			<artifactId>traffic-control-java-client-common</artifactId>
 			<version>${project.version}</version>
 		</dependency>
diff --git a/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/ResponseFuture.java b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/ResponseFuture.java
similarity index 92%
rename from traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/ResponseFuture.java
rename to traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/ResponseFuture.java
index 2e1cbfe..2e96a21 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/ResponseFuture.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/ResponseFuture.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol;
+package org.apache.trafficcontrol.client.trafficops;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -25,10 +25,11 @@ import java.util.function.BiConsumer;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.RequestBuilder;
 import org.apache.http.entity.StringEntity;
-import org.apache.trafficcontrol.exception.LoginException;
-import org.apache.trafficcontrol.exception.OperationException;
-import org.apache.trafficcontrol.models.Alert;
-import org.apache.trafficcontrol.models.Response;
+import org.apache.trafficcontrol.client.RestApiSession;
+import org.apache.trafficcontrol.client.exception.LoginException;
+import org.apache.trafficcontrol.client.exception.OperationException;
+import org.apache.trafficcontrol.client.trafficops.models.Alert;
+import org.apache.trafficcontrol.client.trafficops.models.Response;
 
 import com.google.auto.value.AutoValue;
 import com.google.common.base.Charsets;
diff --git a/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/TOSession.java b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/TOSession.java
similarity index 95%
rename from traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/TOSession.java
rename to traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/TOSession.java
index 0bd24b7..8045172 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/TOSession.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/TOSession.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol;
+package org.apache.trafficcontrol.client.trafficops;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -27,8 +27,9 @@ import java.util.concurrent.CompletableFuture;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.utils.URIBuilder;
 import org.apache.http.message.BasicNameValuePair;
-import org.apache.trafficcontrol.exception.LoginException;
-import org.apache.trafficcontrol.models.Response;
+import org.apache.trafficcontrol.client.RestApiSession;
+import org.apache.trafficcontrol.client.exception.LoginException;
+import org.apache.trafficcontrol.client.trafficops.models.Response;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Alert.java b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/models/Alert.java
similarity index 93%
rename from traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Alert.java
rename to traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/models/Alert.java
index e72d85b..5f92eb6 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Alert.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/models/Alert.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol.models;
+package org.apache.trafficcontrol.client.trafficops.models;
 
 public class Alert {
 	private String level;
diff --git a/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Response.java b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/models/Response.java
similarity index 94%
rename from traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Response.java
rename to traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/models/Response.java
index 75e2ca5..0ba3e38 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Response.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/client/trafficops/models/Response.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol.models;
+package org.apache.trafficcontrol.client.trafficops.models;
 
 import java.util.List;
 import java.util.Map;
diff --git a/traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/TOSessionTest.java b/traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/client/trafficops/TOSessionTest.java
similarity index 92%
rename from traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/TOSessionTest.java
rename to traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/client/trafficops/TOSessionTest.java
index a1cbbcb..605a507 100644
--- a/traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/TOSessionTest.java
+++ b/traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/client/trafficops/TOSessionTest.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package org.apache.trafficcontrol;
+package org.apache.trafficcontrol.client.trafficops;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
@@ -26,9 +26,9 @@ import org.apache.http.HttpVersion;
 import org.apache.http.client.methods.RequestBuilder;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.message.BasicStatusLine;
-import org.apache.trafficcontrol.TOSession;
-import org.apache.trafficcontrol.exception.LoginException;
-import org.apache.trafficcontrol.models.Response.CollectionResponse;
+import org.apache.trafficcontrol.client.RestApiSession;
+import org.apache.trafficcontrol.client.exception.LoginException;
+import org.apache.trafficcontrol.client.trafficops.models.Response.CollectionResponse;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;


[trafficcontrol] 11/12: Change packaging to org.apache.trafficcontrol

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit 8879ccef424810ae527208c579210b03c91baaf5
Author: nerdynick <ne...@gmail.com>
AuthorDate: Wed Jun 20 12:06:16 2018 -0600

    Change packaging to org.apache.trafficcontrol
---
 .../apache/trafficcontrol}/RestApiSession.java                 |  4 ++--
 .../apache/trafficcontrol}/exception/InvalidJsonException.java |  2 +-
 .../apache/trafficcontrol}/exception/LoginException.java       |  2 +-
 .../apache/trafficcontrol}/exception/OperationException.java   |  2 +-
 .../trafficcontrol}/exception/TrafficControlException.java     |  2 +-
 .../apache/trafficcontrol}/ResponseFuture.java                 | 10 +++++-----
 .../apache/trafficcontrol}/TOSession.java                      |  6 +++---
 .../apache/trafficcontrol}/models/Alert.java                   |  2 +-
 .../apache/trafficcontrol}/models/Response.java                |  2 +-
 .../apache/trafficcontrol}/TOSessionTest.java                  |  8 ++++----
 10 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/RestApiSession.java
similarity index 98%
rename from traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/RestApiSession.java
index d85af05..41e6133 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/RestApiSession.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control;
+package org.apache.trafficcontrol;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -35,10 +35,10 @@ import org.apache.http.impl.client.BasicCookieStore;
 import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
 import org.apache.http.impl.nio.client.HttpAsyncClients;
 import org.apache.http.message.BasicHeader;
+import org.apache.trafficcontrol.exception.OperationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.comcast.cdn.traffic_control.exception.OperationException;
 import com.google.auto.value.AutoValue;
 import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableList;
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/InvalidJsonException.java
similarity index 95%
rename from traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/InvalidJsonException.java
index 568f091..8ff59b4 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/InvalidJsonException.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control.exception;
+package org.apache.trafficcontrol.exception;
 
 public class InvalidJsonException extends TrafficControlException {
 	private static final long serialVersionUID = 1884362711438565843L;
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/LoginException.java
similarity index 95%
rename from traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/LoginException.java
index d81b8b6..05b739e 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/LoginException.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control.exception;
+package org.apache.trafficcontrol.exception;
 
 public class LoginException extends TrafficControlException {
 	private static final long serialVersionUID = -5021620597469977194L;
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/OperationException.java
similarity index 95%
rename from traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/OperationException.java
index fca9480..08d93ef 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/OperationException.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control.exception;
+package org.apache.trafficcontrol.exception;
 
 public class OperationException extends TrafficControlException {
 	private static final long serialVersionUID = 8799467021892976240L;
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/TrafficControlException.java
similarity index 95%
rename from traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java
rename to traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/TrafficControlException.java
index 69cfc62..4daacfb 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java
+++ b/traffic_control/clients/java/common/src/main/java/org/apache/trafficcontrol/exception/TrafficControlException.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control.exception;
+package org.apache.trafficcontrol.exception;
 
 public class TrafficControlException extends Exception {
 	private static final long serialVersionUID = 914940907727369814L;
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/ResponseFuture.java
similarity index 93%
rename from traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java
rename to traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/ResponseFuture.java
index 8a2af1c..2e1cbfe 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/ResponseFuture.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control;
+package org.apache.trafficcontrol;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -25,11 +25,11 @@ import java.util.function.BiConsumer;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.RequestBuilder;
 import org.apache.http.entity.StringEntity;
+import org.apache.trafficcontrol.exception.LoginException;
+import org.apache.trafficcontrol.exception.OperationException;
+import org.apache.trafficcontrol.models.Alert;
+import org.apache.trafficcontrol.models.Response;
 
-import com.comcast.cdn.traffic_control.exception.LoginException;
-import com.comcast.cdn.traffic_control.exception.OperationException;
-import com.comcast.cdn.traffic_control.models.Alert;
-import com.comcast.cdn.traffic_control.models.Response;
 import com.google.auto.value.AutoValue;
 import com.google.common.base.Charsets;
 import com.google.common.base.Strings;
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/TOSession.java
similarity index 97%
rename from traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
rename to traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/TOSession.java
index 1f6c9a8..0bd24b7 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/TOSession.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control;
+package org.apache.trafficcontrol;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -27,11 +27,11 @@ import java.util.concurrent.CompletableFuture;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.utils.URIBuilder;
 import org.apache.http.message.BasicNameValuePair;
+import org.apache.trafficcontrol.exception.LoginException;
+import org.apache.trafficcontrol.models.Response;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.comcast.cdn.traffic_control.exception.LoginException;
-import com.comcast.cdn.traffic_control.models.Response;
 import com.google.auto.value.AutoValue;
 import com.google.common.collect.ImmutableMap;
 import com.google.gson.Gson;
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Alert.java
similarity index 94%
rename from traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java
rename to traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Alert.java
index bb5bd83..e72d85b 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Alert.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control.models;
+package org.apache.trafficcontrol.models;
 
 public class Alert {
 	private String level;
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Response.java
similarity index 95%
rename from traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
rename to traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Response.java
index ad039cd..75e2ca5 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/org/apache/trafficcontrol/models/Response.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control.models;
+package org.apache.trafficcontrol.models;
 
 import java.util.List;
 import java.util.Map;
diff --git a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java b/traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/TOSessionTest.java
similarity index 94%
rename from traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
rename to traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/TOSessionTest.java
index e1e2f06..a1cbbcb 100644
--- a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
+++ b/traffic_control/clients/java/trafficops/src/test/java/org/apache/trafficcontrol/TOSessionTest.java
@@ -13,7 +13,7 @@
  * limitations under the License.
  */
 
-package com.comcast.cdn.traffic_control;
+package org.apache.trafficcontrol;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
@@ -26,6 +26,9 @@ import org.apache.http.HttpVersion;
 import org.apache.http.client.methods.RequestBuilder;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.message.BasicStatusLine;
+import org.apache.trafficcontrol.TOSession;
+import org.apache.trafficcontrol.exception.LoginException;
+import org.apache.trafficcontrol.models.Response.CollectionResponse;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -33,9 +36,6 @@ import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.comcast.cdn.traffic_control.exception.LoginException;
-import com.comcast.cdn.traffic_control.models.Response.CollectionResponse;
-
 public class TOSessionTest {
 	private static final Logger LOG = LoggerFactory.getLogger(TOSessionTest.class);
 	


[trafficcontrol] 04/12: Updated Java API client unittests

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit d6e7d10a15ba70cb0155d796306d04d304f123e3
Author: nerdynick <ne...@gmail.com>
AuthorDate: Thu May 17 11:44:24 2018 -0600

    Updated Java API client unittests
---
 .../comcast/cdn/traffic_control/TOSessionTest.java | 50 +++++++++++++++++-----
 1 file changed, 39 insertions(+), 11 deletions(-)

diff --git a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java b/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
index cfd6d27..3cf550b 100644
--- a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
+++ b/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
@@ -2,6 +2,7 @@ package com.comcast.cdn.traffic_control;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
+import java.net.URI;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 
@@ -23,6 +24,8 @@ import com.comcast.cdn.traffic_control.models.Response.CollectionResponse;
 public class TOSessionTest {
 	private static final Logger LOG = LoggerFactory.getLogger(TOSessionTest.class);
 	
+	public static final URI baseUri = URI.create("http://trafficcontrol.apache.org:443");
+	
 	public static final String DeliveryService_Good_Response = "{\"response\": [{\"cachegroup\": \"us-co-denver\"}]}";
 	
 	private RestApiSession sessionMock;
@@ -38,20 +41,32 @@ public class TOSessionTest {
 
 	@Test
 	public void testBuild() {
-		TOSession.builder().setRestClient(sessionMock).build();
+		TOSession.builder()
+			.setRestClient(sessionMock)
+			.fromURI(baseUri)
+			.build();
 	}
 	
 	@Test(expected=LoginException.class)
 	public void test401Response() throws Throwable {
 		HttpResponse resp = Mockito.mock(HttpResponse.class);
-		Mockito.when(resp.getStatusLine()).thenReturn(new BasicStatusLine(HttpVersion.HTTP_1_0, 401, "Not Auth"));
+		Mockito
+			.when(resp.getStatusLine())
+			.thenReturn(new BasicStatusLine(HttpVersion.HTTP_1_0, 401, "Not Auth"));
 		
-		CompletableFuture<HttpResponse> f = new CompletableFuture<>();
+		final CompletableFuture<HttpResponse> f = new CompletableFuture<>();
 		f.complete(resp);
 		
-		Mockito.doReturn(f).when(sessionMock).execute(Mockito.any(RequestBuilder.class));
+		Mockito
+			.doReturn(f)
+			.when(sessionMock)
+			.execute(Mockito.any(RequestBuilder.class));
 		
-		TOSession session = TOSession.builder().setRestClient(sessionMock).build();
+		TOSession session = TOSession
+				.builder()
+				.fromURI(baseUri)
+				.setRestClient(sessionMock)
+				.build();
 		
 		try {
 			session.getDeliveryServices().get();
@@ -62,16 +77,29 @@ public class TOSessionTest {
 	
 	@Test
 	public void deliveryServices() throws Throwable {
-		HttpResponse resp = Mockito.mock(HttpResponse.class);
-		Mockito.doReturn(new BasicStatusLine(HttpVersion.HTTP_1_0, 200, "Ok")).when(resp).getStatusLine();
-		Mockito.doReturn(new StringEntity(DeliveryService_Good_Response)).when(resp).getEntity();
+		final HttpResponse resp = Mockito.mock(HttpResponse.class);
+		Mockito
+			.doReturn(new BasicStatusLine(HttpVersion.HTTP_1_0, 200, "Ok"))
+			.when(resp)
+			.getStatusLine();
+		Mockito
+			.doReturn(new StringEntity(DeliveryService_Good_Response))
+			.when(resp)
+			.getEntity();
 		
-		CompletableFuture<HttpResponse> f = new CompletableFuture<>();
+		final CompletableFuture<HttpResponse> f = new CompletableFuture<>();
 		f.complete(resp);
 		
-		Mockito.doReturn(f).when(sessionMock).execute(Mockito.any(RequestBuilder.class));
+		Mockito
+			.doReturn(f)
+			.when(sessionMock)
+			.execute(Mockito.any(RequestBuilder.class));
+		
+		final TOSession session = TOSession.builder()
+				.fromURI(baseUri)
+				.setRestClient(sessionMock)
+				.build();
 		
-		TOSession session = TOSession.builder().setRestClient(sessionMock).build();
 		CollectionResponse cResp = session.getDeliveryServices().get();
 		
 		assertNotNull(cResp);


[trafficcontrol] 01/12: Added Java API foundations. Added foundation for TrafficOps java api

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit 213f65b9e64dc3db8e04c326078a3aa3dfb0358b
Author: nerdynick <ne...@gmail.com>
AuthorDate: Tue Dec 5 09:40:53 2017 -0700

    Added Java API foundations. Added foundation for TrafficOps java api
---
 traffic_control/clients/java/.gitignore            |   4 +
 traffic_control/clients/java/common/.gitignore     |   1 +
 traffic_control/clients/java/common/pom.xml        |  29 ++++
 .../cdn/traffic_control/RestApiSession.java        | 171 +++++++++++++++++++
 .../exception/InvalidJsonException.java            |  26 +++
 .../traffic_control/exception/LoginException.java  |  26 +++
 .../exception/OperationException.java              |  26 +++
 .../exception/TrafficControlException.java         |  26 +++
 traffic_control/clients/java/pom.xml               |  47 ++++++
 traffic_control/clients/java/trafficops/.gitignore |   1 +
 traffic_control/clients/java/trafficops/pom.xml    |  40 +++++
 .../com/comcast/cdn/traffic_control/TOSession.java | 181 +++++++++++++++++++++
 .../comcast/cdn/traffic_control/models/Alert.java  |  20 +++
 .../cdn/traffic_control/models/Response.java       |  27 +++
 .../comcast/cdn/traffic_control/TOSessionTest.java |  85 ++++++++++
 .../trafficops/src/test/resources/logback-test.xml |  12 ++
 16 files changed, 722 insertions(+)

diff --git a/traffic_control/clients/java/.gitignore b/traffic_control/clients/java/.gitignore
new file mode 100644
index 0000000..0ac589d
--- /dev/null
+++ b/traffic_control/clients/java/.gitignore
@@ -0,0 +1,4 @@
+.settings
+.project
+.classpath
+.factorypath
diff --git a/traffic_control/clients/java/common/.gitignore b/traffic_control/clients/java/common/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/traffic_control/clients/java/common/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/traffic_control/clients/java/common/pom.xml b/traffic_control/clients/java/common/pom.xml
new file mode 100644
index 0000000..9c40861
--- /dev/null
+++ b/traffic_control/clients/java/common/pom.xml
@@ -0,0 +1,29 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>com.comcast.cdn.traffic_control</groupId>
+		<artifactId>traffic-control-java-client</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<artifactId>traffic-control-java-client-common</artifactId>
+	<dependencies>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpasyncclient</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.google.auto.value</groupId>
+			<artifactId>auto-value</artifactId>
+			<version>1.5.2</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+		</dependency>
+	</dependencies>
+</project>
\ No newline at end of file
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
new file mode 100644
index 0000000..941d4c4
--- /dev/null
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
@@ -0,0 +1,171 @@
+package com.comcast.cdn.traffic_control;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.concurrent.CompletableFuture;
+
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.CookieStore;
+import org.apache.http.client.config.CookieSpecs;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.client.methods.RequestBuilder;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.concurrent.FutureCallback;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.BasicCookieStore;
+import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
+import org.apache.http.impl.nio.client.HttpAsyncClients;
+import org.apache.http.message.BasicHeader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.comcast.cdn.traffic_control.exception.OperationException;
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableList;
+
+@AutoValue
+public abstract class RestApiSession implements Closeable {
+	@SuppressWarnings("unused")
+	private static final Logger LOG = LoggerFactory.getLogger(RestApiSession.class);
+
+	private static final String URL_FORMAT_STR = "%s://%s:%s/%s/%s/%s";
+	
+	public static final String DEFAULT_API_PATH = "api";
+	public static final String DEFAULT_API_VERSION = "1.2";
+	public static final ImmutableList<Header> DEFAULT_HEADERS;
+	static {
+		DEFAULT_HEADERS = ImmutableList.<Header>builder()
+				.add(new BasicHeader("Content-Type", "application/json; charset=UTF-8")).build();
+	};
+
+	private CloseableHttpAsyncClient httpclient;
+
+	public void open() {
+		if (httpclient == null) {
+			RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.DEFAULT).build();
+			CookieStore cookieStore = new BasicCookieStore();
+			HttpClientContext context = HttpClientContext.create();
+			context.setCookieStore(cookieStore);
+
+			httpclient = HttpAsyncClients.custom()
+					.setDefaultRequestConfig(globalConfig)
+					.setDefaultCookieStore(cookieStore).build();
+		}
+
+		if (!httpclient.isRunning()) {
+			httpclient.start();
+		}
+	}
+
+	public boolean isRunning() {
+		if (httpclient == null) {
+			return false;
+		} else {
+			return httpclient.isRunning();
+		}
+	}
+
+	public void close() throws IOException {
+		if (httpclient != null) {
+			httpclient.close();
+			httpclient = null;
+		}
+	}
+
+	public String buildUrl(String path) {
+		return String.format(URL_FORMAT_STR, this.ssl() ?"https":"http", this.host(), this.port(), this.apiBasePath(),
+				this.apiVersion(), path);
+	}
+	
+	public CompletableFuture<HttpResponse> get(String url) {
+		return execute(RequestBuilder.get(url));
+	}
+	
+	public CompletableFuture<HttpResponse> post(String url, String body) {
+		final HttpEntity e = new StringEntity(body, Charsets.UTF_8);
+		return execute(RequestBuilder.post()
+				.setUri(url)
+				.setEntity(e));
+	}
+	
+	public CompletableFuture<HttpResponse> execute(RequestBuilder request) {
+		for(Header h: this.defaultHeaders()) {
+			request.addHeader(h);
+		}
+		
+		return this.execute(request.build());
+	}
+	
+	private CompletableFuture<HttpResponse> execute(HttpUriRequest request) {
+		final CompletableFutureCallback future = new CompletableFutureCallback();
+		try {
+			this.open();
+			this.httpclient.execute(request, future);
+		} catch(Throwable e) {
+			future.completeExceptionally(e);
+		}
+		
+		return future;
+	}
+	
+	private class CompletableFutureCallback extends CompletableFuture<HttpResponse> implements FutureCallback<HttpResponse>{
+		@Override
+		public void completed(HttpResponse result) {
+			this.complete(result);
+		}
+
+		@Override
+		public void failed(Exception ex) {
+			this.completeExceptionally(ex);
+		}
+
+		@Override
+		public void cancelled() {
+			this.completeExceptionally(new OperationException("HTTP Request was cancelled"));
+		}
+	}
+
+	public abstract String host();
+
+	public abstract int port();
+
+	public abstract String apiVersion();
+
+	public abstract String apiBasePath();
+
+	public abstract ImmutableList<Header> defaultHeaders();
+
+	public abstract boolean ssl();
+
+	static Builder builder() {
+		return new AutoValue_RestApiSession.Builder()
+				.setApiBasePath(DEFAULT_API_PATH)
+				.setApiVersion(DEFAULT_API_VERSION)
+				.setDefaultHeaders(DEFAULT_HEADERS);
+	}
+	
+	public abstract Builder toBuilder();
+
+	@AutoValue.Builder
+	public abstract static class Builder {
+		public abstract RestApiSession build();
+
+		public abstract Builder setHost(String host);
+
+		public abstract Builder setPort(int port);
+
+		public abstract Builder setApiVersion(String version);
+
+		public abstract Builder setApiBasePath(String version);
+
+		public abstract Builder setSsl(boolean ssl);
+
+		public abstract Builder setDefaultHeaders(ImmutableList<Header> headers);
+		public abstract ImmutableList.Builder<Header> defaultHeadersBuilder();
+
+	}
+}
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java
new file mode 100644
index 0000000..696574b
--- /dev/null
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java
@@ -0,0 +1,26 @@
+package com.comcast.cdn.traffic_control.exception;
+
+public class InvalidJsonException extends TrafficControlException {
+	private static final long serialVersionUID = 1884362711438565843L;
+
+	public InvalidJsonException() {
+		super();
+	}
+
+	public InvalidJsonException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+		super(message, cause, enableSuppression, writableStackTrace);
+	}
+
+	public InvalidJsonException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public InvalidJsonException(String message) {
+		super(message);
+	}
+
+	public InvalidJsonException(Throwable cause) {
+		super(cause);
+	}
+	
+}
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java
new file mode 100644
index 0000000..83fcdc6
--- /dev/null
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java
@@ -0,0 +1,26 @@
+package com.comcast.cdn.traffic_control.exception;
+
+public class LoginException extends TrafficControlException {
+	private static final long serialVersionUID = -5021620597469977194L;
+
+	public LoginException() {
+		super();
+	}
+
+	public LoginException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+		super(message, cause, enableSuppression, writableStackTrace);
+	}
+
+	public LoginException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public LoginException(String message) {
+		super(message);
+	}
+
+	public LoginException(Throwable cause) {
+		super(cause);
+	}
+	
+}
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java
new file mode 100644
index 0000000..1a019fa
--- /dev/null
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java
@@ -0,0 +1,26 @@
+package com.comcast.cdn.traffic_control.exception;
+
+public class OperationException extends TrafficControlException {
+	private static final long serialVersionUID = 8799467021892976240L;
+
+	public OperationException() {
+		super();
+	}
+
+	public OperationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+		super(message, cause, enableSuppression, writableStackTrace);
+	}
+
+	public OperationException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public OperationException(String message) {
+		super(message);
+	}
+
+	public OperationException(Throwable cause) {
+		super(cause);
+	}
+	
+}
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java
new file mode 100644
index 0000000..617db9d
--- /dev/null
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java
@@ -0,0 +1,26 @@
+package com.comcast.cdn.traffic_control.exception;
+
+public class TrafficControlException extends Exception {
+	private static final long serialVersionUID = 914940907727369814L;
+
+	public TrafficControlException() {
+		super();
+	}
+
+	public TrafficControlException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+		super(message, cause, enableSuppression, writableStackTrace);
+	}
+
+	public TrafficControlException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public TrafficControlException(String message) {
+		super(message);
+	}
+
+	public TrafficControlException(Throwable cause) {
+		super(cause);
+	}
+	
+}
diff --git a/traffic_control/clients/java/pom.xml b/traffic_control/clients/java/pom.xml
new file mode 100644
index 0000000..c921a8e
--- /dev/null
+++ b/traffic_control/clients/java/pom.xml
@@ -0,0 +1,47 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>com.comcast.cdn.traffic_control</groupId>
+	<artifactId>traffic-control-java-client</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+	<modules>
+		<module>common</module>
+		<module>trafficops</module>
+	</modules>
+	<properties>
+		<java.version>1.8</java.version>
+	</properties>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>${java.version}</source>
+					<target>${java.version}</target>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.slf4j</groupId>
+				<artifactId>slf4j-api</artifactId>
+				<version>1.7.25</version>
+			</dependency>
+			<dependency>
+				<groupId>org.apache.httpcomponents</groupId>
+				<artifactId>httpasyncclient</artifactId>
+				<version>4.1.3</version>
+			</dependency>
+			<dependency>
+				<groupId>com.google.guava</groupId>
+				<artifactId>guava</artifactId>
+				<version>23.5-jre</version>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+</project>
\ No newline at end of file
diff --git a/traffic_control/clients/java/trafficops/.gitignore b/traffic_control/clients/java/trafficops/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/traffic_control/clients/java/trafficops/pom.xml b/traffic_control/clients/java/trafficops/pom.xml
new file mode 100644
index 0000000..2c3a5b3
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/pom.xml
@@ -0,0 +1,40 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>com.comcast.cdn.traffic_control</groupId>
+		<artifactId>traffic-control-java-client</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<artifactId>traffic-control-java-client-trafficops</artifactId>
+	<dependencies>
+		<dependency>
+			<groupId>com.comcast.cdn.traffic_control</groupId>
+			<artifactId>traffic-control-java-client-common</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.code.gson</groupId>
+			<artifactId>gson</artifactId>
+			<version>2.8.2</version>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-classic</artifactId>
+			<version>1.1.3</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<version>2.12.0</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+</project>
\ No newline at end of file
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
new file mode 100644
index 0000000..82791f4
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
@@ -0,0 +1,181 @@
+package com.comcast.cdn.traffic_control;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.BiConsumer;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.RequestBuilder;
+import org.apache.http.entity.StringEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.comcast.cdn.traffic_control.exception.LoginException;
+import com.comcast.cdn.traffic_control.exception.OperationException;
+import com.comcast.cdn.traffic_control.models.Alert;
+import com.comcast.cdn.traffic_control.models.Response;
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableMap;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+@AutoValue
+public abstract class TOSession {
+	@SuppressWarnings("unused")
+	private static final Logger LOG = LoggerFactory.getLogger(TOSession.class);
+	
+	private static final Gson gson = new GsonBuilder()
+			.create();
+	
+	private boolean isLoggedIn = false;
+	
+	public String toUrl() {
+		return this.restClient().buildUrl("/");
+	}
+	public boolean isLoggedIn() {
+		return isLoggedIn;
+	}
+	
+	public CompletableFuture<Boolean> login(final String username, final String password) {
+		final String url = this.restClient().buildUrl("user/login.json");
+		
+		return ResponseFuture.builder()
+			.setHandleException((f,t)-> {
+				f.completeExceptionally(new LoginException(String.format("Failed to login with username %s", username), t));
+			})
+			.setMethod(ResponseFuture.Method.POST)
+			.setUrl(url)
+			.setBody(gson.toJson(ImmutableMap.<String,String>of("u", username, "p", password))).build()
+			.thenApply(r->{
+				isLoggedIn = true;
+				return true;
+			});
+	}
+	
+	public CompletableFuture<Response.CollectionResponse> getServers(){
+		final String url = this.restClient().buildUrl("servers.json");
+		return ResponseFuture.builder(Response.CollectionResponse.class)
+				.setMethod(ResponseFuture.Method.GET)
+				.setUrl(url)
+				.setSession(this.restClient())
+				.build();
+	}
+	
+	public CompletableFuture<Response.CollectionResponse> getDeliveryServices(){
+		final String url = this.restClient().buildUrl("deliveryservices.json");
+		LOG.debug("getDeliveryService url {}", url);
+		return ResponseFuture.builder(Response.CollectionResponse.class)
+				.setMethod(ResponseFuture.Method.GET)
+				.setUrl(url)
+				.setSession(this.restClient())
+				.build();
+	}
+	
+	
+	@AutoValue
+	protected abstract static class ResponseFuture<T extends Response> extends CompletableFuture<T> implements BiConsumer<HttpResponse, Throwable> {
+		private static final Logger LOG = LoggerFactory.getLogger(ResponseFuture.class);
+		public static enum Method{
+			POST	, GET
+		}
+		
+		public abstract Optional<BiConsumer<ResponseFuture<T>, Throwable>> handleException();
+		public abstract Class<T> responseType();
+		public abstract Method method();
+		public abstract String url();
+		public abstract RestApiSession session();
+		public abstract Optional<String> body();
+		
+		public static <T extends Response> Builder<T> builder(Class<T> response) {
+			return new AutoValue_TOSession_ResponseFuture.Builder<T>()
+					.setResponseType(response);
+		}
+		public static Builder<Response> builder() {
+			return builder(Response.class);
+		}
+		
+		public ResponseFuture<T> execute(){
+			LOG.debug("Requesting: {} {}", this.method(), this.url());
+			RequestBuilder rBuilder = RequestBuilder.create(this.method().toString());
+			if(this.body().isPresent()) {
+				rBuilder.setEntity(new StringEntity(this.body().get(), Charsets.UTF_8));
+			}
+			this.session().execute(rBuilder).whenComplete(this);
+			return this;
+		}
+		
+		@AutoValue.Builder
+		public abstract static class Builder<T extends Response> {
+			public ResponseFuture<T> build(){
+				return autoBuild().execute();
+			}
+			protected abstract ResponseFuture<T> autoBuild();
+			public abstract Builder<T> setHandleException(BiConsumer<ResponseFuture<T>, Throwable> function);
+			public abstract Builder<T> setResponseType(Class<T> respone);
+			public abstract Builder<T> setMethod(Method method);
+			public abstract Builder<T> setUrl(String url);
+			public abstract Builder<T> setSession(RestApiSession session);
+			public abstract Builder<T> setBody(String body);
+		}
+		
+		@Override
+		public void accept(HttpResponse res, Throwable u) {
+			try {
+				switch(res.getStatusLine().getStatusCode()) {
+					case 200:
+						break;
+					case 401:
+						_handleException(new LoginException("Login required"));
+						return;
+					default:
+						_handleException(new OperationException(String.format("None 200 response: %s %s", res.getStatusLine().getStatusCode(), res.getStatusLine().getReasonPhrase())));
+						return;
+				}
+				
+				InputStreamReader r = new InputStreamReader(res.getEntity().getContent());
+				T resp = gson.fromJson(r, responseType());
+				if(resp.getAlerts() != null) {
+					for(Alert a: resp.getAlerts()) {
+						if("error".equals(a.getLevel())) {
+							_handleException(new OperationException("Recieved error from server: "+ a.getText()));
+							return;
+						}
+					}
+				}
+				
+				this.complete(resp);
+			} catch (UnsupportedOperationException | IOException e) {
+				_handleException(new OperationException("Reading response failed", e));
+				return;
+			}
+		}
+		
+		private void _handleException(Throwable t) {
+			if(handleException().isPresent()) {
+				handleException().get().accept(this, t);
+			}
+			
+			if(!this.isDone()) {
+				this.completeExceptionally(t);
+			}
+		}
+	}
+	
+	public abstract RestApiSession restClient();
+	
+	static Builder builder() {
+		return new AutoValue_TOSession.Builder();
+	}
+	public abstract Builder toBuilder();
+	
+	@AutoValue.Builder
+	public abstract static class Builder {
+		public abstract TOSession build();
+		
+		public abstract Builder setRestClient(RestApiSession restClient);
+		public abstract RestApiSession.Builder restClientBuilder();
+	}
+}
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java
new file mode 100644
index 0000000..0a6e2f9
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java
@@ -0,0 +1,20 @@
+package com.comcast.cdn.traffic_control.models;
+
+public class Alert {
+	private String level;
+	private String text;
+	
+	public String getLevel() {
+		return level;
+	}
+	public void setLevel(String level) {
+		this.level = level;
+	}
+	public String getText() {
+		return text;
+	}
+	public void setText(String text) {
+		this.text = text;
+	}
+	
+}
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
new file mode 100644
index 0000000..987aee2
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
@@ -0,0 +1,27 @@
+package com.comcast.cdn.traffic_control.models;
+
+import java.util.List;
+import java.util.Map;
+
+public class Response {
+	private List<Alert> alerts;
+
+	public List<Alert> getAlerts() {
+		return alerts;
+	}
+	public void setAlerts(List<Alert> alerts) {
+		this.alerts = alerts;
+	}
+	
+	public class CollectionResponse extends Response {
+		private List<Map<String, Object>> response;
+
+		public List<Map<String, Object>> getResponse() {
+			return response;
+		}
+
+		public void setResponse(List<Map<String, Object>> response) {
+			this.response = response;
+		}
+	}
+}
diff --git a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java b/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
new file mode 100644
index 0000000..efa310e
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
@@ -0,0 +1,85 @@
+package com.comcast.cdn.traffic_control;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpVersion;
+import org.apache.http.client.methods.RequestBuilder;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.message.BasicStatusLine;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.comcast.cdn.traffic_control.exception.LoginException;
+import com.comcast.cdn.traffic_control.models.Response.CollectionResponse;
+
+public class TOSessionTest {
+	private static final Logger LOG = LoggerFactory.getLogger(TOSessionTest.class);
+	
+	public static final String DeliveryService_Good_Response = "{\"response\": [{\"cachegroup\": \"us-co-denver\"}]}";
+	
+	private RestApiSession sessionMock;
+	
+	@Before
+	public void before() {
+		sessionMock = Mockito.mock(RestApiSession.class, Mockito.CALLS_REAL_METHODS);
+	}
+	@After
+	public void after() {
+		sessionMock=null;
+	}
+
+	@Test
+	public void testBuild() {
+		TOSession.builder().setRestClient(sessionMock).build();
+	}
+	
+	@Test(expected=LoginException.class)
+	public void test401Response() throws Throwable {
+		HttpResponse resp = Mockito.mock(HttpResponse.class);
+		Mockito.when(resp.getStatusLine()).thenReturn(new BasicStatusLine(HttpVersion.HTTP_1_0, 401, "Not Auth"));
+		
+		CompletableFuture<HttpResponse> f = new CompletableFuture<>();
+		f.complete(resp);
+		
+		Mockito.doReturn(f).when(sessionMock).execute(Mockito.any(RequestBuilder.class));
+		
+		TOSession session = TOSession.builder().setRestClient(sessionMock).build();
+		
+		try {
+			session.getDeliveryServices().get();
+		} catch(Throwable e) {
+			throw e.getCause();
+		}
+	}
+	
+	@Test
+	public void deliveryServices() throws Throwable {
+		HttpResponse resp = Mockito.mock(HttpResponse.class);
+		Mockito.doReturn(new BasicStatusLine(HttpVersion.HTTP_1_0, 200, "Ok")).when(resp).getStatusLine();
+		Mockito.doReturn(new StringEntity(DeliveryService_Good_Response)).when(resp).getEntity();
+		
+		CompletableFuture<HttpResponse> f = new CompletableFuture<>();
+		f.complete(resp);
+		
+		Mockito.doReturn(f).when(sessionMock).execute(Mockito.any(RequestBuilder.class));
+		
+		TOSession session = TOSession.builder().setRestClient(sessionMock).build();
+		CollectionResponse cResp = session.getDeliveryServices().get();
+		
+		assertNotNull(cResp);
+		assertNotNull(cResp.getResponse());
+		assertEquals(1, cResp.getResponse().size());
+		
+		final Map<String,Object> service = cResp.getResponse().get(0);
+		assertEquals("us-co-denver", service.get("cachegroup"));
+		LOG.debug("Service: {}", service);
+	}
+}
diff --git a/traffic_control/clients/java/trafficops/src/test/resources/logback-test.xml b/traffic_control/clients/java/trafficops/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..185b678
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/src/test/resources/logback-test.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<configuration>
+	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss} [%p] [%t] %C:%L %m%n</pattern>
+		</encoder>
+	</appender>
+
+	<root level="DEBUG">
+		<appender-ref ref="STDOUT" />
+	</root>
+</configuration>
\ No newline at end of file


[trafficcontrol] 10/12: Added Apache License to all Java API Files

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit 7bf3c5195993b863ef2473048046f4b9b0d21cda
Author: nerdynick <ne...@gmail.com>
AuthorDate: Thu May 24 09:30:42 2018 -0600

    Added Apache License to all Java API Files
---
 traffic_control/clients/java/CONTRIBUTE.md          | 19 +++++++++++++++++++
 traffic_control/clients/java/README.md              | 19 +++++++++++++++++++
 traffic_control/clients/java/common/pom.xml         | 19 +++++++++++++++++++
 .../comcast/cdn/traffic_control/RestApiSession.java | 15 +++++++++++++++
 .../exception/InvalidJsonException.java             | 15 +++++++++++++++
 .../traffic_control/exception/LoginException.java   | 15 +++++++++++++++
 .../exception/OperationException.java               | 15 +++++++++++++++
 .../exception/TrafficControlException.java          | 15 +++++++++++++++
 traffic_control/clients/java/pom.xml                | 19 +++++++++++++++++++
 traffic_control/clients/java/trafficops/README.md   | 21 +++++++++++++++++++++
 traffic_control/clients/java/trafficops/pom.xml     | 19 +++++++++++++++++++
 .../comcast/cdn/traffic_control/ResponseFuture.java | 15 +++++++++++++++
 .../com/comcast/cdn/traffic_control/TOSession.java  | 15 +++++++++++++++
 .../comcast/cdn/traffic_control/models/Alert.java   | 15 +++++++++++++++
 .../cdn/traffic_control/models/Response.java        | 15 +++++++++++++++
 .../comcast/cdn/traffic_control/TOSessionTest.java  | 15 +++++++++++++++
 .../trafficops/src/test/resources/logback-test.xml  | 19 ++++++++++++++++++-
 17 files changed, 284 insertions(+), 1 deletion(-)

diff --git a/traffic_control/clients/java/CONTRIBUTE.md b/traffic_control/clients/java/CONTRIBUTE.md
index 0c53ef7..563d34d 100644
--- a/traffic_control/clients/java/CONTRIBUTE.md
+++ b/traffic_control/clients/java/CONTRIBUTE.md
@@ -1,3 +1,22 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
 # IDE Setup
 
 Most all of the code contained uses Builders for implementation. This ensures all properties are managed and defaults are used. As well as facilitate YAML based construction. 
diff --git a/traffic_control/clients/java/README.md b/traffic_control/clients/java/README.md
index 43d9592..013ae5b 100644
--- a/traffic_control/clients/java/README.md
+++ b/traffic_control/clients/java/README.md
@@ -1,3 +1,22 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
 # Java API Framework
 
 Simple framework for Rest based API communication. 
diff --git a/traffic_control/clients/java/common/pom.xml b/traffic_control/clients/java/common/pom.xml
index 9c40861..f1f208f 100644
--- a/traffic_control/clients/java/common/pom.xml
+++ b/traffic_control/clients/java/common/pom.xml
@@ -1,3 +1,22 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
index c6bc632..d85af05 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control;
 
 import java.io.Closeable;
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java
index 696574b..568f091 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/InvalidJsonException.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control.exception;
 
 public class InvalidJsonException extends TrafficControlException {
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java
index 83fcdc6..d81b8b6 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/LoginException.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control.exception;
 
 public class LoginException extends TrafficControlException {
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java
index 1a019fa..fca9480 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/OperationException.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control.exception;
 
 public class OperationException extends TrafficControlException {
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java
index 617db9d..69cfc62 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/exception/TrafficControlException.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control.exception;
 
 public class TrafficControlException extends Exception {
diff --git a/traffic_control/clients/java/pom.xml b/traffic_control/clients/java/pom.xml
index c921a8e..18eb1af 100644
--- a/traffic_control/clients/java/pom.xml
+++ b/traffic_control/clients/java/pom.xml
@@ -1,3 +1,22 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
diff --git a/traffic_control/clients/java/trafficops/README.md b/traffic_control/clients/java/trafficops/README.md
index cb784c5..9bd3e0d 100644
--- a/traffic_control/clients/java/trafficops/README.md
+++ b/traffic_control/clients/java/trafficops/README.md
@@ -1,3 +1,22 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
 # TrafficOps Api Client
 
 Simple Java API client for communicating with the TrafficOps API
@@ -13,6 +32,7 @@ Simple Java API client for communicating with the TrafficOps API
 final URI trafficOpsUri = new URI("https://trafficops.mycdn.com:443");
 final TOSession.Builder toSessionBuilder = TOSession.builder()
 	.fromURI(trafficOpsUri);
+final RestApiSession.Builder restSession = toSessionBuilder.restClientBuilder();
 final TOSession toSession = toSessionBuilder.build();
 ```
 **Explicitly set properties**
@@ -24,6 +44,7 @@ final TOSession.Builder toSessionBuilder = TOSession.builder()
 	.setHost("trafficops.mycdn.com")
 	.setPort(443)
 	.setSsl(true);
+final RestApiSession.Builder restSession = toSessionBuilder.restClientBuilder();
 final TOSession toSession = toSessionBuilder.build();
 ```
 
diff --git a/traffic_control/clients/java/trafficops/pom.xml b/traffic_control/clients/java/trafficops/pom.xml
index 2c3a5b3..56f350a 100644
--- a/traffic_control/clients/java/trafficops/pom.xml
+++ b/traffic_control/clients/java/trafficops/pom.xml
@@ -1,3 +1,22 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java
index af2b655..8a2af1c 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/ResponseFuture.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control;
 
 import java.io.IOException;
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
index 081ce13..1f6c9a8 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control;
 
 import java.io.Closeable;
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java
index 0a6e2f9..bb5bd83 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Alert.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control.models;
 
 public class Alert {
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
index ef7b50b..ad039cd 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/models/Response.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control.models;
 
 import java.util.List;
diff --git a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java b/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
index 3cf550b..e1e2f06 100644
--- a/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
+++ b/traffic_control/clients/java/trafficops/src/test/java/com/comcast/cdn/traffic_control/TOSessionTest.java
@@ -1,3 +1,18 @@
+/*
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.comcast.cdn.traffic_control;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
diff --git a/traffic_control/clients/java/trafficops/src/test/resources/logback-test.xml b/traffic_control/clients/java/trafficops/src/test/resources/logback-test.xml
index 185b678..cca2d34 100644
--- a/traffic_control/clients/java/trafficops/src/test/resources/logback-test.xml
+++ b/traffic_control/clients/java/trafficops/src/test/resources/logback-test.xml
@@ -1,4 +1,21 @@
-<?xml version="1.0"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
 <configuration>
 	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 		<encoder>


[trafficcontrol] 06/12: Added README and IDE setup guide for Java API Client

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit d0c7977591a785b8fd18024a50fd72955a027830
Author: nerdynick <ne...@gmail.com>
AuthorDate: Thu May 17 12:08:21 2018 -0600

    Added README and IDE setup guide for Java API Client
---
 traffic_control/clients/java/CONTRIBUTE.md        | 22 ++++++++
 traffic_control/clients/java/README.md            |  9 +++
 traffic_control/clients/java/trafficops/README.md | 67 +++++++++++++++++++++++
 3 files changed, 98 insertions(+)

diff --git a/traffic_control/clients/java/CONTRIBUTE.md b/traffic_control/clients/java/CONTRIBUTE.md
new file mode 100644
index 0000000..0c53ef7
--- /dev/null
+++ b/traffic_control/clients/java/CONTRIBUTE.md
@@ -0,0 +1,22 @@
+# IDE Setup
+
+Most all of the code contained uses Builders for implementation. This ensures all properties are managed and defaults are used. As well as facilitate YAML based construction. 
+Most all of these builders are constructed using Google's AutoValue library. This allows for auto code generation based on annotations and abstract classes. 
+To support this within your IDE you will need to do a couple things listed below.
+
+## Eclipse
+
+1. Install m2e-apt from the Eclipse marketplace. Help -> Eclipse Marketplace -> Search "m2 apt" -> Install m2e-apt
+2. Activate the apt processing. Preferences -> Maven -> Annotation processing -> Switch to Experimental
+3. Import project or if it has already been imported refresh the projects form the maven sub-menu.
+
+## IntelliJ
+
+1. Open Annotation Processors settings. Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors
+2. Select the following buttons:
+   * Enable annotation processing
+   * Obtain processors from project classpath
+   * Store generated sources relative to: Module content root
+3. Set the generated source directories to be equal to the Maven directories:
+   * Set “Production sources directory:” to t"arget/generated-sources/annotations"
+   * Set “Test sources directory:” to "target/generated-test-sources/test-annotations"
\ No newline at end of file
diff --git a/traffic_control/clients/java/README.md b/traffic_control/clients/java/README.md
new file mode 100644
index 0000000..97b9a3e
--- /dev/null
+++ b/traffic_control/clients/java/README.md
@@ -0,0 +1,9 @@
+# Java API Framework
+
+Simple framework for Rest based API communication. 
+
+See [TrafficOps Readme](trafficops/README.mb) for example and usage with communicating with the TrafficOps API
+
+## Development
+
+See [Contribute](CONTRIBUTE.mb) for information on setting up your IDE.
diff --git a/traffic_control/clients/java/trafficops/README.md b/traffic_control/clients/java/trafficops/README.md
new file mode 100644
index 0000000..21211a4
--- /dev/null
+++ b/traffic_control/clients/java/trafficops/README.md
@@ -0,0 +1,67 @@
+# TrafficOps Api Client
+
+Simple Java API client for communicating with the TrafficOps API
+
+## Example Usage
+
+### Create Traffic Ops session
+
+*Using a provided URI*
+
+```java
+//Construct TrafficOps Session
+final URI trafficOpsUri = new URI("https://trafficops.mycdn.com:443");
+final TOSession.Builder toSessionBuilder = TOSession.builder()
+	.fromURI(trafficOpsUri);
+final TOSession toSession = toSessionBuilder.build();
+```
+*Explicitly set properties *
+
+```java
+//Construct TrafficOps Session
+final URI trafficOpsUri = new URI("http://trafficops.mycdn.com:443");
+final TOSession.Builder toSessionBuilder = TOSession.builder()
+	.setHost("trafficops.mycdn.com")
+	.setPort(443)
+	.setSsl(true);
+final TOSession toSession = toSessionBuilder.build();
+```
+
+### Logging In
+
+```java
+//Login
+final CompletableFuture<Boolean> loginFuture = toSession
+	.login("MyUsername", "MyPassword");
+try {
+	//Timeout if login takes longer then 1sec
+	loginFuture.get(1000, TimeUnit.MILLISECONDS);
+} catch(TimeoutException e) {
+	loginFuture.cancel(true);
+	LOG.error("Timeout while logging in");
+	System.exit(1);
+}
+```
+
+### Getting a list of All Servers
+
+*Synchronously*
+
+```java
+final CollectionResponse response = toSession.getServers().get();
+```
+
+*Asynchronously*
+
+```java
+toSession
+	.getServers()
+	.whenCompleteAsync((servers, exception)->{
+		if(exception != null){
+			//Handle Exception
+		} else {
+			//Do something with your server list
+		}
+	});
+
+```
\ No newline at end of file


[trafficcontrol] 05/12: Default RestClient value for Java API Client

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit cb30f32942b2b577514b8d61af89ea566ddfd168
Author: nerdynick <ne...@gmail.com>
AuthorDate: Thu May 17 12:08:03 2018 -0600

    Default RestClient value for Java API Client
---
 .../src/main/java/com/comcast/cdn/traffic_control/TOSession.java     | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
index 605d228..1e264ec 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
@@ -139,9 +139,12 @@ public abstract class TOSession implements Closeable {
 	
 	
 	public static Builder builder() {
-		return new AutoValue_TOSession.Builder()
+		final Builder b = new AutoValue_TOSession.Builder()
 				.setApiBasePath(DEFAULT_API_PATH)
 				.setApiVersion(DEFAULT_API_VERSION);
+		b.restClientBuilder();
+		
+		return b;
 	}
 	public abstract Builder toBuilder();
 	


[trafficcontrol] 07/12: Fix README links within Java API Client

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit 1c8fa3f759f5cf28077bac32a4a6aa7de9607968
Author: nerdynick <ne...@gmail.com>
AuthorDate: Thu May 17 12:11:21 2018 -0600

    Fix README links within Java API Client
---
 traffic_control/clients/java/README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/traffic_control/clients/java/README.md b/traffic_control/clients/java/README.md
index 97b9a3e..43d9592 100644
--- a/traffic_control/clients/java/README.md
+++ b/traffic_control/clients/java/README.md
@@ -2,8 +2,8 @@
 
 Simple framework for Rest based API communication. 
 
-See [TrafficOps Readme](trafficops/README.mb) for example and usage with communicating with the TrafficOps API
+See [TrafficOps Readme](trafficops/README.md) for example and usage with communicating with the TrafficOps API
 
 ## Development
 
-See [Contribute](CONTRIBUTE.mb) for information on setting up your IDE.
+See [Contribute](CONTRIBUTE.md) for information on setting up your IDE.


[trafficcontrol] 08/12: Fix format within README of java api client

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit a47734e9a8aba4a92a9de4d993ee7c19ae1b4e07
Author: nerdynick <ne...@gmail.com>
AuthorDate: Thu May 17 12:12:47 2018 -0600

    Fix format within README of java api client
---
 traffic_control/clients/java/trafficops/README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/traffic_control/clients/java/trafficops/README.md b/traffic_control/clients/java/trafficops/README.md
index 21211a4..cb784c5 100644
--- a/traffic_control/clients/java/trafficops/README.md
+++ b/traffic_control/clients/java/trafficops/README.md
@@ -6,7 +6,7 @@ Simple Java API client for communicating with the TrafficOps API
 
 ### Create Traffic Ops session
 
-*Using a provided URI*
+**Using a provided URI**
 
 ```java
 //Construct TrafficOps Session
@@ -15,7 +15,7 @@ final TOSession.Builder toSessionBuilder = TOSession.builder()
 	.fromURI(trafficOpsUri);
 final TOSession toSession = toSessionBuilder.build();
 ```
-*Explicitly set properties *
+**Explicitly set properties**
 
 ```java
 //Construct TrafficOps Session
@@ -45,13 +45,13 @@ try {
 
 ### Getting a list of All Servers
 
-*Synchronously*
+**Synchronously**
 
 ```java
 final CollectionResponse response = toSession.getServers().get();
 ```
 
-*Asynchronously*
+**Asynchronously**
 
 ```java
 toSession


[trafficcontrol] 02/12: Added debuging statements. Added support for cancel chaining via futures. Added Close support for TOSession. Fixes for request build and submit.

Posted by ne...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

neuman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit eac77359b190cf00de9be7fd94f3ce20f273b3a8
Author: nerdynick <ne...@gmail.com>
AuthorDate: Wed Dec 6 12:55:43 2017 -0700

    Added debuging statements. Added support for cancel chaining via futures. Added Close support for TOSession. Fixes for request build and submit.
---
 traffic_control/clients/java/.gitignore            |  1 +
 .../cdn/traffic_control/RestApiSession.java        | 33 +++++++++++++++++++---
 .../com/comcast/cdn/traffic_control/TOSession.java | 31 +++++++++++++++-----
 3 files changed, 54 insertions(+), 11 deletions(-)

diff --git a/traffic_control/clients/java/.gitignore b/traffic_control/clients/java/.gitignore
index 0ac589d..7f07816 100644
--- a/traffic_control/clients/java/.gitignore
+++ b/traffic_control/clients/java/.gitignore
@@ -2,3 +2,4 @@
 .project
 .classpath
 .factorypath
+target
diff --git a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
index 941d4c4..1e140b0 100644
--- a/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
+++ b/traffic_control/clients/java/common/src/main/java/com/comcast/cdn/traffic_control/RestApiSession.java
@@ -3,6 +3,7 @@ package com.comcast.cdn.traffic_control;
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Future;
 
 import org.apache.http.Header;
 import org.apache.http.HttpEntity;
@@ -29,7 +30,6 @@ import com.google.common.collect.ImmutableList;
 
 @AutoValue
 public abstract class RestApiSession implements Closeable {
-	@SuppressWarnings("unused")
 	private static final Logger LOG = LoggerFactory.getLogger(RestApiSession.class);
 
 	private static final String URL_FORMAT_STR = "%s://%s:%s/%s/%s/%s";
@@ -46,14 +46,18 @@ public abstract class RestApiSession implements Closeable {
 
 	public void open() {
 		if (httpclient == null) {
-			RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.DEFAULT).build();
+			RequestConfig globalConfig = RequestConfig.custom()
+					.setCookieSpec(CookieSpecs.STANDARD) //User standard instead of default. Default will result in cookie parse exceptions with the Mojolicous cookie
+					.setConnectTimeout(5000)
+					.build();
 			CookieStore cookieStore = new BasicCookieStore();
 			HttpClientContext context = HttpClientContext.create();
 			context.setCookieStore(cookieStore);
 
 			httpclient = HttpAsyncClients.custom()
 					.setDefaultRequestConfig(globalConfig)
-					.setDefaultCookieStore(cookieStore).build();
+					.setDefaultCookieStore(cookieStore)
+					.build();
 		}
 
 		if (!httpclient.isRunning()) {
@@ -103,8 +107,12 @@ public abstract class RestApiSession implements Closeable {
 	private CompletableFuture<HttpResponse> execute(HttpUriRequest request) {
 		final CompletableFutureCallback future = new CompletableFutureCallback();
 		try {
+			LOG.debug("Opening RestClient");
 			this.open();
-			this.httpclient.execute(request, future);
+			
+			LOG.debug("Dispatching request: {}", request);
+			final Future<HttpResponse> reFuture = this.httpclient.execute(request, future);
+			future.setReFuture(reFuture);
 		} catch(Throwable e) {
 			future.completeExceptionally(e);
 		}
@@ -113,20 +121,37 @@ public abstract class RestApiSession implements Closeable {
 	}
 	
 	private class CompletableFutureCallback extends CompletableFuture<HttpResponse> implements FutureCallback<HttpResponse>{
+		private Future<HttpResponse> reFuture;
+		
+		@Override
+		public boolean cancel(boolean mayInterruptIfRunning) {
+			if(reFuture != null) {
+				return reFuture.cancel(mayInterruptIfRunning);
+			}
+			return false;
+		}
+		
 		@Override
 		public void completed(HttpResponse result) {
+			LOG.debug("Request Completed: {}", result);
 			this.complete(result);
 		}
 
 		@Override
 		public void failed(Exception ex) {
+			LOG.debug("Request Failed", ex);
 			this.completeExceptionally(ex);
 		}
 
 		@Override
 		public void cancelled() {
+			LOG.debug("Request Cancelled");
 			this.completeExceptionally(new OperationException("HTTP Request was cancelled"));
 		}
+
+		public void setReFuture(Future<HttpResponse> reFuture) {
+			this.reFuture = reFuture;
+		}
 	}
 
 	public abstract String host();
diff --git a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
index 82791f4..a5e307c 100644
--- a/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
+++ b/traffic_control/clients/java/trafficops/src/main/java/com/comcast/cdn/traffic_control/TOSession.java
@@ -1,5 +1,6 @@
 package com.comcast.cdn.traffic_control;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.Optional;
@@ -23,8 +24,7 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
 @AutoValue
-public abstract class TOSession {
-	@SuppressWarnings("unused")
+public abstract class TOSession implements Closeable {
 	private static final Logger LOG = LoggerFactory.getLogger(TOSession.class);
 	
 	private static final Gson gson = new GsonBuilder()
@@ -32,6 +32,10 @@ public abstract class TOSession {
 	
 	private boolean isLoggedIn = false;
 	
+	public void close() throws IOException {
+		this.restClient().close();
+	}
+	
 	public String toUrl() {
 		return this.restClient().buildUrl("/");
 	}
@@ -41,13 +45,14 @@ public abstract class TOSession {
 	
 	public CompletableFuture<Boolean> login(final String username, final String password) {
 		final String url = this.restClient().buildUrl("user/login.json");
-		
+		LOG.debug("Logging into: {}", url);
 		return ResponseFuture.builder()
 			.setHandleException((f,t)-> {
 				f.completeExceptionally(new LoginException(String.format("Failed to login with username %s", username), t));
 			})
 			.setMethod(ResponseFuture.Method.POST)
 			.setUrl(url)
+			.setSession(this.restClient())
 			.setBody(gson.toJson(ImmutableMap.<String,String>of("u", username, "p", password))).build()
 			.thenApply(r->{
 				isLoggedIn = true;
@@ -89,6 +94,8 @@ public abstract class TOSession {
 		public abstract RestApiSession session();
 		public abstract Optional<String> body();
 		
+		private CompletableFuture<HttpResponse> subFuture;
+		
 		public static <T extends Response> Builder<T> builder(Class<T> response) {
 			return new AutoValue_TOSession_ResponseFuture.Builder<T>()
 					.setResponseType(response);
@@ -97,13 +104,23 @@ public abstract class TOSession {
 			return builder(Response.class);
 		}
 		
+		@Override
+		public boolean cancel(boolean mayInterruptIfRunning) {
+			if(subFuture != null) {
+				return subFuture.cancel(mayInterruptIfRunning);
+			}
+			return false;
+		}
+		
 		public ResponseFuture<T> execute(){
-			LOG.debug("Requesting: {} {}", this.method(), this.url());
-			RequestBuilder rBuilder = RequestBuilder.create(this.method().toString());
+			RequestBuilder rBuilder = RequestBuilder
+					.create(this.method().toString())
+					.setUri(this.url());
 			if(this.body().isPresent()) {
 				rBuilder.setEntity(new StringEntity(this.body().get(), Charsets.UTF_8));
 			}
-			this.session().execute(rBuilder).whenComplete(this);
+			subFuture = this.session().execute(rBuilder);
+			subFuture.whenComplete(this);
 			return this;
 		}
 		
@@ -166,7 +183,7 @@ public abstract class TOSession {
 	
 	public abstract RestApiSession restClient();
 	
-	static Builder builder() {
+	public static Builder builder() {
 		return new AutoValue_TOSession.Builder();
 	}
 	public abstract Builder toBuilder();