From b79ecf7c68118c1a8809acddd9a1aec4834d48d6 Mon Sep 17 00:00:00 2001 From: Kirill Lanchev Date: Fri, 21 Jun 2019 00:09:18 +0300 Subject: [PATCH 1/4] Update BaseActivityHistoryItem.java --- .../graph/models/generated/BaseActivityHistoryItem.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/microsoft/graph/models/generated/BaseActivityHistoryItem.java b/src/main/java/com/microsoft/graph/models/generated/BaseActivityHistoryItem.java index 1e39bfccdeb..79c0b64c715 100644 --- a/src/main/java/com/microsoft/graph/models/generated/BaseActivityHistoryItem.java +++ b/src/main/java/com/microsoft/graph/models/generated/BaseActivityHistoryItem.java @@ -117,6 +117,7 @@ public class BaseActivityHistoryItem extends Entity implements IJsonBackedObject * * @return the raw representation of this class */ + @Override public JsonObject getRawObject() { return rawObject; } From 1d612490b72d5dce5f0149aac5787fdb3a5a751a Mon Sep 17 00:00:00 2001 From: Kirill Lanchev Date: Fri, 13 Sep 2019 18:03:53 +0300 Subject: [PATCH 2/4] Additional data populated for collections (e.g. drive items) --- .../graph/serializer/DefaultSerializer.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java b/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java index cc5d31e29d4..807edda2555 100644 --- a/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java +++ b/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java @@ -25,12 +25,13 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CaseFormat; import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.microsoft.graph.logger.ILogger; - import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -142,6 +143,21 @@ private void setChildAdditionalData(IJsonBackedObject serializedObject, JsonObje } } } + // If the object is a list of Graph objects, iterate through elements + else if (fieldObject instanceof List && rawJson != null) { + final JsonElement collectionJson = rawJson.get(field.getName()); + final List fieldObjectList = (List) fieldObject; + if (collectionJson.isJsonArray() && ((JsonArray)collectionJson).size() == fieldObjectList.size()) { + final JsonArray rawJsonArray = (JsonArray) collectionJson; + for (int i = 0; i < fieldObjectList.size(); i++) { + final Object element = fieldObjectList.get(i); + if (element instanceof IJsonBackedObject) { + final JsonElement elementRawJson = rawJsonArray.get(i); + setChildAdditionalData((IJsonBackedObject) element, elementRawJson.getAsJsonObject()); + } + } + } + } // If the object is a valid Graph object, set its additional data else if (fieldObject != null && fieldObject instanceof IJsonBackedObject) { IJsonBackedObject serializedChild = (IJsonBackedObject) fieldObject; From 3a3dde2579c80f0a51fe9455c027bd8452e5c130 Mon Sep 17 00:00:00 2001 From: Kirill Lanchev Date: Fri, 13 Sep 2019 20:00:45 +0300 Subject: [PATCH 3/4] Test --- .../serializer/DefaultSerializerTests.java | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/microsoft/graph/serializer/DefaultSerializerTests.java b/src/test/java/com/microsoft/graph/serializer/DefaultSerializerTests.java index 4c1359cd61d..e3ab6c2f075 100644 --- a/src/test/java/com/microsoft/graph/serializer/DefaultSerializerTests.java +++ b/src/test/java/com/microsoft/graph/serializer/DefaultSerializerTests.java @@ -3,8 +3,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import org.junit.Test; - import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; @@ -15,9 +13,11 @@ import com.microsoft.graph.models.extensions.DateOnly; import com.microsoft.graph.models.extensions.Drive; import com.microsoft.graph.models.extensions.FileAttachment; -import com.microsoft.graph.models.extensions.User; import com.microsoft.graph.models.extensions.RecurrenceRange; +import com.microsoft.graph.models.extensions.User; import com.microsoft.graph.models.generated.RecurrenceRangeType; +import com.microsoft.graph.requests.extensions.DriveItemDeltaCollectionResponse; +import org.junit.Test; public class DefaultSerializerTests { @@ -26,7 +26,7 @@ public class DefaultSerializerTests { * * @throws Exception If there is an exception during the test */ - @Test + @Test public void testDriveDeserialization() throws Exception { final DefaultSerializer serializer = new DefaultSerializer(new DefaultLogger()); String source = "{\"@odata.context\":\"https://graph.microsoft.com/v1.0/$metadata#drives/$entity\",\"id\":\"8bf6ae90006c4a4c\",\"driveType\":\"personal\",\"owner\":{\"user\":{\"displayName\":\"Peter\",\"id\":\"8bf6ae90006c4a4c\"}},\"quota\":{\"deleted\":1485718314,\"remaining\":983887466461,\"state\":\"normal\",\"total\":1142461300736,\"used\":158573834275}}"; @@ -38,6 +38,43 @@ public void testDriveDeserialization() throws Exception { } + /** + * Make sure that deserializing a DriveItems also deserializes child additionalData + * + * @throws Exception If there is an exception during the test + */ + @Test + public void testDriveItemChildAdditionalDataDeserialization() throws Exception { + final DefaultSerializer serializer = new DefaultSerializer(new DefaultLogger()); + String source = "{\n" + + " \"@odata.context\": \"https://graph.microsoft.com/v1.0/$metadata#users('02008492-3fec-4ce4-bb54-980ad856856f')/drive/root/children\",\n" + + " \"value\": [\n" + + " {\n" + + " \"createdBy\": {\n" + + " \"user\": {\n" + + " \"email\": \"the@email.com\",\n" + + " \"id\": \"02008492-3fec-4ce4-bb54-980ad856856f\",\n" + + " \"displayName\": \"John Doe\"\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + "}"; + + DriveItemDeltaCollectionResponse result = serializer + .deserializeObject(source, DriveItemDeltaCollectionResponse.class); + assertNotNull(result); + assertNotNull(result.value); + assertEquals(1, result.value.size()); + assertNotNull(result.value.get(0)); + assertNotNull(result.value.get(0).createdBy); + assertNotNull(result.value.get(0).createdBy.user); + assertNotNull(result.value.get(0).createdBy.user.additionalDataManager()); + assertNotNull(result.value.get(0).createdBy.user.additionalDataManager().get("email")); + assertEquals("the@email.com", + result.value.get(0).createdBy.user.additionalDataManager().get("email").getAsString()); + } + @Test public void testRecurrenceRangeDeserialization() throws Exception { final DefaultSerializer serializer = new DefaultSerializer(new DefaultLogger()); From 329be32dcd8e125f38fb7af477a3b9f57b600c60 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 2 Sep 2020 10:23:43 -0400 Subject: [PATCH 4/4] - removes unecessary warning suppress - changes List to generic of unknown to avoid compile warning --- .../java/com/microsoft/graph/serializer/DefaultSerializer.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java b/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java index 76e9ac3f3fd..cb4fd614ee2 100644 --- a/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java +++ b/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java @@ -124,7 +124,6 @@ private void setChildAdditionalData(IJsonBackedObject serializedObject, JsonObje // If the object is a HashMap, iterate through its children if (fieldObject instanceof HashMap) { - @SuppressWarnings("unchecked") HashMap serializableChildren = (HashMap) fieldObject; Iterator> it = serializableChildren.entrySet().iterator(); @@ -146,7 +145,7 @@ private void setChildAdditionalData(IJsonBackedObject serializedObject, JsonObje // If the object is a list of Graph objects, iterate through elements else if (fieldObject instanceof List && rawJson != null) { final JsonElement collectionJson = rawJson.get(field.getName()); - final List fieldObjectList = (List) fieldObject; + final List fieldObjectList = (List) fieldObject; if (collectionJson.isJsonArray() && ((JsonArray)collectionJson).size() == fieldObjectList.size()) { final JsonArray rawJsonArray = (JsonArray) collectionJson; for (int i = 0; i < fieldObjectList.size(); i++) {