package VASSAL.tools;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import VASSAL.Info;
import VASSAL.tools.io.IOUtils;
public class BugUtils {
public static void sendBugReport(String email,
String description,
String errorLog,
Throwable t) throws IOException {
final HTTPPostBuilder pb = new HTTPPostBuilder();
InputStream in = null;
try {
/*
final URL url = new URL("http://sourceforge.net/tracker/index.php");
pb.setParameter("group_id", "90612");
pb.setParameter("atid", "594231");
pb.setParameter("func", "postadd");
pb.setParameter("category_id", "100");
pb.setParameter("artifact_group_id", "100");
pb.setParameter("summary", getSummary(t));
pb.setParameter("details", email + "\n\n" + description);
pb.setParameter("input_file", "errorLog", errorLog);
pb.setParameter("file_description", "the errorLog");
pb.setParameter("submit", "SUBMIT");
*/
final String url = "http://www.vassalengine.org/util/bug.php";
pb.setParameter("version", Info.getVersion());
pb.setParameter("email", email);
pb.setParameter("summary", getSummary(t));
pb.setParameter("description", description);
pb.setParameter("log", "errorLog", errorLog);
in = pb.post(url);
final String result = IOUtils.toString(in);
// script should return zero on success, otherwise it failed
try {
if (Integer.parseInt(result) != 0) {
throw new NumberFormatException("Bad result: " + result);
}
}
catch (NumberFormatException e) {
throw (IOException) new IOException().initCause(e);
}
in.close();
}
finally {
IOUtils.closeQuietly(in);
}
}
private static String getSummary(Throwable t) {
String summary;
if (t == null) {
summary = "Automated Bug Report";
}
else {
final String tc = t.getClass().getName();
summary = tc.substring(tc.lastIndexOf('.') + 1);
if (t.getMessage() != null) {
summary += ": " + t.getMessage();
}
/*
for (StackTraceElement e : t.getStackTrace()) {
if (e.getClassName().startsWith("VASSAL")) {
summary += " at "+e.getClassName()+"."+e.getMethodName()+" (line "+e.getLineNumber()+")";
break;
}
}
*/
}
return summary;
}
// FIXME: move this somewhere else?
public static String getErrorLog() {
String log = null;
FileReader r = null;
try {
r = new FileReader(new File(Info.getConfDir(), "errorLog"));
log = IOUtils.toString(r);
r.close();
}
catch (IOException e) {
// Don't bother logging this---if we can't read the errorLog,
// then we probably can't write to it either.
IOUtils.closeQuietly(r);
}
return log;
}
}