Skip to content

Commit 0fae6e0

Browse files
author
Carlos Bouzón García
committed
[issue-511] Fix serialization of additional data on Collections
1 parent 46fa196 commit 0fae6e0

File tree

3 files changed

+48
-12
lines changed

3 files changed

+48
-12
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,4 @@ hs_err_pid*
3333
/target/
3434
/pom.xml
3535
local.properties
36+
.idea

src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,34 @@ private JsonObject getChildAdditionalData(IJsonBackedObject serializableObject,
287287
}
288288
}
289289
}
290-
// If the object is a valid Graph object, add its additional data
291-
else if (fieldObject != null && fieldObject instanceof IJsonBackedObject) {
292-
IJsonBackedObject serializableChild = (IJsonBackedObject) fieldObject;
290+
// If the object is a list of Graph objects, iterate through elements
291+
else if (fieldObject instanceof List) {
292+
if(outJson != null
293+
&& outJson.get(field.getName()) != null
294+
&& outJson.get(field.getName()).isJsonArray()) {
295+
final List<?> fieldObjectList = (List<?>) fieldObject;
296+
for (int index = 0; index < fieldObjectList.size(); index++) {
297+
Object element = fieldObjectList.get(index);
298+
JsonObject jsonElement = outJson
299+
.get(field.getName())
300+
.getAsJsonArray()
301+
.get(index)
302+
.getAsJsonObject();
303+
if (element instanceof IJsonBackedObject) {
304+
AdditionalDataManager elementAdditionalData = ((IJsonBackedObject) element)
305+
.additionalDataManager();
306+
addAdditionalDataToJson(
307+
elementAdditionalData,
308+
jsonElement
309+
);
310+
outJson = getChildAdditionalData((IJsonBackedObject) element, jsonElement);
311+
}
312+
}
313+
}
314+
}
315+
// If the object is a valid Graph object, add its additional data
316+
else if (fieldObject != null && fieldObject instanceof IJsonBackedObject) {
317+
IJsonBackedObject serializableChild = (IJsonBackedObject) fieldObject;
293318
AdditionalDataManager childAdditionalData = serializableChild.additionalDataManager();
294319
if(outJson != null && field != null && outJson.get(field.getName()) != null && outJson.get(field.getName()).isJsonObject()) {
295320
addAdditionalDataToJson(childAdditionalData, outJson.get(field.getName()).getAsJsonObject());

src/test/java/com/microsoft/graph/serializer/AdditionalDataTests.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import static org.junit.Assert.assertNull;
77
import static org.junit.Assert.assertTrue;
88

9+
import com.microsoft.graph.models.extensions.*;
910
import org.junit.Before;
1011
import org.junit.Test;
1112

@@ -18,15 +19,8 @@
1819
import com.microsoft.graph.functional.TestBase;
1920
import com.microsoft.graph.http.HttpMethod;
2021
import com.microsoft.graph.logger.DefaultLogger;
21-
import com.microsoft.graph.models.extensions.Drive;
22-
import com.microsoft.graph.models.extensions.DriveItemCreateUploadSessionBody;
23-
import com.microsoft.graph.models.extensions.DriveItemUploadableProperties;
24-
import com.microsoft.graph.models.extensions.Entity;
25-
import com.microsoft.graph.models.extensions.PlannerAssignment;
26-
import com.microsoft.graph.models.extensions.PlannerAssignments;
27-
import com.microsoft.graph.models.extensions.PlannerTask;
28-
import com.microsoft.graph.models.extensions.PlannerTaskDetails;
29-
import com.microsoft.graph.models.extensions.User;
22+
23+
import java.util.Collections;
3024

3125
public class AdditionalDataTests {
3226
public DefaultSerializer serializer;
@@ -150,4 +144,20 @@ public void testHashMapProperties() {
150144
assertTrue(taskDetails.checklist.get("d280ed1a-9f6b-4f9c-a962-fb4d00dc50ff").title.equals("Try reading task details"));
151145
assertTrue(taskDetails.checklist.get("d280ed1a-9f6b-4f9c-a962-fb4d00dc50ff").lastModifiedBy.user.additionalDataManager().get("customProp").getAsString().equals("somestring"));
152146
}
147+
148+
@Test
149+
public void testSerializeAdditionalDataOnCollections() {
150+
ChatMessage chatMessage = new ChatMessage();
151+
ChatMessageMention chatMessageMention = new ChatMessageMention();
152+
chatMessageMention.additionalDataManager().put("helloWorld", new JsonPrimitive("3.141516"));
153+
IdentitySet identitySet = new IdentitySet();
154+
identitySet.additionalDataManager().put("identitySetKey", new JsonPrimitive("identitySetValue"));
155+
chatMessageMention.mentioned = identitySet;
156+
chatMessage.mentions = Collections.singletonList(chatMessageMention);
157+
String output = serializer.serializeObject(chatMessage);
158+
assertTrue(output.contains("helloWorld"));
159+
assertTrue(output.contains("3.141516"));
160+
assertTrue(output.contains("identitySetKey"));
161+
assertTrue(output.contains("identitySetValue"));
162+
}
153163
}

0 commit comments

Comments
 (0)