DateStampFilenameGenerator.java
package emissary.output.io;
import emissary.directory.EmissaryNode;
import emissary.util.TimeUtil;
import emissary.util.io.FileNameGenerator;
import org.apache.commons.lang3.StringUtils;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
/**
 * Create a filename generator that uses a datestamp as the name
 */
public class DateStampFilenameGenerator implements FileNameGenerator {
    // the date/time pattern
    protected final DateTimeFormatter formatter;
    // unique identifier to add to the file
    protected final String identifier;
    // file suffix/extension
    protected final String fileSuffix;
    // track last file name
    protected String lastFileName = "";
    // add a sequence number to the file
    protected int seq = 0;
    public DateStampFilenameGenerator() {
        this("");
    }
    public DateStampFilenameGenerator(String fileSuffix) {
        this(fileSuffix, System.getProperty(EmissaryNode.NODE_NAME_PROPERTY));
    }
    public DateStampFilenameGenerator(String fileSuffix, String identifier) {
        this(fileSuffix, identifier, "yyyyMMddHHmm");
    }
    public DateStampFilenameGenerator(String fileSuffix, String identifier, String datePattern) {
        this.fileSuffix = fileSuffix;
        this.identifier = identifier;
        this.formatter = DateTimeFormatter.ofPattern(datePattern).withZone(TimeUtil.getTimezone());
    }
    @Override
    public String nextFileName() {
        String dateFileName = formatter.format(Instant.now());
        seq = StringUtils.startsWith(lastFileName, dateFileName) ? seq + 1 : 0;
        lastFileName = dateFileName;
        return dateFileName + String.format("%03d", seq) + identifier + fileSuffix;
    }
}