/** Produces list of signatures with fixed rate. */
  @Scheduled(fixedRate = ProducersConfig.PRODUCTION_RATE)
  public void produce() {

    /* Generate random list ID */
    String listId = UUID.randomUUID().toString();

    /* Filename */
    String filename = ProducersConfig.BASE_DIR + listId.toString();

    /* Generate random signatures */
    List<RandomSignature> signatures = signatureGenerator.randomSignatures(30);

    /* Render list of signatures to SVG document */
    SVGGraphics2D rendered = signatureListSvgRender.render(signatures);

    try {

      /* Create the "lock" file for new list */
      File lock = new File(filename + ".lock");
      lock.createNewFile();

      /* Create the SVG file with signatures */
      File svg = new File(filename + ".svg");
      rendered.stream(new FileWriter(svg), false);

      /* Convert SVG -> PNG */
      svgConverter.setSources(new String[] {filename + ".svg"});
      svgConverter.setDst(new File(filename + ".png"));
      svgConverter.execute();

      /* Delete original SVG file */
      svg.delete();

      /* Write transcriptions of signatures to text file */
      FileWriter fileWriter = new FileWriter(new File(filename + ".txt"));
      for (RandomSignature signature : signatures) {
        fileWriter.write(signature.toString() + "\n");
      }
      fileWriter.close();

      /* Remove the "lock" file and allow to batch process this list */
      lock.delete();
    } catch (IOException | SVGConverterException e) {
      e.printStackTrace();
    }
  }