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

internal.sdmxdl.cli.ext.CsvTable Maven / Gradle / Ivy

The newest version!
package internal.sdmxdl.cli.ext;

import nbbrd.console.picocli.csv.CsvOutput;
import nbbrd.io.text.Formatter;
import nbbrd.picocsv.Csv;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;

@lombok.Value
@lombok.Builder
public class CsvTable {

    @lombok.Singular
    List> columns;

    public static  Builder builderOf(Class type) {
        return builder();
    }

    public static class Builder {

        public Builder columnOf(String name, Function extractor) {
            return column(new CsvColumn<>(name, extractor::apply));
        }

        public  Builder columnOf(String name, Function extractor, Formatter formatter) {
            return column(new CsvColumn<>(name, formatter.compose(extractor)));
        }
    }

    public void write(CsvOutput csv, Stream rows) throws IOException {
        write(csv, rows.iterator());
    }

    public void write(CsvOutput csv, Iterable rows) throws IOException {
        write(csv, rows.iterator());
    }

    public void write(CsvOutput csv, Iterator rows) throws IOException {
        CsvUtil.write(csv, this::writeNames, w -> {
            while (rows.hasNext()) {
                writeValues(w, rows.next());
            }
        });
    }

    void writeNames(Csv.Writer writer) throws IOException {
        for (CsvColumn column : columns) {
            column.writeName(writer);
        }
        writer.writeEndOfLine();
    }

    private void writeValues(Csv.Writer writer, T row) throws IOException {
        for (CsvColumn column : columns) {
            column.writeValue(writer, row);
        }
        writer.writeEndOfLine();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy