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.beforeIncludes); boolean hasBeforeIncludes = fieldsAndIncludes.includes.size() > 0; fieldsAndIncludes.fields.addAll(parseFields(schema, record.recordDecl)); FieldsAndIncludes afterIncludes = parseIncludes(record.afterIncludes); boolean hasAfterIncludes = afterIncludes.includes.size() > 0; if (hasBeforeIncludes && hasAfterIncludes) { startErrorMessage(record) .append("Record may have includes before or after fields, but not both: ") .append(record).append(NEWLINE); } fieldsAndIncludes.addAll(afterIncludes); schema.setFields(fieldsAndIncludes.fields, errorMessageBuilder()); schema.setInclude(fieldsAndIncludes.includes); schema.setIncludesDeclaredInline(fieldsAndIncludes.includesDeclaredInline); schema.setFieldsBeforeIncludes(hasAfterIncludes); validateDefaults(schema); setProperties(context, schema); return schema; }
/** * 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; }
@Override public RecordDataSchema schema() { synchronized (this) { // Don't use double-checked locking because _schema isn't volatile if (_schema == null) { 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 MapDataSchema errorsSchema = new MapDataSchema(DataTemplateUtil.getSchema(ErrorResponse.class)); final RecordDataSchema.Field errorsField = new RecordDataSchema.Field(errorsSchema); errorsField.setName(ERRORS, errorMessageBuilder); final Name name = new Name(BATCH_KV_RESPONSE_CLASSNAME, errorMessageBuilder); _schema = new RecordDataSchema(name, RecordDataSchema.RecordType.RECORD); _schema.setFields(Arrays.asList(resultsField, errorsField), errorMessageBuilder); } } return _schema; }
recordSchema.setFields(fields, startCalleeMessageBuilder()); appendCalleeMessage(fieldsList);
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 = parseFields(schema, record.recordDecl); schema.setFields(fieldsAndIncludes.fields, errorMessageBuilder()); validateDefaults(schema); schema.setInclude(fieldsAndIncludes.includes); setProperties(context, schema); return schema; }
fields.add(discriminatorField); recordDataSchema.setFields(fields, errorMessageBuilder); return recordDataSchema;