From 59992447e8b12899095ec2147b247d2812b06423 Mon Sep 17 00:00:00 2001 From: Artur Z Date: Mon, 11 Sep 2017 18:11:40 +0100 Subject: [PATCH] Support of Arrays in followupEvent --- libai/src/main/java/ai/api/model/AIEvent.java | 42 ++++++++++++++----- .../test/java/ai/api/model/AIEventTest.java | 37 ++++++++++++---- .../java/ai/api/model/FulfillmentTest.java | 9 ++-- 3 files changed, 66 insertions(+), 22 deletions(-) diff --git a/libai/src/main/java/ai/api/model/AIEvent.java b/libai/src/main/java/ai/api/model/AIEvent.java index 5044fe8..5fdc833 100644 --- a/libai/src/main/java/ai/api/model/AIEvent.java +++ b/libai/src/main/java/ai/api/model/AIEvent.java @@ -16,12 +16,15 @@ package ai.api.model; -import com.google.gson.annotations.SerializedName; - import java.io.Serializable; +import java.util.Collection; import java.util.HashMap; import java.util.Map; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.annotations.SerializedName; + public class AIEvent implements Serializable { private static final long serialVersionUID = 1L; @@ -29,7 +32,7 @@ public class AIEvent implements Serializable { private String name; @SerializedName("data") - private Map data; + private Map data; public AIEvent() { @@ -53,24 +56,36 @@ public void setName(String name) { /** * String data map */ - public Map getData() { + public Map getData() { return data; } - public void setData(Map data) { + public void setData(Map data) { this.data = data; } public void addDataField(String key, String value) { if (data == null) - setData(new HashMap()); - data.put(key, value); + setData(new HashMap()); + data.put(key, new Gson().toJsonTree(value)); } public void addDataField(Map dataParams) { if (data == null) - setData(new HashMap()); - data.putAll(dataParams); + setData(new HashMap()); + + if (dataParams != null) { + for (Map.Entry entry : dataParams.entrySet()) { + this.data.put(entry.getKey(), new Gson().toJsonTree(entry.getValue())); + } + } + } + + public void addDataCollection(String key, Collection collection) { + if (data == null) + setData(new HashMap()); + + data.put(key, new Gson().toJsonTree(collection)); } public String getDataField(final String name) { @@ -78,8 +93,13 @@ public String getDataField(final String name) { } public String getDataField(final String name, final String defaultValue) { - if (data.containsKey(name)) { - return data.get(name); + if (data.containsKey(name) && data.get(name) != null) { + if(data.get(name).isJsonArray()) { + return data.get(name).toString(); + } else { + return data.get(name).getAsString(); + } + } return defaultValue; } diff --git a/libai/src/test/java/ai/api/model/AIEventTest.java b/libai/src/test/java/ai/api/model/AIEventTest.java index 027b7f2..894fc76 100644 --- a/libai/src/test/java/ai/api/model/AIEventTest.java +++ b/libai/src/test/java/ai/api/model/AIEventTest.java @@ -16,16 +16,20 @@ package ai.api.model; -import ai.api.GsonFactory; -import com.google.gson.Gson; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; +import org.junit.Test; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; + +import ai.api.GsonFactory; /** * Created by alexey on 07/12/2016. @@ -43,6 +47,13 @@ public class AIEventTest { " \"poker\": \"face\""+ " }\n" + "}"; + + private static final String ONE_EVENT_COLLECTION = "{\n" + + " \"name\": \"joke\",\n" + + " \"data\": {" + + " \"poker\": [\"face\",\"hand\"] "+ + " }\n" + + "}"; private static final String EVENTS_ARRAY = "{\n" + " \"name\": \"test\",\n" + @@ -50,7 +61,8 @@ public class AIEventTest { " \"heart\": \"ace\","+ " \"diamond\": \"King\","+ " \"club\": \"queen\","+ - " \"spade\": \"Jack\""+ + " \"spade\": \"Jack\","+ + " \"poker\": [\"face\",\"hand\"] "+ " }\n" + "}"; @@ -70,6 +82,16 @@ public void OneEvent() { assertEquals("joke", aiEvent.getName()); assertEquals("face", aiEvent.getDataField("poker")); } + + @Test + public void OneEventCollection() { + final AIEvent aiEvent = gson.fromJson(ONE_EVENT_COLLECTION, AIEvent.class); + List pokerBits = new ArrayList<>(); + pokerBits.add("face"); + pokerBits.add("hand"); + assertEquals("joke", aiEvent.getName()); + assertEquals("[\"face\",\"hand\"]", aiEvent.getDataField("poker")); + } @Test public void ListEvents() { @@ -79,12 +101,13 @@ public void ListEvents() { assertEquals("King", aiEvent.getDataField("diamond")); assertEquals("queen", aiEvent.getDataField("club")); assertEquals("Jack", aiEvent.getDataField("spade")); + assertEquals("[\"face\",\"hand\"]", aiEvent.getDataField("poker")); } @Test public void CreateEmptyEvent() { final AIEvent aiEvent = new AIEvent("test"); - aiEvent.setData(new HashMap()); + aiEvent.setData(new HashMap()); assertEquals("{\"name\":\"test\",\"data\":{}}", gson.toJson(aiEvent)); } diff --git a/libai/src/test/java/ai/api/model/FulfillmentTest.java b/libai/src/test/java/ai/api/model/FulfillmentTest.java index 320add5..aba7d14 100644 --- a/libai/src/test/java/ai/api/model/FulfillmentTest.java +++ b/libai/src/test/java/ai/api/model/FulfillmentTest.java @@ -41,7 +41,7 @@ public class FulfillmentTest { "{\"speech\":\"text\"," + "\"displayText\":\"DisplayText\", \"source\":\"webhook\", " + "\"contextOut\": [{\"name\":\"weather\", \"lifespan\":2, \"parameters\":{\"city\":\"Rome\"}}]," + "\"data\":{\"param\":\"value\"}," - + "\"followupEvent\":{\"data\":{\"event-param\":\"event-value\"},\"name\":\"test-event\"}}"; + + "\"followupEvent\":{\"data\":{\"event-param\":\"event-value\",\"event-param-array\":[\"event-value1\",\"event-value2\"]},\"name\":\"test-event\"}}"; private static final String TEST_FULFILLMENT_WITH_MESSAGES = "{\"speech\":\"test speech\","+ "\"messages\":[{\"imageUrl\":\"url image\",\"type\":3},{\"title\":\"Quick title\","+ @@ -93,9 +93,10 @@ public void testDeserializationWebhookResponse() { assertNotNull(fulfillment.getFollowupEvent()); assertEquals("test-event", fulfillment.getFollowupEvent().getName()); - assertEquals(1, fulfillment.getFollowupEvent().getData().size()); - assertEquals("event-value", fulfillment.getFollowupEvent().getData().get("event-param")); - } + assertEquals(2, fulfillment.getFollowupEvent().getData().size()); + assertEquals("event-value", fulfillment.getFollowupEvent().getData().get("event-param").getAsString()); + assertEquals("[\"event-value1\",\"event-value2\"]", fulfillment.getFollowupEvent().getData().get("event-param-array").getAsJsonArray().toString()); + } @Test public void testSerializationWithMessages() {