private Map<String, Object> enforceFieldTypeForMap( final Schema fieldSchema, final Map<String, ?> columnMap) { final Map<String, Object> ksqlMap = new HashMap<>(); for (final Map.Entry<String, ?> e : columnMap.entrySet()) { ksqlMap.put( enforceFieldType(Schema.OPTIONAL_STRING_SCHEMA, e.getKey()).toString(), enforceFieldType(fieldSchema.valueSchema(), e.getValue()) ); } return ksqlMap; }
private List<?> enforceFieldTypeForArray(final Schema fieldSchema, final List<?> arrayList) { final List<Object> array = new ArrayList<>(arrayList.size()); for (final Object item : arrayList) { array.add(enforceFieldType(fieldSchema.valueSchema(), item)); } return array; }
private Struct enforceFieldTypeForStruct( final Schema fieldSchema, final Map<String, ?> structMap) { final Struct columnStruct = new Struct(fieldSchema); final Map<String, String> caseInsensitiveStructFieldNameMap = getCaseInsensitiveFieldNameMap(structMap, false); fieldSchema.fields() .forEach( field -> columnStruct.put(field.name(), enforceFieldType( field.schema(), structMap.get( caseInsensitiveStructFieldNameMap.get(field.name().toUpperCase()) )))); return columnStruct; }
@SuppressWarnings("unchecked") private GenericRow getGenericRow(final byte[] rowJsonBytes) { final SchemaAndValue schemaAndValue = jsonConverter.toConnectData("topic", rowJsonBytes); final Map<String, Object> valueMap = (Map) schemaAndValue.value(); if (valueMap == null) { return null; } final Map<String, String> caseInsensitiveFieldNameMap = getCaseInsensitiveFieldNameMap(valueMap, true); final List<Object> columns = new ArrayList(schema.fields().size()); for (final Field field : schema.fields()) { final Object columnVal = valueMap.get(caseInsensitiveFieldNameMap.get(field.name())); columns.add(enforceFieldType(field.schema(), columnVal)); } return new GenericRow(columns); }