code: protected void generateNewBasename() {
          Properties localProps = new Properties(); 
          localProps.setProperty("prefix", settings.getPrefix());
          synchronized(this.getClass()) {
              // ensure that serialNo and timestamp are minted together (never inverted sort order)
              String paddedSerialNumber = WriterPoolMember.serialNoFormatter.format(serialNo.getAndIncrement());
              String timestamp17 = ArchiveUtils.getUnique17DigitDate(); 
              String timestamp14 = ArchiveUtils.getUnique14DigitDate(); 
              currentTimestamp = timestamp17;
              localProps.setProperty("serialno", paddedSerialNumber);
              localProps.setProperty("timestamp17", timestamp17);
              localProps.setProperty("timestamp14", timestamp14);
          }
          currentBasename = PropertyUtils.interpolateWithProperties(settings.getTemplate(), 
                  localProps, System.getProperties());
      }
docs: Generate a new basename by interpolating values in the configured
  template. Values come from local state, other configured values, and
  global system properties. The recommended default template will
  generate a unique basename under reasonable assumptions.