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

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

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

import kr.jm.metric.config.mutator.AbstractMutatorConfig;
import kr.jm.metric.config.mutator.field.FieldConfig;
import kr.jm.utils.exception.JMExceptionManager;
import kr.jm.utils.helper.JMLambda;
import lombok.Getter;
import org.slf4j.Logger;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;

import static kr.jm.metric.config.mutator.field.FieldConfig.RAW_DATA;

public abstract class AbstractMutator implements
        MutatorInterface {

    protected Logger log = org.slf4j.LoggerFactory.getLogger(getClass());

    @Getter
    protected String mutatorId;
    protected C mutatorConfig;
    protected FieldConfig fieldConfig;
    @Getter
    protected Map fieldMeta;

    private FieldConfigHandler fieldConfigHandler;

    public AbstractMutator(C mutatorConfig) {
        this.mutatorConfig = mutatorConfig;
        this.mutatorId = mutatorConfig.getMutatorId();
        this.fieldConfig = this.mutatorConfig.getFieldConfig();
        Optional.ofNullable(this.fieldConfig).ifPresent(
                fieldConfig -> this.fieldMeta =
                        fieldConfig.extractFieldMetaMap());
    }

    public Map getConfig() {
        return mutatorConfig.extractConfigMap();
    }

    @Override
    public Map mutate(String targetString) {
        try {
            return buildDataWithRawData(buildFieldObjectMap(targetString),
                    targetString);
        } catch (Exception e) {
            return JMExceptionManager
                    .handleExceptionAndReturnNull(log, e, "mutate",
                            mutatorConfig, targetString);
        }
    }

    private Map buildDataWithRawData(
            Map fieldObjectMap, String targetString) {
        if (Objects.nonNull(this.fieldConfig)) {
            fieldObjectMap.put(RAW_DATA, targetString);
            fieldObjectMap = JMLambda.supplierIfNull(this.fieldConfigHandler,
                    () -> this.fieldConfigHandler =
                            new FieldConfigHandler(this.mutatorId,
                                    this.fieldConfig))
                    .applyFieldConfig(fieldObjectMap);
        }
        return new HashMap<>(fieldObjectMap);
    }

    @Override
    public String toString() {
        return "AbstractMutator{" + "mutatorId='" + mutatorId + '\'' +
                ", mutatorConfig=" + mutatorConfig + ", fieldConfig=" +
                fieldConfig + ", fieldMeta=" + fieldMeta + '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy