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