View Javadoc
1   package emissary.output.io;
2   
3   import emissary.directory.EmissaryNode;
4   import emissary.util.TimeUtil;
5   import emissary.util.io.FileNameGenerator;
6   
7   import org.apache.commons.lang3.StringUtils;
8   
9   import java.time.Instant;
10  import java.time.format.DateTimeFormatter;
11  
12  /**
13   * Create a filename generator that uses a datestamp as the name
14   */
15  public class DateStampFilenameGenerator implements FileNameGenerator {
16  
17      // the date/time pattern
18      protected final DateTimeFormatter formatter;
19  
20      // unique identifier to add to the file
21      protected final String identifier;
22  
23      // file suffix/extension
24      protected final String fileSuffix;
25  
26      // track last file name
27      protected String lastFileName = "";
28  
29      // add a sequence number to the file
30      protected int seq = 0;
31  
32      public DateStampFilenameGenerator() {
33          this("");
34      }
35  
36      public DateStampFilenameGenerator(String fileSuffix) {
37          this(fileSuffix, System.getProperty(EmissaryNode.NODE_NAME_PROPERTY));
38      }
39  
40      public DateStampFilenameGenerator(String fileSuffix, String identifier) {
41          this(fileSuffix, identifier, "yyyyMMddHHmm");
42      }
43  
44      public DateStampFilenameGenerator(String fileSuffix, String identifier, String datePattern) {
45          this.fileSuffix = fileSuffix;
46          this.identifier = identifier;
47          this.formatter = DateTimeFormatter.ofPattern(datePattern).withZone(TimeUtil.getTimezone());
48      }
49  
50      @Override
51      public String nextFileName() {
52          String dateFileName = formatter.format(Instant.now());
53          seq = StringUtils.startsWith(lastFileName, dateFileName) ? seq + 1 : 0;
54          lastFileName = dateFileName;
55          return dateFileName + String.format("%03d", seq) + identifier + fileSuffix;
56      }
57  }