From 5fb43cc47045fc0cb83493bb89288cbc3c5f2df5 Mon Sep 17 00:00:00 2001 From: XiaofeiCao Date: Wed, 8 May 2024 15:45:57 +0800 Subject: [PATCH 1/4] test --- .../azure/core/management/ResourceTests.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java b/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java index 2235c58b5fcd..9eae93630fe1 100644 --- a/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java +++ b/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java @@ -6,6 +6,7 @@ import com.azure.core.management.implementation.ProxyResourceAccessHelper; import com.azure.json.JsonProviders; import com.azure.json.JsonReader; +import com.azure.json.JsonSerializable; import com.azure.json.JsonToken; import com.azure.json.JsonWriter; import com.azure.json.ReadValueCallback; @@ -13,7 +14,13 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.StringWriter; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; public class ResourceTests { @@ -127,6 +134,55 @@ public static ResourceWithSystemData fromJson(JsonReader jsonReader) throws IOEx } } + private static class SubResourceResource extends SubResource { + private SubResource subResource; + private List subResourceList; + private SubResourceResource subResourceResource; + private List subResourceResourceList; + + public SubResource subResource() { + return subResource; + } + + public SubResourceResource withSubResource(SubResource subResource) { + this.subResource = subResource; + return this; + } + + public List subResourceList() { + return subResourceList; + } + + public SubResourceResource withSubResourceList(List subResourceList) { + this.subResourceList = subResourceList; + return this; + } + + public SubResourceResource subResourceResource() { + return subResourceResource; + } + + public SubResourceResource withSubResourceResource(SubResourceResource subResourceResource) { + this.subResourceResource = subResourceResource; + return this; + } + + public List subResourceResourceList() { + return subResourceResourceList; + } + + public SubResourceResource withSubResourceResourceList(List subResourceResourceList) { + this.subResourceResourceList = subResourceResourceList; + return this; + } + + @Override + public SubResourceResource withId(String id) { + super.withId(id); + return this; + } + } + @Test public void testSerialization() throws IOException { String cosmosAccountJson @@ -190,6 +246,29 @@ public void testSerialization() throws IOException { Assertions.assertEquals("Microsoft.KeyVault/vaults", vaultResource.type()); Assertions.assertEquals(0, vaultResource.tags().size()); Assertions.assertNull(vaultResource.systemData()); + + // test SubResource + SubResourceResource subResourceResourceRoot = new SubResourceResource(); + SubResource subResource = new SubResource().withId(UUID.randomUUID().toString()); + SubResourceResource subResourceResourceNest = new SubResourceResource().withId(UUID.randomUUID().toString()); + subResourceResourceRoot + .withSubResource(subResource) + .withSubResourceList(Collections.singletonList(subResource)) + .withSubResourceResource(subResourceResourceNest) + .withSubResourceResourceList(Collections.singletonList(subResourceResourceNest)); + + String json = serializeToString(subResourceResourceRoot); + SubResourceResource subResourceResourceRootDeserialized = deserialize(json, SubResourceResource::fromJson); + Assertions.assertEquals(subResource.id(), subResourceResourceRootDeserialized.subResource().id()); + Assertions.assertEquals(subResource.id(), subResourceResourceRootDeserialized.subResourceList().iterator().next().id()); + Assertions.assertEquals(subResourceResourceNest.id(), subResourceResourceRootDeserialized.subResourceResource().id()); + Assertions.assertEquals(subResourceResourceNest.id(), subResourceResourceRootDeserialized.subResourceResourceList().iterator().next().id()); + } + + private static > String serializeToString(T serializable) throws IOException { + StringWriter writer = new StringWriter(); + serializable.toJson(JsonProviders.createWriter(writer)); + return writer.toString(); } private static T deserialize(String json, ReadValueCallback reader) throws IOException { From ae2cb0157061373aebb256c28f4e69fb5c869a59 Mon Sep 17 00:00:00 2001 From: XiaofeiCao Date: Wed, 8 May 2024 16:36:29 +0800 Subject: [PATCH 2/4] implementation --- .../azure/core/management/SubResource.java | 42 ++++++++++++++- .../azure/core/management/ResourceTests.java | 51 +++++++++++++++++-- 2 files changed, 89 insertions(+), 4 deletions(-) diff --git a/sdk/core/azure-core-management/src/main/java/com/azure/core/management/SubResource.java b/sdk/core/azure-core-management/src/main/java/com/azure/core/management/SubResource.java index 5e73c158412b..dea3c59f88be 100644 --- a/sdk/core/azure-core-management/src/main/java/com/azure/core/management/SubResource.java +++ b/sdk/core/azure-core-management/src/main/java/com/azure/core/management/SubResource.java @@ -3,10 +3,17 @@ package com.azure.core.management; +import com.azure.json.JsonReader; +import com.azure.json.JsonSerializable; +import com.azure.json.JsonToken; +import com.azure.json.JsonWriter; + +import java.io.IOException; + /** * The SubResource model. */ -public class SubResource { +public class SubResource implements JsonSerializable { /** * Resource Id. */ @@ -37,4 +44,37 @@ public SubResource withId(String id) { this.id = id; return this; } + + @Override + public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { + return jsonWriter.writeStartObject() + .writeStringField("id", id) + .writeEndObject(); + } + + /** + * Reads a JSON stream into a {@link SubResource}. + * + * @param jsonReader The {@link JsonReader} being read. + * @return The {@link SubResource} that the JSON stream represented, may return null. + * @throws IOException If a {@link SubResource} fails to be read from the {@code jsonReader}. + */ + public static SubResource fromJson(JsonReader jsonReader) throws IOException { + return jsonReader.readObject(reader -> { + SubResource subResource = new SubResource(); + + while (reader.nextToken() != JsonToken.END_OBJECT) { + String fieldName = reader.getFieldName(); + reader.nextToken(); + + if ("id".equals(fieldName)) { + subResource.id = reader.getString(); + } else { + reader.skipChildren(); + } + } + + return subResource; + }); + } } diff --git a/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java b/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java index 9eae93630fe1..5a82a9851796 100644 --- a/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java +++ b/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java @@ -14,10 +14,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringWriter; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.UUID; @@ -181,6 +179,51 @@ public SubResourceResource withId(String id) { super.withId(id); return this; } + + @Override + public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { + return jsonWriter.writeStartObject() + .writeStringField("id", id()) + .writeJsonField("subResource", this.subResource) + .writeArrayField("subResourceList", this.subResourceList, JsonWriter::writeJson) + .writeJsonField("subResourceResource", this.subResourceResource) + .writeArrayField("subResourceResourceList", this.subResourceResourceList, JsonWriter::writeJson) + .writeEndObject(); + } + + /** + * Reads a JSON stream into a {@link SubResourceResource}. + * + * @param jsonReader The {@link JsonReader} being read. + * @return The {@link SubResourceResource} that the JSON stream represented, may return null. + * @throws IOException If a {@link SubResourceResource} fails to be read from the {@code jsonReader}. + */ + public static SubResourceResource fromJson(JsonReader jsonReader) throws IOException { + return jsonReader.readObject(reader -> { + SubResourceResource subResource = new SubResourceResource(); + + while (reader.nextToken() != JsonToken.END_OBJECT) { + String fieldName = reader.getFieldName(); + reader.nextToken(); + + if ("id".equals(fieldName)) { + subResource.withId(reader.getString()); + } else if("subResource".equals(fieldName)) { + subResource.withSubResource(reader.readObject(reader1 -> SubResource.fromJson(reader1))); + } else if("subResourceList".equals(fieldName)) { + subResource.withSubResourceList(reader.readArray(reader1 -> SubResource.fromJson(reader1))); + } else if("subResourceResource".equals(fieldName)) { + subResource.withSubResourceResource(reader.readObject(reader1 -> SubResourceResource.fromJson(reader1))); + } else if("subResourceResourceList".equals(fieldName)) { + subResource.withSubResourceResourceList(reader.readArray(reader1 -> SubResourceResource.fromJson(reader1))); + } else { + reader.skipChildren(); + } + } + + return subResource; + }); + } } @Test @@ -267,7 +310,9 @@ public void testSerialization() throws IOException { private static > String serializeToString(T serializable) throws IOException { StringWriter writer = new StringWriter(); - serializable.toJson(JsonProviders.createWriter(writer)); + JsonWriter jsonWriter = JsonProviders.createWriter(writer); + serializable.toJson(jsonWriter); + jsonWriter.flush(); return writer.toString(); } From c64b37bdeba13cbe684dbc1adb7fde5c56c9a174 Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Thu, 9 May 2024 09:32:17 +0800 Subject: [PATCH 3/4] fix lint --- .../java/com/azure/core/management/ResourceTests.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java b/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java index 5a82a9851796..feee818eee7c 100644 --- a/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java +++ b/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java @@ -208,13 +208,13 @@ public static SubResourceResource fromJson(JsonReader jsonReader) throws IOExcep if ("id".equals(fieldName)) { subResource.withId(reader.getString()); - } else if("subResource".equals(fieldName)) { + } else if ("subResource".equals(fieldName)) { subResource.withSubResource(reader.readObject(reader1 -> SubResource.fromJson(reader1))); - } else if("subResourceList".equals(fieldName)) { + } else if ("subResourceList".equals(fieldName)) { subResource.withSubResourceList(reader.readArray(reader1 -> SubResource.fromJson(reader1))); - } else if("subResourceResource".equals(fieldName)) { + } else if ("subResourceResource".equals(fieldName)) { subResource.withSubResourceResource(reader.readObject(reader1 -> SubResourceResource.fromJson(reader1))); - } else if("subResourceResourceList".equals(fieldName)) { + } else if ("subResourceResourceList".equals(fieldName)) { subResource.withSubResourceResourceList(reader.readArray(reader1 -> SubResourceResource.fromJson(reader1))); } else { reader.skipChildren(); From 5a71554be4ff0e3e8c08f4e9c6e334cf6c4bf1dc Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Thu, 9 May 2024 10:08:18 +0800 Subject: [PATCH 4/4] spotless:apply --- .../com/azure/core/management/SubResource.java | 4 +--- .../azure/core/management/ResourceTests.java | 18 +++++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/sdk/core/azure-core-management/src/main/java/com/azure/core/management/SubResource.java b/sdk/core/azure-core-management/src/main/java/com/azure/core/management/SubResource.java index dea3c59f88be..f1bb6c775512 100644 --- a/sdk/core/azure-core-management/src/main/java/com/azure/core/management/SubResource.java +++ b/sdk/core/azure-core-management/src/main/java/com/azure/core/management/SubResource.java @@ -47,9 +47,7 @@ public SubResource withId(String id) { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { - return jsonWriter.writeStartObject() - .writeStringField("id", id) - .writeEndObject(); + return jsonWriter.writeStartObject().writeStringField("id", id).writeEndObject(); } /** diff --git a/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java b/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java index feee818eee7c..0cf0e543213a 100644 --- a/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java +++ b/sdk/core/azure-core-management/src/test/java/com/azure/core/management/ResourceTests.java @@ -213,9 +213,11 @@ public static SubResourceResource fromJson(JsonReader jsonReader) throws IOExcep } else if ("subResourceList".equals(fieldName)) { subResource.withSubResourceList(reader.readArray(reader1 -> SubResource.fromJson(reader1))); } else if ("subResourceResource".equals(fieldName)) { - subResource.withSubResourceResource(reader.readObject(reader1 -> SubResourceResource.fromJson(reader1))); + subResource.withSubResourceResource( + reader.readObject(reader1 -> SubResourceResource.fromJson(reader1))); } else if ("subResourceResourceList".equals(fieldName)) { - subResource.withSubResourceResourceList(reader.readArray(reader1 -> SubResourceResource.fromJson(reader1))); + subResource.withSubResourceResourceList( + reader.readArray(reader1 -> SubResourceResource.fromJson(reader1))); } else { reader.skipChildren(); } @@ -294,8 +296,7 @@ public void testSerialization() throws IOException { SubResourceResource subResourceResourceRoot = new SubResourceResource(); SubResource subResource = new SubResource().withId(UUID.randomUUID().toString()); SubResourceResource subResourceResourceNest = new SubResourceResource().withId(UUID.randomUUID().toString()); - subResourceResourceRoot - .withSubResource(subResource) + subResourceResourceRoot.withSubResource(subResource) .withSubResourceList(Collections.singletonList(subResource)) .withSubResourceResource(subResourceResourceNest) .withSubResourceResourceList(Collections.singletonList(subResourceResourceNest)); @@ -303,9 +304,12 @@ public void testSerialization() throws IOException { String json = serializeToString(subResourceResourceRoot); SubResourceResource subResourceResourceRootDeserialized = deserialize(json, SubResourceResource::fromJson); Assertions.assertEquals(subResource.id(), subResourceResourceRootDeserialized.subResource().id()); - Assertions.assertEquals(subResource.id(), subResourceResourceRootDeserialized.subResourceList().iterator().next().id()); - Assertions.assertEquals(subResourceResourceNest.id(), subResourceResourceRootDeserialized.subResourceResource().id()); - Assertions.assertEquals(subResourceResourceNest.id(), subResourceResourceRootDeserialized.subResourceResourceList().iterator().next().id()); + Assertions.assertEquals(subResource.id(), + subResourceResourceRootDeserialized.subResourceList().iterator().next().id()); + Assertions.assertEquals(subResourceResourceNest.id(), + subResourceResourceRootDeserialized.subResourceResource().id()); + Assertions.assertEquals(subResourceResourceNest.id(), + subResourceResourceRootDeserialized.subResourceResourceList().iterator().next().id()); } private static > String serializeToString(T serializable) throws IOException {