mirror of
https://github.com/microsoft/HybridRow.git
synced 2026-01-20 09:53:13 +00:00
84 lines
2.9 KiB
Java
84 lines
2.9 KiB
Java
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
package com.azure.data.cosmos.serialization.hybridrow.schemas;
|
|
|
|
import Newtonsoft.Json.*;
|
|
import Newtonsoft.Json.Converters.*;
|
|
import Newtonsoft.Json.Linq.*;
|
|
|
|
/**
|
|
* Helper class for parsing the polymorphic {@link PropertyType} subclasses from JSON.
|
|
*/
|
|
public class PropertySchemaConverter extends JsonConverter {
|
|
@Override
|
|
public boolean getCanWrite() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean CanConvert(java.lang.Class objectType) {
|
|
return objectType.isAssignableFrom(PropertyType.class);
|
|
}
|
|
|
|
@Override
|
|
public Object ReadJson(JsonReader reader, java.lang.Class objectType, Object existingValue,
|
|
JsonSerializer serializer) {
|
|
PropertyType p;
|
|
if (reader.TokenType != JsonToken.StartObject) {
|
|
throw new JsonSerializationException();
|
|
}
|
|
|
|
JObject propSchema = JObject.Load(reader);
|
|
TypeKind propType;
|
|
|
|
JToken value;
|
|
// TODO: C# TO JAVA CONVERTER: The following method call contained an unresolved 'out' keyword - these
|
|
// cannot be converted using the 'Out' helper class unless the method is within the code being modified:
|
|
if (!propSchema.TryGetValue("type", out value)) {
|
|
throw new JsonSerializationException("Required \"type\" property missing.");
|
|
}
|
|
|
|
try (JsonReader typeReader = value.CreateReader()) {
|
|
typeReader.Read(); // Move to the start token
|
|
propType = TypeKind.forValue((new StringEnumConverter(true)).ReadJson(typeReader, TypeKind.class, null,
|
|
serializer));
|
|
}
|
|
|
|
switch (propType) {
|
|
case Array:
|
|
p = new ArrayPropertyType();
|
|
break;
|
|
case SET:
|
|
p = new SetPropertyType();
|
|
break;
|
|
case MAP:
|
|
p = new MapPropertyType();
|
|
break;
|
|
case Object:
|
|
p = new ObjectPropertyType();
|
|
break;
|
|
case Tuple:
|
|
p = new TuplePropertyType();
|
|
break;
|
|
case TAGGED:
|
|
p = new TaggedPropertyType();
|
|
break;
|
|
case Schema:
|
|
p = new UdtPropertyType();
|
|
break;
|
|
default:
|
|
p = new PrimitivePropertyType();
|
|
break;
|
|
}
|
|
|
|
serializer.Populate(propSchema.CreateReader(), p);
|
|
return p;
|
|
}
|
|
|
|
// TODO: C# TO JAVA CONVERTER: Java annotations will not correspond to .NET attributes:
|
|
//ORIGINAL LINE: [ExcludeFromCodeCoverage] public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
|
@Override
|
|
public void WriteJson(JsonWriter writer, Object value, JsonSerializer serializer) {
|
|
}
|
|
} |