Search in sources :

Example 11 with EnumDataSchema

use of com.linkedin.data.schema.EnumDataSchema in project rest.li by linkedin.

the class RuntimeSymbolTableGenerator method expandAndCollectSymbols.

public static void expandAndCollectSymbols(DataSchema resourceSchema, Set<DataSchema> processedSchemas, Set<String> symbols) {
    if (resourceSchema instanceof TyperefDataSchema) {
        TyperefDataSchema typerefDataSchema = (TyperefDataSchema) resourceSchema;
        expandAndCollectSymbols(typerefDataSchema.getDereferencedDataSchema(), processedSchemas, symbols);
        return;
    } else if (resourceSchema instanceof ArrayDataSchema) {
        ArrayDataSchema arrayDataSchema = (ArrayDataSchema) resourceSchema;
        expandAndCollectSymbols(arrayDataSchema.getItems(), processedSchemas, symbols);
        return;
    } else if (resourceSchema instanceof MapDataSchema) {
        MapDataSchema mapDataSchema = (MapDataSchema) resourceSchema;
        expandAndCollectSymbols(mapDataSchema.getValues(), processedSchemas, symbols);
        return;
    }
    if (processedSchemas.contains(resourceSchema)) {
        return;
    }
    processedSchemas.add(resourceSchema);
    if (resourceSchema instanceof RecordDataSchema) {
        RecordDataSchema recordDataSchema = (RecordDataSchema) resourceSchema;
        for (RecordDataSchema.Field field : recordDataSchema.getFields()) {
            symbols.add(field.getName());
            expandAndCollectSymbols(field.getType(), processedSchemas, symbols);
        }
    } else if (resourceSchema instanceof UnionDataSchema) {
        UnionDataSchema unionDataSchema = (UnionDataSchema) resourceSchema;
        for (UnionDataSchema.Member member : unionDataSchema.getMembers()) {
            symbols.add(member.getUnionMemberKey());
            expandAndCollectSymbols(member.getType(), processedSchemas, symbols);
        }
    } else if (resourceSchema instanceof EnumDataSchema) {
        EnumDataSchema enumDataSchema = (EnumDataSchema) resourceSchema;
        symbols.addAll(enumDataSchema.getSymbols());
    }
}
Also used : ArrayDataSchema(com.linkedin.data.schema.ArrayDataSchema) UnionDataSchema(com.linkedin.data.schema.UnionDataSchema) TyperefDataSchema(com.linkedin.data.schema.TyperefDataSchema) EnumDataSchema(com.linkedin.data.schema.EnumDataSchema) MapDataSchema(com.linkedin.data.schema.MapDataSchema) RecordDataSchema(com.linkedin.data.schema.RecordDataSchema)

Example 12 with EnumDataSchema

use of com.linkedin.data.schema.EnumDataSchema in project rest.li by linkedin.

the class TestSchemaSampleDataGenerator method testEnumSchema.

@Test
public void testEnumSchema() {
    final EnumDataSchema schema = (EnumDataSchema) DataTemplateUtil.getSchema(EnumFruits.class);
    final String value = (String) SchemaSampleDataGenerator.buildData(schema, _spec);
    Assert.assertSame(schema.getSymbolDocs().size(), EnumFruits.class.getEnumConstants().length - 1);
    EnumFruits.valueOf(value);
}
Also used : EnumDataSchema(com.linkedin.data.schema.EnumDataSchema) EnumFruits(com.linkedin.pegasus.generator.test.EnumFruits) ByteString(com.linkedin.data.ByteString) UnionTest(com.linkedin.pegasus.generator.test.UnionTest) Test(org.testng.annotations.Test) TyperefTest(com.linkedin.pegasus.generator.test.TyperefTest)

Example 13 with EnumDataSchema

use of com.linkedin.data.schema.EnumDataSchema in project rest.li by linkedin.

the class TestSchemaSampleDataGenerator method testEmptyEnumSchema.

@Test
public void testEmptyEnumSchema() {
    final EnumDataSchema schema = (EnumDataSchema) DataTemplateUtil.getSchema(EnumEmpty.class);
    final String value = (String) SchemaSampleDataGenerator.buildData(schema, _spec);
    Assert.assertSame(schema.getSymbols().size(), EnumEmpty.class.getEnumConstants().length - 1);
    Assert.assertEquals("EmptyEnum", value);
}
Also used : EnumEmpty(com.linkedin.pegasus.generator.test.EnumEmpty) EnumDataSchema(com.linkedin.data.schema.EnumDataSchema) ByteString(com.linkedin.data.ByteString) UnionTest(com.linkedin.pegasus.generator.test.UnionTest) Test(org.testng.annotations.Test) TyperefTest(com.linkedin.pegasus.generator.test.TyperefTest)

Example 14 with EnumDataSchema

use of com.linkedin.data.schema.EnumDataSchema in project rest.li by linkedin.

the class TestEnum method testEnum.

private static <T extends Enum<T>> void testEnum(Class<T> enumClass) {
    try {
        assertTrue(Enum.class.isAssignableFrom(enumClass));
        // has embedded EnumDataSchema
        DataSchema schema = DataTemplateUtil.getSchema(enumClass);
        assertNotNull(schema);
        assertTrue(schema instanceof EnumDataSchema);
        // get symbols
        EnumDataSchema enumSchema = (EnumDataSchema) schema;
        Set<String> schemaSymbols = new HashSet<>(enumSchema.getSymbols());
        assertNotNull(schemaSymbols);
        for (String symbol : schemaSymbols) {
            // IllegalArgumentException thrown if not valid symbol
            Enum.valueOf(enumClass, symbol);
        }
        // IllegalArgumentException thrown if not valid symbol
        Enum.valueOf(enumClass, "$UNKNOWN");
    } catch (Exception exc) {
        fail("Unexpected exception", exc);
    }
}
Also used : EnumDataSchema(com.linkedin.data.schema.EnumDataSchema) DataSchema(com.linkedin.data.schema.DataSchema) EnumDataSchema(com.linkedin.data.schema.EnumDataSchema) HashSet(java.util.HashSet)

Example 15 with EnumDataSchema

use of com.linkedin.data.schema.EnumDataSchema in project rest.li by linkedin.

the class TestEnum method testEnumProperties.

@Test
public void testEnumProperties() {
    EnumDataSchema enumPropertiesSchema = EnumProperties.dataSchema();
    assertNotNull(enumPropertiesSchema);
    Map<String, Object> appleProps = enumPropertiesSchema.getSymbolProperties(EnumProperties.APPLE.name());
    assertNotNull(appleProps);
    assertEquals(appleProps.get("color"), "red");
    assertNull(enumPropertiesSchema.getSymbolProperties("unknown"));
    // Fruits.pdl enum doesn't have symbol properties.
    EnumDataSchema fruitsSchema = Fruits.dataSchema();
    assertNotNull(fruitsSchema);
    appleProps = fruitsSchema.getSymbolProperties(Fruits.APPLE.name());
    assertNotNull(appleProps);
    assertTrue(appleProps.isEmpty());
}
Also used : EnumDataSchema(com.linkedin.data.schema.EnumDataSchema) Test(org.testng.annotations.Test)

Aggregations

EnumDataSchema (com.linkedin.data.schema.EnumDataSchema)21 DataSchema (com.linkedin.data.schema.DataSchema)11 RecordDataSchema (com.linkedin.data.schema.RecordDataSchema)10 FixedDataSchema (com.linkedin.data.schema.FixedDataSchema)7 TyperefDataSchema (com.linkedin.data.schema.TyperefDataSchema)7 UnionDataSchema (com.linkedin.data.schema.UnionDataSchema)7 DataMap (com.linkedin.data.DataMap)6 ArrayDataSchema (com.linkedin.data.schema.ArrayDataSchema)6 MapDataSchema (com.linkedin.data.schema.MapDataSchema)6 Test (org.testng.annotations.Test)6 Name (com.linkedin.data.schema.Name)5 ByteString (com.linkedin.data.ByteString)3 DataList (com.linkedin.data.DataList)3 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 Map (java.util.Map)3 NamedDataSchema (com.linkedin.data.schema.NamedDataSchema)2 PrimitiveDataSchema (com.linkedin.data.schema.PrimitiveDataSchema)2 StringDataSchema (com.linkedin.data.schema.StringDataSchema)2 TyperefTest (com.linkedin.pegasus.generator.test.TyperefTest)2