private Object getExplicitValue(final RecordField field) { return getExplicitValue(field, this.values); }
@Override public Object getValue(final RecordField field) { Object explicitValue = getExplicitValue(field); if (explicitValue != null) { return explicitValue; } final Optional<RecordField> resolvedField = resolveField(field); final boolean resolvedFieldDifferent = resolvedField.isPresent() && !resolvedField.get().equals(field); if (resolvedFieldDifferent) { explicitValue = getExplicitValue(resolvedField.get()); if (explicitValue != null) { return explicitValue; } } Object defaultValue = field.getDefaultValue(); if (defaultValue != null) { return defaultValue; } if (resolvedFieldDifferent) { return resolvedField.get().getDefaultValue(); } return null; }
@Override public Object[] getValues() { final Object[] values = new Object[schema.getFieldCount()]; int i = 0; for (final RecordField recordField : schema.getFields()) { Object value = getExplicitValue(recordField); if (value == null) { value = recordField.getDefaultValue(); } values[i++] = value; } return values; }
private Map<String, Object> checkTypes(final Map<String, Object> values, final RecordSchema schema) { for (final RecordField field : schema.getFields()) { Object value = getExplicitValue(field, values); if (value == null) { if (field.isNullable() || field.getDefaultValue() != null) { continue; } throw new SchemaValidationException("Field " + field.getFieldName() + " cannot be null"); } if (!DataTypeUtils.isCompatibleDataType(value, field.getDataType())) { throw new SchemaValidationException("Field " + field.getFieldName() + " has a value of " + value + ", which cannot be coerced into the appropriate data type of " + field.getDataType()); } } return values; }
private Object getExplicitValue(final RecordField field) { return getExplicitValue(field, this.values); }
@Override public Object getValue(final RecordField field) { Object explicitValue = getExplicitValue(field); if (explicitValue != null) { return explicitValue; } final Optional<RecordField> resolvedField = resolveField(field); final boolean resolvedFieldDifferent = resolvedField.isPresent() && !resolvedField.get().equals(field); if (resolvedFieldDifferent) { explicitValue = getExplicitValue(resolvedField.get()); if (explicitValue != null) { return explicitValue; } } Object defaultValue = field.getDefaultValue(); if (defaultValue != null) { return defaultValue; } if (resolvedFieldDifferent) { return resolvedField.get().getDefaultValue(); } return null; }
@Override public Object[] getValues() { final Object[] values = new Object[schema.getFieldCount()]; int i = 0; for (final RecordField recordField : schema.getFields()) { Object value = getExplicitValue(recordField); if (value == null) { value = recordField.getDefaultValue(); } values[i++] = value; } return values; }
private Map<String, Object> checkTypes(final Map<String, Object> values, final RecordSchema schema) { for (final RecordField field : schema.getFields()) { Object value = getExplicitValue(field, values); if (value == null) { if (field.isNullable() || field.getDefaultValue() != null) { continue; } throw new SchemaValidationException("Field " + field.getFieldName() + " cannot be null"); } if (!DataTypeUtils.isCompatibleDataType(value, field.getDataType())) { throw new SchemaValidationException("Field " + field.getFieldName() + " has a value of " + value + ", which cannot be coerced into the appropriate data type of " + field.getDataType()); } } return values; }