From ee1af6cb1cc18c0a2abfeccd32aed70c316276cb Mon Sep 17 00:00:00 2001 From: mestizoLopez Date: Sat, 28 Dec 2019 18:52:49 -0600 Subject: [PATCH] Adding new methods for Http Client (#60) * Adding new methods for Http Client * Finishing implementation for HttpClient * Adding JavaDoc and Changing return Type to new Methods * Using ObjectSerializer and changing Constants values --- .../main/java/io/dapr/actors/Constants.java | 18 +++ .../client/ActorProxyClientBuilder.java | 2 +- .../client/ActorProxyHttpAsyncClient.java | 3 +- .../runtime/AppToDaprClientBuilder.java | 2 +- .../runtime/AppToDaprHttpAsyncClient.java | 135 +++++++++++++++++- .../AbstractClientBuilder.java | 4 +- .../AbstractDaprHttpClient.java} | 15 +- .../{actors => exceptions}/DaprError.java | 4 +- .../{actors => exceptions}/DaprException.java | 6 +- 9 files changed, 172 insertions(+), 17 deletions(-) rename sdk/src/main/java/io/dapr/{actors => client}/AbstractClientBuilder.java (95%) rename sdk/src/main/java/io/dapr/{actors/AbstractDaprClient.java => client/AbstractDaprHttpClient.java} (94%) rename sdk/src/main/java/io/dapr/{actors => exceptions}/DaprError.java (94%) rename sdk/src/main/java/io/dapr/{actors => exceptions}/DaprException.java (87%) diff --git a/sdk/src/main/java/io/dapr/actors/Constants.java b/sdk/src/main/java/io/dapr/actors/Constants.java index c09014d02..d0782de0e 100644 --- a/sdk/src/main/java/io/dapr/actors/Constants.java +++ b/sdk/src/main/java/io/dapr/actors/Constants.java @@ -63,4 +63,22 @@ public final class Constants { * String format for Actors timer registration relative url.. */ public static String ACTOR_TIMER_RELATIVE_URL_FORMAT = ACTORS_BASE_URL + "/%s/%s/reminders/%s"; + + /** + * Invoke Publish Path + */ + public static String PUBLISH_PATH = API_VERSION + "/publish"; + + /** + * Invoke Binding Path + */ + public static String BINDING_PATH = API_VERSION + "/binding"; + + /** + * State Path + */ + public static String STATE_PATH = API_VERSION + "/state"; + + + } diff --git a/sdk/src/main/java/io/dapr/actors/client/ActorProxyClientBuilder.java b/sdk/src/main/java/io/dapr/actors/client/ActorProxyClientBuilder.java index 64af557b7..df3c931f3 100644 --- a/sdk/src/main/java/io/dapr/actors/client/ActorProxyClientBuilder.java +++ b/sdk/src/main/java/io/dapr/actors/client/ActorProxyClientBuilder.java @@ -4,7 +4,7 @@ */ package io.dapr.actors.client; -import io.dapr.actors.*; +import io.dapr.client.AbstractClientBuilder; import okhttp3.OkHttpClient; /** diff --git a/sdk/src/main/java/io/dapr/actors/client/ActorProxyHttpAsyncClient.java b/sdk/src/main/java/io/dapr/actors/client/ActorProxyHttpAsyncClient.java index 96075290e..a6d879f2f 100644 --- a/sdk/src/main/java/io/dapr/actors/client/ActorProxyHttpAsyncClient.java +++ b/sdk/src/main/java/io/dapr/actors/client/ActorProxyHttpAsyncClient.java @@ -5,13 +5,14 @@ package io.dapr.actors.client; import io.dapr.actors.*; +import io.dapr.client.AbstractDaprHttpClient; import okhttp3.*; import reactor.core.publisher.Mono; /** * Http client to call actors methods. */ -class ActorProxyHttpAsyncClient extends AbstractDaprClient implements ActorProxyAsyncClient { +class ActorProxyHttpAsyncClient extends AbstractDaprHttpClient implements ActorProxyAsyncClient { /** * Creates a new instance of {@link ActorProxyHttpAsyncClient}. diff --git a/sdk/src/main/java/io/dapr/actors/runtime/AppToDaprClientBuilder.java b/sdk/src/main/java/io/dapr/actors/runtime/AppToDaprClientBuilder.java index 7f4299f65..982e1bc16 100644 --- a/sdk/src/main/java/io/dapr/actors/runtime/AppToDaprClientBuilder.java +++ b/sdk/src/main/java/io/dapr/actors/runtime/AppToDaprClientBuilder.java @@ -4,7 +4,7 @@ */ package io.dapr.actors.runtime; -import io.dapr.actors.AbstractClientBuilder; +import io.dapr.client.AbstractClientBuilder; import okhttp3.OkHttpClient; /** diff --git a/sdk/src/main/java/io/dapr/actors/runtime/AppToDaprHttpAsyncClient.java b/sdk/src/main/java/io/dapr/actors/runtime/AppToDaprHttpAsyncClient.java index 93f5db094..93419488f 100644 --- a/sdk/src/main/java/io/dapr/actors/runtime/AppToDaprHttpAsyncClient.java +++ b/sdk/src/main/java/io/dapr/actors/runtime/AppToDaprHttpAsyncClient.java @@ -4,15 +4,32 @@ */ package io.dapr.actors.runtime; -import io.dapr.actors.AbstractDaprClient; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.dapr.actors.utils.ObjectSerializer; +import io.dapr.client.AbstractDaprHttpClient; import io.dapr.actors.Constants; +import io.dapr.exceptions.DaprException; import okhttp3.OkHttpClient; import reactor.core.publisher.Mono; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + /** * Http client to call Dapr's API for actors. */ -class AppToDaprHttpAsyncClient extends AbstractDaprClient implements AppToDaprAsyncClient { +//public class DaprHttpAsyncClient implements DaprAsyncClient { +class AppToDaprHttpAsyncClient extends AbstractDaprHttpClient implements AppToDaprAsyncClient { + + /** + * ObjectMapper to Serialize data + */ + private static final ObjectSerializer MAPPER = new ObjectSerializer(); + + private Map dataMap; + /** * Creates a new instance of {@link AppToDaprHttpAsyncClient}. @@ -77,4 +94,118 @@ class AppToDaprHttpAsyncClient extends AbstractDaprClient implements AppToDaprAs String url = String.format(Constants.ACTOR_TIMER_RELATIVE_URL_FORMAT, actorType, actorId, timerName); return super.invokeAPIVoid("DELETE", url, null); } + + /** + * Creating publishEvent for Http Client + * + * @param topic HTTP method. + * @param data url as String. + * @param method JSON payload or null. + * @return Mono + */ + public Mono publishEvent(String topic, String data, String method) throws Exception { + + if (topic.isEmpty() || topic == null ) { + throw new DaprException("500" , "Topic cannot be null or empty."); + } + + if ( method.isEmpty() || method == null ) { + throw new DaprException("500", "Method cannot be null or empty."); + } + + String url = method.equals("POST") ? Constants.PUBLISH_PATH : Constants.PUBLISH_PATH + "/" + topic; + + dataMap = new HashMap(); + dataMap.put(topic,data); + + String jsonResult = MAPPER.serialize(dataMap); + + return super.invokeAPI(method, url, jsonResult); + } + + /** + * Creating invokeBinding Method for Http Client + * + * @param name HTTP method. + * @param data url as String. + * @param method JSON payload or null. + * @return Mono + */ + public Mono invokeBinding(String name, String data, String method) throws Exception { + + if (name.isEmpty() || name == null) { + throw new DaprException("500", "Name cannot be null or empty."); + } + + if (method.isEmpty() || method == null) { + throw new DaprException("500","Method cannot be null or empty."); + } + + String url = method.equals("POST") ? Constants.BINDING_PATH : Constants.BINDING_PATH + "/" + name; + + dataMap = new HashMap(); + dataMap.put(name,data); + + String jsonResult = MAPPER.serialize(dataMap); + + return super.invokeAPI(method, url, jsonResult); + } + + /** + * Creating invokeBinding Method for Http Client + * + * @param key HTTP method. + * @return Mono + */ + public Mono getState(String key) throws DaprException { + + if (key.isEmpty() || key == null) { + throw new DaprException("500", "Name cannot be null or empty."); + } + + String url = Constants.STATE_PATH + "/" + key; + + return super.invokeAPI("GET", url, null); + } + + /** + * Creating invokeBinding Method for Http Client + * + * @param key HTTP method. + * @param data HTTP method. + * @return Mono + */ + public Mono saveState(String key, String data) throws Exception { + + if (key.isEmpty() || key == null) { + throw new DaprException("500", "Name cannot be null or empty."); + } + + String url = Constants.STATE_PATH; + + dataMap = new HashMap(); + dataMap.put(key,data); + + String jsonResult = MAPPER.serialize(dataMap); + + return super.invokeAPI("POST", url, jsonResult); + } + + /** + * Creating invokeBinding Method for Http Client + * + * @param key HTTP method. + * @return Mono + */ + public Mono deleteState(String key) throws DaprException { + + if (key.isEmpty() || key == null) { + throw new DaprException("500", "Name cannot be null or empty."); + } + + String url = Constants.STATE_PATH + "/" + key; + + return super.invokeAPI("DELETE", url, null); + } + } diff --git a/sdk/src/main/java/io/dapr/actors/AbstractClientBuilder.java b/sdk/src/main/java/io/dapr/client/AbstractClientBuilder.java similarity index 95% rename from sdk/src/main/java/io/dapr/actors/AbstractClientBuilder.java rename to sdk/src/main/java/io/dapr/client/AbstractClientBuilder.java index 7de34461f..60ead0dbb 100644 --- a/sdk/src/main/java/io/dapr/actors/AbstractClientBuilder.java +++ b/sdk/src/main/java/io/dapr/client/AbstractClientBuilder.java @@ -2,7 +2,9 @@ * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. */ -package io.dapr.actors; +package io.dapr.client; + +import io.dapr.actors.Constants; /** * Base class for client builders diff --git a/sdk/src/main/java/io/dapr/actors/AbstractDaprClient.java b/sdk/src/main/java/io/dapr/client/AbstractDaprHttpClient.java similarity index 94% rename from sdk/src/main/java/io/dapr/actors/AbstractDaprClient.java rename to sdk/src/main/java/io/dapr/client/AbstractDaprHttpClient.java index 7ce645fb8..f3f34507d 100644 --- a/sdk/src/main/java/io/dapr/actors/AbstractDaprClient.java +++ b/sdk/src/main/java/io/dapr/client/AbstractDaprHttpClient.java @@ -2,17 +2,20 @@ * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. */ -package io.dapr.actors; +package io.dapr.client; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.net.URL; import java.util.UUID; + +import io.dapr.actors.Constants; +import io.dapr.exceptions.DaprError; +import io.dapr.exceptions.DaprException; import okhttp3.*; import reactor.core.publisher.Mono; -// base class of hierarchy -public abstract class AbstractDaprClient { +public abstract class AbstractDaprHttpClient { /** * Defines the standard application/json type for HTTP calls in Dapr. @@ -40,12 +43,12 @@ public abstract class AbstractDaprClient { private final OkHttpClient httpClient; /** - * Creates a new instance of {@link AbstractDaprClient}. + * Creates a new instance of {@link AbstractDaprHttpClient}. * * @param port Port for calling Dapr. (e.g. 3500) * @param httpClient RestClient used for all API calls in this new instance. */ - public AbstractDaprClient(int port, OkHttpClient httpClient) { + public AbstractDaprHttpClient(int port, OkHttpClient httpClient) { this.baseUrl = String.format("http://%s:%d/", Constants.DEFAULT_HOSTNAME, port);; this.httpClient = httpClient; } @@ -178,4 +181,4 @@ public abstract class AbstractDaprClient { public void onSuccess(String response); } -} \ No newline at end of file +} diff --git a/sdk/src/main/java/io/dapr/actors/DaprError.java b/sdk/src/main/java/io/dapr/exceptions/DaprError.java similarity index 94% rename from sdk/src/main/java/io/dapr/actors/DaprError.java rename to sdk/src/main/java/io/dapr/exceptions/DaprError.java index 672d4a4e2..e0d716a61 100644 --- a/sdk/src/main/java/io/dapr/actors/DaprError.java +++ b/sdk/src/main/java/io/dapr/exceptions/DaprError.java @@ -2,12 +2,12 @@ * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. */ -package io.dapr.actors; +package io.dapr.exceptions; /** * Represents an error message from Dapr. */ -class DaprError { +public class DaprError { /** * Error code. diff --git a/sdk/src/main/java/io/dapr/actors/DaprException.java b/sdk/src/main/java/io/dapr/exceptions/DaprException.java similarity index 87% rename from sdk/src/main/java/io/dapr/actors/DaprException.java rename to sdk/src/main/java/io/dapr/exceptions/DaprException.java index 67c251f8c..2f758969d 100644 --- a/sdk/src/main/java/io/dapr/actors/DaprException.java +++ b/sdk/src/main/java/io/dapr/exceptions/DaprException.java @@ -2,7 +2,7 @@ * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. */ -package io.dapr.actors; +package io.dapr.exceptions; import java.io.IOException; @@ -21,7 +21,7 @@ public class DaprException extends IOException { * * @param daprError Server-side error. */ - DaprException(DaprError daprError) { + public DaprException(DaprError daprError) { this(daprError.getErrorCode(), daprError.getMessage()); } @@ -31,7 +31,7 @@ public class DaprException extends IOException { * @param errorCode Client-side error code. * @param message Client-side error message. */ - DaprException(String errorCode, String message) { + public DaprException(String errorCode, String message) { super(String.format("%s: %s", errorCode, message)); this.errorCode = errorCode; }