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

kr.jm.metric.mutator.MutatorInterface Maven / Gradle / Ivy

There is a newer version: 0.2.7.3
Show newest version
package kr.jm.metric.mutator;

import kr.jm.metric.data.Transfer;
import kr.jm.utils.helper.JMOptional;
import kr.jm.utils.time.JMTimeUtil;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

public interface MutatorInterface extends
        Function, Transfer>> {

    String META = "@meta";
    String PROCESS_TIMESTAMP = "@processTimestamp";
    String INPUT_ID = "inputId";

    @Override
    default Transfer> apply(
            Transfer inputTransfer) {
        return inputTransfer.newWith(
                JMOptional.getOptional(mutate(inputTransfer.getData()))
                        .map(map -> buildFinalData(map,
                                buildMeta(inputTransfer))).orElse(null));
    }

    private Map buildFinalData(
            Map fieldObjectMap, Map meta) {
        fieldObjectMap.put(META, meta);
        return new HashMap<>(fieldObjectMap);
    }

    private Map buildMeta(Transfer inputTransfer) {
        Map meta = new HashMap<>();
        JMOptional.getOptional(inputTransfer.getMeta())
                .ifPresent(meta::putAll);
        JMOptional.getOptional(getFieldMeta())
                .ifPresent(fieldMeta -> meta.put("field", fieldMeta));
        meta.put(INPUT_ID, inputTransfer.getInputId());
        meta.put(PROCESS_TIMESTAMP,
                JMTimeUtil.getTimeAsDefaultUtcFormat(inputTransfer
                        .getTimestamp()));
        return meta;
    }

    Map mutate(String data);

    String getMutatorId();

    Map buildFieldObjectMap(String targetString);

    Map getFieldMeta();

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy