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

kr.jm.metric.output.StdoutLineOutput Maven / Gradle / Ivy

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

import kr.jm.metric.config.output.StdoutLineOutputConfig;
import kr.jm.metric.data.Transfer;
import kr.jm.utils.helper.JMJson;
import lombok.Getter;
import lombok.ToString;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;

@ToString(callSuper = true)
public class StdoutLineOutput extends AbstractOutput {

    @Getter
    private boolean enableJsonString;
    private Function>>, List>
            transformOutputObjectFunction;
    private Function toStringFunction;

    public StdoutLineOutput() {
        this(false);
    }

    public StdoutLineOutput(boolean enableJsonString) {
        this(enableJsonString, null);
    }

    public StdoutLineOutput(boolean enableJsonString,
            Function>>, List> transformOutputObjectFunction) {
        this(new StdoutLineOutputConfig(enableJsonString),
                transformOutputObjectFunction);
    }

    public StdoutLineOutput(StdoutLineOutputConfig outputConfig) {
        this(outputConfig, null);
    }

    public StdoutLineOutput(StdoutLineOutputConfig outputConfig,
            Function>>, List>
                    transformOutputObjectFunction) {
        super(outputConfig);
        this.enableJsonString = outputConfig.isEnableJsonString();
        this.transformOutputObjectFunction =
                Optional.ofNullable(transformOutputObjectFunction)
                        .orElseGet(() -> list -> list.stream()
                                .map(Transfer::getData)
                                .collect(Collectors.toList()));
        this.toStringFunction = outputConfig
                .isEnableJsonString() ? JMJson::toJsonString : Object::toString;
    }

    @Override
    protected void closeImpl() {

    }

    protected void writeString(String string) {
        System.out.println(string);
    }

    @Override
    public void writeData(List>> transferList) {
        transformOutputObjectFunction.apply(transferList).stream()
                .map(toStringFunction).forEach(this::writeString);
    }
}