/** * Write a field whose value is a map with string keys and values. * * The field will be written if required is true or the map value is non-empty. * * @param fieldName is the name of the field. * @param value of the field. * @param required indicates whether this field will always be written * @throws IOException if there is an error writing. */ public void writeMapField(String fieldName, Map<String, ?> value, boolean required) throws IOException { if (required || value.isEmpty() == false) { writeFieldName(fieldName); writeMap(value); } }
/** * Write a field whose value is a string array. * * The field will be written if required is true or the string array value is non-empty. * * @param fieldName is the name of the field. * @param value of the field. * @param required indicates whether this field will always be written * @throws IOException if there is an error writing. */ public void writeStringArrayField(String fieldName, List<String> value, boolean required) throws IOException { if (required || value.isEmpty() == false) { writeFieldName(fieldName); writeStringArray(value); } }
/** * Encode a field's type (i.e. {@link DataSchema}. * * @param field providing the type to encode. * @throws IOException if there is an error while encoding. */ protected void encodeFieldType(RecordDataSchema.Field field) throws IOException { _builder.writeFieldName(TYPE_KEY); DataSchema fieldSchema = field.getType(); encode(fieldSchema, field.isDeclaredInline()); }
_builder.writeFieldName(key); _builder.writeData(value); _builder.writeFieldName(SchemaTranslator.DATA_PROPERTY); _builder.writeStartObject(); _builder.writeFieldName(SchemaTranslator.SCHEMA_PROPERTY); SchemaToJsonEncoder schemaToJsonEncoder = new SchemaToJsonEncoder(_builder); schemaToJsonEncoder.encode(schema); _builder.writeFieldName(SchemaTranslator.OPTIONAL_DEFAULT_MODE_PROPERTY); _builder.writeString(_options.getOptionalDefaultMode().toString()); if (RESERVED_DATA_PROPERTIES.contains(key) == false) _builder.writeFieldName(pegasusEntry.getKey()); _builder.writeData(pegasusEntry.getValue());
/** * Encode a field's default value. * * @param field providing the default value to encode. * @throws IOException if there is an error while encoding. */ protected void encodeFieldDefault(RecordDataSchema.Field field) throws IOException { if (field.getDefault() != null) { _builder.writeFieldName(DEFAULT_KEY); _builder.writeData(field.getDefault()); } }
private void writeIncludes(RecordDataSchema recordDataSchema) throws IOException { _builder.writeFieldName(INCLUDE_KEY); _builder.writeStartArray(); for (NamedDataSchema includedSchema : recordDataSchema.getInclude()) { encode(includedSchema); } _builder.writeEndArray(); }
public File writeFile(File outdirFile, String fileName) throws IOException { fileName += RestConstants.SNAPSHOT_FILENAME_EXTENTION; final File file = new File(outdirFile, fileName); FileOutputStream fileOutputStream = new FileOutputStream(file); JsonBuilder jsonBuilder = new JsonBuilder(JsonBuilder.Pretty.INDENTED); SchemaToJsonEncoder encoder = new SchemaToJsonEncoder(jsonBuilder); jsonBuilder.writeStartObject(); jsonBuilder.writeFieldName(Snapshot.MODELS_KEY); jsonBuilder.writeStartArray(); List<NamedDataSchema> models = generateModelList(); models.sort(Comparator.comparing(NamedDataSchema::getFullName)); for(DataSchema model : models){ encoder.encode(model); } jsonBuilder.writeEndArray(); jsonBuilder.writeFieldName(Snapshot.SCHEMA_KEY); jsonBuilder.writeDataTemplate(_topLevelSchema, true); jsonBuilder.writeEndObject(); try { fileOutputStream.write(jsonBuilder.result().getBytes()); } finally { fileOutputStream.close(); jsonBuilder.close(); } return file; }
/** * Encode a field's default to an Avro-compliant schema. * * Special handling is required if the translated default value * is a union value whose value is not null. In this case, * the default value includes the member type discriminator, * special handling required to comply with Avro specification * requires that (a) the member type to be the 1st member of the * union's member type list and (b) the discriminator not be * included in the default value. * * @param field providing the default value to encode. * @throws IOException if there is an error while encoding. */ @Override protected void encodeFieldDefault(RecordDataSchema.Field field) throws IOException { FieldOverride defaultValueOverride = _fieldOverridesProvider.getDefaultValueOverride(field); // if field is optional, it must have a default value - either Data.NULL or translated value assert(!field.getOptional() || (defaultValueOverride != null && defaultValueOverride.getValue() != null)); boolean isTranslatedUnionMember = (Boolean.TRUE == field.getProperties().get(SchemaTranslator.TRANSLATED_UNION_MEMBER_PROPERTY)); // Set the default value only for fields that are not translated from Pegasus union members. if ((defaultValueOverride != null && defaultValueOverride.getValue() != null) && !isTranslatedUnionMember) { _builder.writeFieldName(DEFAULT_KEY); _builder.writeData(defaultValueOverride.getValue()); } }
(UnionDataSchema) fieldSchema.getDereferencedDataSchema() : null); _builder.writeFieldName(TYPE_KEY);
_builder.writeStartObject(); _builder.writeStringField(TYPE_KEY, ARRAY_TYPE, true); _builder.writeFieldName(ITEMS_KEY); ArrayDataSchema arrayDataSchema = (ArrayDataSchema) schema; encode(arrayDataSchema.getItems(), arrayDataSchema.isItemsDeclaredInline()); _builder.writeStartObject(); _builder.writeStringField(TYPE_KEY, MAP_TYPE, true); _builder.writeFieldName(VALUES_KEY); MapDataSchema mapDataSchema = (MapDataSchema) schema; encode(mapDataSchema.getValues(), mapDataSchema.isValuesDeclaredInline());
_builder.writeFieldName(REF_KEY); TyperefDataSchema typerefDataSchema = (TyperefDataSchema) schema; encode(typerefDataSchema.getRef(), typerefDataSchema.isRefDeclaredInline()); _builder.writeFieldName(FIELDS_KEY); encodeFields(recordDataSchema); if (hasIncludes && fieldsBeforeIncludes)
/** * Encode a specific {@link com.linkedin.data.schema.UnionDataSchema.Member} of a union. * * @param member The specific union member that needs to be encoded. * @throws IOException if there is an error while encoding. */ protected void encodeUnionMember(UnionDataSchema.Member member) throws IOException { if (member.hasAlias()) { _builder.writeStartObject(); // alias _builder.writeStringField(ALIAS_KEY, member.getAlias(), true); // type _builder.writeFieldName(TYPE_KEY); encode(member.getType(), member.isDeclaredInline()); // doc _builder.writeStringField(DOC_KEY, member.getDoc(), false); // properties _builder.writeProperties(member.getProperties()); _builder.writeEndObject(); } else { // for member without aliases, encode the type encode(member.getType(), member.isDeclaredInline()); } }