// Copyright 2000-2007, FreeHEP. package org.freehep.graphicsio.test; import java.awt.Component; import java.awt.Dimension; import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Properties; import javax.swing.JComponent; import javax.swing.JPanel; import org.freehep.graphics2d.VectorGraphics; import org.freehep.graphicsbase.swing.Headless; import org.freehep.graphicsbase.util.UserProperties; import org.freehep.graphicsio.ImageGraphics2D; /** * @author Mark Donszelmann * @version $Id: freehep-graphicsio-tests/src/main/java/org/freehep/graphicsio/test/TestingPanel.java 344e3292515f 2007/06/08 22:23:13 duns $ */ public class TestingPanel extends JPanel { public static final int width = 600; public static final int height = 600; protected String[] args; protected VectorGraphics graphics; protected List/* <String> */<String>names = new ArrayList<String>(); protected List/* <JComponent> */<JComponent>pages = new ArrayList<JComponent>(); public TestingPanel(String[] args) throws Exception { this.args = args; if ((args != null) && (args.length != 0)) { if (args[0].equals(ImageGraphics2D.class.getName())) { if (args.length != 3) { System.err.println("Usage: Test... " + ImageGraphics2D.class + " format OutputFile"); System.exit(1); } } else { if (args.length != 2) { System.err .println("Usage: Test... VectorGraphicsClassName OutputFile"); System.exit(1); } } } } protected void addPage(String name, JComponent c) { names.add(name); pages.add(c); } public void runTest() throws Exception { runTest(null); } public void runTest(int width, int height) throws Exception { runTest(width, height, null); } public void runTest(Properties options) throws Exception { runTest(width, height, options); } public void runTest(int width, int height, Properties options) throws Exception { setPreferredSize(new Dimension(width, height)); if ((args == null) || (args.length == 0)) { // Create a new frame to hold everything. TestingFrame frame = new TestingFrame(getClass().toString()); if (names.size() > 0) { for (int i = 0; i < names.size(); i++) { frame.addPanel(names.get(i), pages .get(i)); } frame.setSize(width, height); } else { // Create a new instance of this class and add it to the frame. frame.addPanel(this); frame.pack(); } // Give the frame a size and make it visible. frame.setVisible(true); } else { // run with -Djava.awt.headless=true Headless headless = new Headless(this); headless.pack(); headless.setVisible(true); if (args[0].equals(ImageGraphics2D.class.getName())) { File file = new File(args[2]); graphics = new ImageGraphics2D(file, this, args[1]); } else { try { File file = new File(args[1]); // System.err.println(file); Class<?> cls = Class.forName(args[0]); Constructor<?> constructor = cls.getConstructor(new Class[] { File.class, Component.class }); graphics = (VectorGraphics) constructor .newInstance(new Object[] { file, this }); } catch (ClassNotFoundException e) { System.out.println("Cannot find class: " + args[0]); throw e; } catch (ClassCastException e) { System.out.println("Class: " + args[0] + " does not extend VectorGraphics"); throw e; } catch (NoSuchMethodException e) { System.out.println("Class: " + args[0] + " does not have constructor(File, Component)"); throw e; } catch (InvocationTargetException e) { System.out.println(e.getTargetException()); e.getTargetException().printStackTrace(); throw e; } } // FIXME we should also set the properties in interactive mode UserProperties user = (options == null) ? new UserProperties() : new UserProperties(options); // FIXME enable these when we can know if we run interactively or // from ANT // user.setProperty(AbstractVectorGraphicsIO.EMIT_WARNINGS, true); // user.setProperty(AbstractVectorGraphicsIO.EMIT_ERRORS, true); // Text Antialiasing seems to produce something time dependent user.setProperty(ImageGraphics2D.ANTIALIAS_TEXT, false); // user.setProperty(JAVAGraphics2D.PACKAGE_NAME, // "org.freehep.graphicsio.java.test"); // FIXME FREEHEP-219, we need something here to write multi-page // documents... graphics.setProperties(user); graphics.setDeviceIndependent(true); graphics.startExport(); print(graphics); graphics.endExport(); } } }