DateFilterFilenameGenerator.java

package emissary.output.io;

import emissary.directory.EmissaryNode;
import emissary.util.io.FileNameGenerator;

import org.apache.commons.lang3.StringUtils;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

/**
 * Creates a Filename Generator that contains a timestamp (julian day), uuid, node name/host, and filter name. Example
 * filename with a filter param of json is: 20232231650_7959b045-d895-4b34-bed2-8800b5071dcd_localhost_json
 */
public class DateFilterFilenameGenerator implements FileNameGenerator {

    protected static final DateTimeFormatter DATE_PATTERN = DateTimeFormatter.ofPattern("yyyyDDDHHmm");
    public static final char DELIMITER = '_';
    public static final char DASH = '-';
    private final String filterNamePart;
    private static final String NODE_NAME = System.getProperty(EmissaryNode.NODE_NAME_PROPERTY);

    /**
     * Create a file name generator that contains date, uuid, node name, filter extension.
     * 
     * @param filterName filter name used to create file extension
     */
    public DateFilterFilenameGenerator(String filterName) {
        this.filterNamePart = (StringUtils.isNotBlank(filterName) ? DELIMITER + filterName.replace(DELIMITER, DASH) : StringUtils.EMPTY);
    }

    /**
     *
     * @return the next unique filename from this generator
     */
    @Override
    public String nextFileName() {
        return createFileName(filterNamePart);
    }

    public static String createFileName(String extension) {
        return String.format("%s%s%s%s%s%s", now(), DELIMITER, UUID.randomUUID(), DELIMITER, NODE_NAME, extension);
    }

    private static String now() {
        return DATE_PATTERN.format(LocalDateTime.now(ZoneId.systemDefault()));
    }

}