Search in sources :

Example 6 with Name

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

the class PdlSchemaParser method parseRecord.

private RecordDataSchema parseRecord(NamedTypeDeclarationContext context, RecordDeclarationContext record) throws ParseException {
    Name name = toName(record.name);
    RecordDataSchema schema = new RecordDataSchema(name, RecordDataSchema.RecordType.RECORD);
    bindNameToSchema(name, schema);
    FieldsAndIncludes fieldsAndIncludes = parseIncludes(record.fieldIncludes());
    fieldsAndIncludes.fields.addAll(parseFields(schema, record.recordDecl));
    schema.setFields(fieldsAndIncludes.fields, errorMessageBuilder());
    schema.setInclude(fieldsAndIncludes.includes);
    schema.setIncludesDeclaredInline(fieldsAndIncludes.includesDeclaredInline);
    validateDefaults(schema);
    setProperties(context, schema);
    return schema;
}
Also used : RecordDataSchema(com.linkedin.data.schema.RecordDataSchema) Name(com.linkedin.data.schema.Name)

Example 7 with Name

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

the class TestTemplateSpecGenerator method testCustomInfoForUnionMembers.

@Test(dataProvider = "customTypeDataForUnion")
public void testCustomInfoForUnionMembers(final List<DataSchema> customTypedSchemas) {
    final UnionDataSchema union = new UnionDataSchema();
    union.setTypes(customTypedSchemas, null);
    final TyperefDataSchema typeref = new TyperefDataSchema(new Name(INPUT_SCHEMA_NAME));
    typeref.setReferencedType(union);
    final TemplateSpecGenerator generator = new TemplateSpecGenerator(_resolver);
    final UnionTemplateSpec spec = (UnionTemplateSpec) generator.generate(typeref, _location);
    for (int i = 0; i < customTypedSchemas.size(); ++i) {
        Assert.assertNotNull(spec.getMembers().get(i).getCustomInfo());
        Assert.assertEquals(spec.getMembers().get(i).getCustomInfo().getCustomClass().getClassName(), CustomTypeUtil.getJavaCustomTypeClassNameFromSchema((TyperefDataSchema) customTypedSchemas.get(i)));
    }
}
Also used : UnionDataSchema(com.linkedin.data.schema.UnionDataSchema) TyperefDataSchema(com.linkedin.data.schema.TyperefDataSchema) UnionTemplateSpec(com.linkedin.pegasus.generator.spec.UnionTemplateSpec) Name(com.linkedin.data.schema.Name) Test(org.testng.annotations.Test)

Example 8 with Name

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

the class TestTemplateSpecGenerator method testCustomInfoForRecordFields.

@Test(dataProvider = "customTypeDataForRecord")
public void testCustomInfoForRecordFields(final List<DataSchema> customTypedSchemas) {
    final List<RecordDataSchema.Field> fields = customTypedSchemas.stream().map(RecordDataSchema.Field::new).peek(field -> field.setName("field_" + _uniqueNumberGenerator.getAndIncrement(), null)).collect(Collectors.toList());
    final RecordDataSchema record = new RecordDataSchema(new Name(INPUT_SCHEMA_NAME), RecordDataSchema.RecordType.RECORD);
    record.setFields(fields, null);
    final TemplateSpecGenerator generator = new TemplateSpecGenerator(_resolver);
    final RecordTemplateSpec spec = (RecordTemplateSpec) generator.generate(record, _location);
    for (int i = 0; i < customTypedSchemas.size(); ++i) {
        Assert.assertNotNull(spec.getFields().get(i).getCustomInfo());
        Assert.assertEquals(spec.getFields().get(i).getCustomInfo().getCustomClass().getClassName(), CustomTypeUtil.getJavaCustomTypeClassNameFromSchema((TyperefDataSchema) customTypedSchemas.get(i)));
    }
}
Also used : Arrays(java.util.Arrays) DataProvider(org.testng.annotations.DataProvider) Mock(org.mockito.Mock) DataSchema(com.linkedin.data.schema.DataSchema) BeforeMethod(org.testng.annotations.BeforeMethod) Test(org.testng.annotations.Test) DataSchemaResolver(com.linkedin.data.schema.DataSchemaResolver) CustomTypeUtil(com.linkedin.util.CustomTypeUtil) Collectors(java.util.stream.Collectors) TyperefDataSchema(com.linkedin.data.schema.TyperefDataSchema) Mockito(org.mockito.Mockito) MockitoAnnotations(org.mockito.MockitoAnnotations) DataMap(com.linkedin.data.DataMap) List(java.util.List) RecordDataSchema(com.linkedin.data.schema.RecordDataSchema) Assert(org.testng.Assert) DataSchemaLocation(com.linkedin.data.schema.DataSchemaLocation) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) UnionDataSchema(com.linkedin.data.schema.UnionDataSchema) DataSchemaUtil(com.linkedin.data.schema.DataSchemaUtil) UnionTemplateSpec(com.linkedin.pegasus.generator.spec.UnionTemplateSpec) Collections(java.util.Collections) Name(com.linkedin.data.schema.Name) RecordTemplateSpec(com.linkedin.pegasus.generator.spec.RecordTemplateSpec) TyperefDataSchema(com.linkedin.data.schema.TyperefDataSchema) RecordDataSchema(com.linkedin.data.schema.RecordDataSchema) RecordTemplateSpec(com.linkedin.pegasus.generator.spec.RecordTemplateSpec) Name(com.linkedin.data.schema.Name) Test(org.testng.annotations.Test)

Example 9 with Name

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

the class DynamicRecordMetadata method buildSchema.

/**
   * Build the schema of a {@link DynamicRecordTemplate}.
   *
   * @param name the name of the record.
   * @param fieldDefs the fields of the record.
   * @throws IllegalArgumentException if the {@link com.linkedin.data.schema.RecordDataSchema.Field} of the fieldDefs
   *                                  are already set.
   */
public static RecordDataSchema buildSchema(String name, Collection<? extends FieldDef<?>> fieldDefs) {
    StringBuilder errorMessageBuilder = new StringBuilder();
    RecordDataSchema schema = new RecordDataSchema(new Name(name, errorMessageBuilder), RecordDataSchema.RecordType.RECORD);
    List<RecordDataSchema.Field> fields = new ArrayList<RecordDataSchema.Field>(fieldDefs.size());
    for (FieldDef<?> fieldDef : fieldDefs) {
        RecordDataSchema.Field paramField = fieldDef.getField();
        if (paramField.getRecord() != null) {
            throw new IllegalArgumentException("Attempt to assign field " + fieldDef.getName() + " to record " + schema.getName() + "failed: " + "Record of field is already set to " + paramField.getRecord().getName());
        }
        paramField.setRecord(schema);
        fields.add(paramField);
    }
    schema.setFields(fields, errorMessageBuilder);
    return schema;
}
Also used : RecordDataSchema(com.linkedin.data.schema.RecordDataSchema) ArrayList(java.util.ArrayList) Name(com.linkedin.data.schema.Name)

Example 10 with Name

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

the class BatchKVResponse method createSchema.

protected void createSchema(Class<V> valueClass) {
    _valueClass = valueClass;
    final StringBuilder errorMessageBuilder = new StringBuilder(10);
    final Name elementSchemaName = new Name(valueClass.getSimpleName(), errorMessageBuilder);
    final MapDataSchema resultsSchema = new MapDataSchema(new RecordDataSchema(elementSchemaName, RecordDataSchema.RecordType.RECORD));
    final RecordDataSchema.Field resultsField = new RecordDataSchema.Field(resultsSchema);
    resultsField.setName(RESULTS, errorMessageBuilder);
    final Name errorSchemaName = new Name(ErrorResponse.class.getSimpleName(), errorMessageBuilder);
    final MapDataSchema errorsSchema = new MapDataSchema(new RecordDataSchema(errorSchemaName, RecordDataSchema.RecordType.RECORD));
    final RecordDataSchema.Field errorsField = new RecordDataSchema.Field(errorsSchema);
    errorsField.setName(ERRORS, errorMessageBuilder);
    final Name name = new Name(BatchKVResponse.class.getSimpleName(), errorMessageBuilder);
    _schema = new RecordDataSchema(name, RecordDataSchema.RecordType.RECORD);
    _schema.setFields(Arrays.asList(resultsField, errorsField), errorMessageBuilder);
}
Also used : MapDataSchema(com.linkedin.data.schema.MapDataSchema) RecordDataSchema(com.linkedin.data.schema.RecordDataSchema) Name(com.linkedin.data.schema.Name) ErrorResponse(com.linkedin.restli.common.ErrorResponse)

Aggregations

Name (com.linkedin.data.schema.Name)16 RecordDataSchema (com.linkedin.data.schema.RecordDataSchema)10 ArrayDataSchema (com.linkedin.data.schema.ArrayDataSchema)5 TyperefDataSchema (com.linkedin.data.schema.TyperefDataSchema)5 UnionDataSchema (com.linkedin.data.schema.UnionDataSchema)5 DataSchema (com.linkedin.data.schema.DataSchema)4 EnumDataSchema (com.linkedin.data.schema.EnumDataSchema)4 MapDataSchema (com.linkedin.data.schema.MapDataSchema)4 ArrayList (java.util.ArrayList)4 DataMap (com.linkedin.data.DataMap)3 HashMap (java.util.HashMap)3 DataSchemaResolver (com.linkedin.data.schema.DataSchemaResolver)2 FixedDataSchema (com.linkedin.data.schema.FixedDataSchema)2 NamedDataSchema (com.linkedin.data.schema.NamedDataSchema)2 UnionTemplateSpec (com.linkedin.pegasus.generator.spec.UnionTemplateSpec)2 Map (java.util.Map)2 Test (org.testng.annotations.Test)2 EnumSymbolDeclarationContext (com.linkedin.data.grammar.PdlParser.EnumSymbolDeclarationContext)1 ImportDeclarationContext (com.linkedin.data.grammar.PdlParser.ImportDeclarationContext)1 PropDeclarationContext (com.linkedin.data.grammar.PdlParser.PropDeclarationContext)1