@Override public void setValue(final String fieldName, final Object value) { final Optional<RecordField> field = getSchema().getField(fieldName); if (!field.isPresent()) { if (dropUnknownFields) { return; } final Object previousValue = values.put(fieldName, value); if (!Objects.equals(value, previousValue)) { serializedForm = Optional.empty(); } return; } final RecordField recordField = field.get(); final Object coerced = isTypeChecked() ? DataTypeUtils.convertType(value, recordField.getDataType(), fieldName) : value; final Object previousValue = values.put(recordField.getFieldName(), coerced); if (!Objects.equals(coerced, previousValue)) { serializedForm = Optional.empty(); } }
@Override @SuppressWarnings("unchecked") public void setMapValue(final String fieldName, final String mapKey, final Object value) { final Optional<RecordField> field = getSchema().getField(fieldName); if (!field.isPresent()) { return; } final RecordField recordField = field.get(); final DataType dataType = recordField.getDataType(); if (dataType.getFieldType() != RecordFieldType.MAP) { throw new IllegalTypeConversionException("Cannot set the value of map entry on Record because the field '" + fieldName + "' is of type '" + dataType + "' and cannot be coerced into an MAP type"); } Object mapObject = values.get(recordField.getFieldName()); if (mapObject == null) { mapObject = new HashMap<String, Object>(); } if (!(mapObject instanceof Map)) { return; } final Map<String, Object> map = (Map<String, Object>) mapObject; final MapDataType mapDataType = (MapDataType) dataType; final DataType valueDataType = mapDataType.getValueType(); final Object coerced = DataTypeUtils.convertType(value, valueDataType, fieldName); final Object replaced = map.put(mapKey, coerced); if (replaced == null || !replaced.equals(coerced)) { serializedForm = Optional.empty(); } }
@Override public void setArrayValue(final String fieldName, final int arrayIndex, final Object value) { final Optional<RecordField> field = getSchema().getField(fieldName); if (!field.isPresent()) { return;
@Override public void setValue(final String fieldName, final Object value) { final Optional<RecordField> field = getSchema().getField(fieldName); if (!field.isPresent()) { if (dropUnknownFields) { return; } final Object previousValue = values.put(fieldName, value); if (!Objects.equals(value, previousValue)) { serializedForm = Optional.empty(); } return; } final RecordField recordField = field.get(); final Object coerced = isTypeChecked() ? DataTypeUtils.convertType(value, recordField.getDataType(), fieldName) : value; final Object previousValue = values.put(recordField.getFieldName(), coerced); if (!Objects.equals(coerced, previousValue)) { serializedForm = Optional.empty(); } }
@Override @SuppressWarnings("unchecked") public void setMapValue(final String fieldName, final String mapKey, final Object value) { final Optional<RecordField> field = getSchema().getField(fieldName); if (!field.isPresent()) { return; } final RecordField recordField = field.get(); final DataType dataType = recordField.getDataType(); if (dataType.getFieldType() != RecordFieldType.MAP) { throw new IllegalTypeConversionException("Cannot set the value of map entry on Record because the field '" + fieldName + "' is of type '" + dataType + "' and cannot be coerced into an MAP type"); } Object mapObject = values.get(recordField.getFieldName()); if (mapObject == null) { mapObject = new HashMap<String, Object>(); } if (!(mapObject instanceof Map)) { return; } final Map<String, Object> map = (Map<String, Object>) mapObject; final MapDataType mapDataType = (MapDataType) dataType; final DataType valueDataType = mapDataType.getValueType(); final Object coerced = DataTypeUtils.convertType(value, valueDataType, fieldName); final Object replaced = map.put(mapKey, coerced); if (replaced == null || !replaced.equals(coerced)) { serializedForm = Optional.empty(); } }
@Override public void setArrayValue(final String fieldName, final int arrayIndex, final Object value) { final Optional<RecordField> field = getSchema().getField(fieldName); if (!field.isPresent()) { return;