Files
HybridRow/java/exclusions/PropertySchemaConverter.java
2019-09-09 22:05:00 -07:00

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) {
}
}