package com.example.flink;

import org.apache.flink.api.common.io.GlobFilePathFilter;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.io.TextInputFormat;
import org.apache.flink.core.fs.Path;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Arrays;
import java.util.Collections;

public class GlobExample {
    public static void main(String... args) throws  Exception {
        File txtFile = new File("/tmp/test/file.txt");
        File csvFile = new File("/tmp/test/file.csv");
        File binFile = new File("/tmp/test/file.bin");

        writeToFile(txtFile, "txt");
        writeToFile(csvFile, "csv");
        writeToFile(binFile, "bin");

        final ExecutionEnvironment env =
                ExecutionEnvironment.getExecutionEnvironment();
        final TextInputFormat format = new TextInputFormat(new Path("/tmp/test"));

        GlobFilePathFilter filesFilter = new GlobFilePathFilter(
                Collections.singletonList("**"),
                Arrays.asList("**/file.bin")
        );
        System.out.println(Arrays.toString(GlobFilePathFilter.class.getDeclaredFields()));
        format.setFilesFilter(filesFilter);

        DataSet<String> result = env.readFile(format, "/tmp");
        result.writeAsText("/temp/out");
        env.execute("GlobFilePathFilter-Test");
    }

    private static void writeToFile(File fileName, String text) throws Exception {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
            writer.write(text);
        }
    }
}