Commit ca9fd2f5 by Harish Butani

add helpers for trait ser/de

parent 767611af
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
package org.apache.hadoop.metadata.typesystem.json package org.apache.hadoop.metadata.typesystem.json
import org.apache.hadoop.metadata.typesystem._ import org.apache.hadoop.metadata.typesystem._
import org.apache.hadoop.metadata.typesystem.persistence.{Id, ReferenceableInstance} import org.apache.hadoop.metadata.typesystem.persistence.{StructInstance, Id, ReferenceableInstance}
import org.apache.hadoop.metadata.typesystem.types.DataTypes.{ArrayType, MapType, TypeCategory} import org.apache.hadoop.metadata.typesystem.types.DataTypes.{ArrayType, MapType, TypeCategory}
import org.apache.hadoop.metadata.typesystem.types._ import org.apache.hadoop.metadata.typesystem.types._
import org.json4s.JsonAST.JInt import org.json4s.JsonAST.JInt
...@@ -271,6 +271,13 @@ object Serialization { ...@@ -271,6 +271,13 @@ object Serialization {
write(value) write(value)
} }
def toJson(value: ITypedInstance): String = {
implicit val formats = org.json4s.native.Serialization.formats(NoTypeHints) + new TypedStructSerializer +
new TypedReferenceableInstanceSerializer + new BigDecimalSerializer + new BigIntegerSerializer
write(value)
}
def toJsonPretty(value: ITypedReferenceableInstance): String = { def toJsonPretty(value: ITypedReferenceableInstance): String = {
implicit val formats = org.json4s.native.Serialization.formats(NoTypeHints) + new TypedStructSerializer + implicit val formats = org.json4s.native.Serialization.formats(NoTypeHints) + new TypedStructSerializer +
new TypedReferenceableInstanceSerializer + new BigDecimalSerializer + new BigIntegerSerializer new TypedReferenceableInstanceSerializer + new BigDecimalSerializer + new BigIntegerSerializer
...@@ -284,4 +291,11 @@ object Serialization { ...@@ -284,4 +291,11 @@ object Serialization {
read[ReferenceableInstance](jsonStr) read[ReferenceableInstance](jsonStr)
} }
def traitFromJson(jsonStr: String): ITypedInstance = {
implicit val formats = org.json4s.native.Serialization.formats(NoTypeHints) + new TypedStructSerializer +
new TypedReferenceableInstanceSerializer + new BigDecimalSerializer + new BigIntegerSerializer
read[StructInstance](jsonStr)
}
} }
...@@ -21,8 +21,7 @@ package org.apache.hadoop.metadata.typesystem.json; ...@@ -21,8 +21,7 @@ package org.apache.hadoop.metadata.typesystem.json;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import org.apache.hadoop.metadata.BaseTest; import org.apache.hadoop.metadata.BaseTest;
import org.apache.hadoop.metadata.MetadataException; import org.apache.hadoop.metadata.MetadataException;
import org.apache.hadoop.metadata.typesystem.ITypedReferenceableInstance; import org.apache.hadoop.metadata.typesystem.*;
import org.apache.hadoop.metadata.typesystem.Referenceable;
import org.apache.hadoop.metadata.typesystem.types.AttributeDefinition; import org.apache.hadoop.metadata.typesystem.types.AttributeDefinition;
import org.apache.hadoop.metadata.typesystem.types.ClassType; import org.apache.hadoop.metadata.typesystem.types.ClassType;
import org.apache.hadoop.metadata.typesystem.types.DataTypes; import org.apache.hadoop.metadata.typesystem.types.DataTypes;
...@@ -148,4 +147,28 @@ public class SerializationJavaTest extends BaseTest { ...@@ -148,4 +147,28 @@ public class SerializationJavaTest extends BaseTest {
Assert.assertEquals(hrDept2.toString(), hrDeptStr); Assert.assertEquals(hrDept2.toString(), hrDeptStr);
} }
@Test
public void testTrait() throws MetadataException {
TypeSystem ts = getTypeSystem();
HierarchicalTypeDefinition<TraitType> securityClearanceTypeDef = createTraitTypeDef(
"SecurityClearance2",
ImmutableList.<String>of(),
createRequiredAttrDef("level", DataTypes.INT_TYPE)
);
ts.defineTypes(ImmutableList.<StructTypeDefinition>of(),
ImmutableList.<HierarchicalTypeDefinition<TraitType>>of(securityClearanceTypeDef),
ImmutableList.<HierarchicalTypeDefinition<ClassType>>of());
Struct s = new Struct("SecurityClearance2");
s.set("level", 1);
TraitType tType = ts.getDataType(TraitType.class, "SecurityClearance2");
ITypedInstance t = tType.convert(s, Multiplicity.REQUIRED);
String jsonStr = Serialization$.MODULE$.toJson(t);
ITypedInstance t2 = Serialization$.MODULE$.traitFromJson(jsonStr);
Assert.assertEquals(t.toString(), t2.toString());
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment