in src/main/java/com/epam/eco/commons/avro/modification/RemoveSchemaFieldByPath.java [61:95]
public void applyToGeneric(Map<String, Object> schemaMap) {
List<Map<String, Object>> typesToRemoveFieldFrom = new ArrayList<>();
List<Object> fieldsToRemove = new ArrayList<>();
new GenericSchemaTraverser(new GenericSchemaTraverseListener() {
@Override
public void onSchemaField(
String path,
Map<String, Object> parentSchema,
Map<String, Object> field) {
if (RemoveSchemaFieldByPath.this.path.equals(path)) {
typesToRemoveFieldFrom.add(parentSchema);
fieldsToRemove.add(field);
}
}
@Override
public void onSchema(String path, Object parentSchema, Object schema) {
// do nothing
}
}).walk(schemaMap, null);
int removedCount = 0;
for (int i = 0; i < typesToRemoveFieldFrom.size(); i++) {
List<Object> fields =
(List<Object>)typesToRemoveFieldFrom.get(i).get(AvroConstants.SCHEMA_KEY_FIELDS);
Object field = fieldsToRemove.get(i);
if (fields.remove(field)) {
removedCount++;
}
}
if (strict && removedCount == 0) {
throw new RuntimeException(String.format("Field not found at '%s'", path));
}
}