/** 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(); } }