All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.wizzie.normalizer.funcs.impl.RenameMapper Maven / Gradle / Ivy

package io.wizzie.normalizer.funcs.impl;

import io.wizzie.metrics.MetricsManager;
import io.wizzie.normalizer.funcs.MapperFunction;
import org.apache.kafka.streams.KeyValue;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class RenameMapper extends MapperFunction {
    List mappers;
    boolean deleteOldField;
    @Override
    public void prepare(Map properties, MetricsManager metricsManager) {
        List> maps = (List>) properties.get("maps");
        deleteOldField = (boolean) properties.getOrDefault("deleteOldField", true);
        mappers = maps.stream()
                .map(map -> new MapperModel((List) map.get("dimPath"), (String) map.get("as")))
                .collect(Collectors.toList());
    }

    @Override
    public KeyValue> process(String key, Map value) {
        if (value != null && mappers != null) {
            Map newEvent = new HashMap<>(value);

            mappers.forEach(mapper -> {
                Integer depth = mapper.dimPath.size() - 1;

                Map levelPath = new HashMap<>(value);
                for (Integer level = 0; level < depth; level++) {
                    if (levelPath != null) {
                        levelPath = (Map) levelPath.remove(mapper.dimPath.get(level));
                    }else{
                        break;
                    }
                }

                if (levelPath != null) {
                    Object newValue = levelPath.remove(mapper.dimPath.get(depth));
                    if (newValue != null){
                        newEvent.put(mapper.as, newValue);
                        if(deleteOldField) newEvent.remove(mapper.dimPath.get(0));
                    }
                }
            });

            return new KeyValue<>(key, newEvent);
        } else {
            return new KeyValue<>(key, null);
        }
    }

    @Override
    public void stop() {
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("[");
        mappers.forEach(mapper -> builder.append(mapper.toString()));
        builder.append("]");

        return builder.toString();
    }


    public class MapperModel {
        List dimPath;
        String as;

        MapperModel(List dimPath,
                    String as) {
            this.dimPath = dimPath;

            if (as != null) {
                this.as = as;
            } else if (dimPath != null) {
                this.as = dimPath.get(dimPath.size() - 1);
            }
        }

        public List getDimPath() {
            return dimPath;
        }

        public String getAs() {
            return as;
        }

        @Override
        public String toString() {
            StringBuilder builder = new StringBuilder();
            builder.append(" {")
                    .append("dimPath: ").append(dimPath).append(", ")
                    .append("as: ").append(as)
                    .append("} ");

            return builder.toString();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy