public void applyToGeneric()

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));
        }
    }