package org.teachingextensions.approvals.lite.writers; import org.teachingextensions.approvals.lite.ApprovalWriter; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; public class ComponentApprovalWriter implements ApprovalWriter { private ImageApprovalWriter image = null; public ComponentApprovalWriter(Component c) { BufferedImage image = drawComponent(c); this.image = new ImageApprovalWriter(image); } public static BufferedImage drawComponent(Component c) { validateComponent(c); BufferedImage image = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics g = image.createGraphics(); c.paint(g); g.dispose(); return image; } private static void validateComponent(Component c) { if (!c.isValid()) { if (c instanceof JFrame) { ((JFrame) c).pack(); } else { JFrame frame = new JFrame(); frame.getContentPane().add(c); frame.pack(); } } } @Override public String writeReceivedFile(String filename) throws Exception { return image.writeReceivedFile(filename); } @Override public String getReceivedFilename(String base) { return image.getReceivedFilename(base); } @Override public String getApprovalFilename(String base) { return image.getApprovalFilename(base); } }