in tools/maven-plugin/src/main/java/org/apache/batchee/tools/maven/doc/DiagramGenerator.java [337:384]
private void saveView(final Dimension currentSize, final Dimension desiredSize, final String name, final VisualizationViewer<Node, Edge> viewer) {
BufferedImage bi = new BufferedImage(currentSize.width, currentSize.height, BufferedImage.TYPE_INT_ARGB);
final Graphics2D g = bi.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
final boolean db = viewer.isDoubleBuffered();
viewer.setDoubleBuffered(false);
viewer.paint(g);
viewer.setDoubleBuffered(db);
if (!currentSize.equals(desiredSize)) {
final double xFactor = desiredSize.width * 1. / currentSize.width;
final double yFactor = desiredSize.height * 1. / currentSize.height;
final double factor = Math.min(xFactor, yFactor);
info("optimal size is (" + currentSize.width + ", " + currentSize.height + ")");
info("scaling with a factor of " + factor);
final AffineTransform tx = new AffineTransform();
tx.scale(factor, factor);
final AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
BufferedImage biNew = new BufferedImage((int) (bi.getWidth() * factor), (int) (bi.getHeight() * factor), bi.getType());
bi = op.filter(bi, biNew);
}
g.dispose();
OutputStream os = null;
try {
final File file = new File(output, (outputFileName != null ? outputFileName : name) + "." + format);
os = new FileOutputStream(file);
if (!ImageIO.write(bi, format, os)) {
throw new IllegalStateException("can't save picture " + name + "." + format);
}
info("Saved " + file.getAbsolutePath());
} catch (final IOException e) {
throw new IllegalStateException("can't save the diagram", e);
} finally {
if (os != null) {
try {
os.flush();
os.close();
} catch (final IOException e) {
// no-op
}
}
}
}