package abbot;
import javax.swing.UIManager;
import javax.swing.LookAndFeel;
import java.io.*;
import abbot.tester.Robot;
import abbot.i18n.Strings;
/** Exception for reporting unexpected situations in the program.
* Automatically generates a message suitable for posting in a bug report.
*/
public class BugReport extends Error implements Version {
private static final String LS = System.getProperty("line.separator");
private static final String BUGREPORT_URL = Strings.get("bugreport.url");
private static String getReportingInfo() {
return Strings.get("bugreport.info",
new Object[] { LS + BUGREPORT_URL + LS });
}
public static String getSystemInfo() {
String desc = "none";
LookAndFeel laf = UIManager.getLookAndFeel();
if (laf != null) {
desc = laf.getName() + " (" + laf.getDescription() + ")";
}
return ""
// + "abbot version: " + VERSION + LS
+ " mode: " + Robot.getEventModeDescription() + LS
+ " OS: " + System.getProperty("os.name")
+ " " + System.getProperty("os.version")
+ " (" + System.getProperty("os.arch") + ") " + LS
+ " Java version: " + System.getProperty("java.version")
+ " (vm " + System.getProperty("java.vm.version") + ")" + LS
+ " Classpath: " + System.getProperty("java.class.path") + LS
+ "Look and Feel: " + UIManager.getLookAndFeel();
}
private String errorMessage;
private Throwable throwable;
public BugReport(String error) {
this(error, null);
}
public BugReport(String error, Throwable thr) {
super(error);
this.errorMessage = error;
this.throwable = thr;
}
public String toString() {
String exc = "";
if (throwable != null) {
StringWriter writer = new StringWriter();
throwable.printStackTrace(new PrintWriter(writer));
exc = writer.toString();
}
return errorMessage
+ LS + getReportingInfo()
+ LS + getSystemInfo()
+ LS + exc;
}
}