package floobits.common; import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManager; import com.intellij.openapi.extensions.PluginId; import java.io.PrintWriter; import java.io.Serializable; import java.io.StringWriter; import java.util.Date; import java.util.HashMap; import java.util.Properties; public class CrashDump implements Serializable { public String owner; public String workspace; public String dir; public String subject; public String username; public static String userAgent; public HashMap<String, String> message = new HashMap<String, String>(); private static String editor = ""; public static void setUA(String userAgent, String editor) { CrashDump.userAgent = userAgent; CrashDump.editor = editor; } private IdeaPluginDescriptor getPlugin() { return PluginManager.getPlugin(PluginId.getId("com.floobits.unique.plugin.id")); } public CrashDump(Throwable e, String owner, String workspace, String dir, String username) { this.owner = owner; this.workspace = workspace; this.dir = dir; this.username = username; StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); addContextInfo(message); message.put("stack", sw.toString()); message.put("description", e.getMessage()); setContextInfo("%s died%s!"); } public CrashDump(String description, String username) { this.username = username; addContextInfo(message); message.put("description", description); setContextInfo("%s submitted an issues%s!"); } protected void setContextInfo(String subjectText) { subject = String.format(subjectText, editor, username != null ? " for " + username : ""); } private void addContextInfo(HashMap<String, String> message) { IdeaPluginDescriptor p = getPlugin(); if (p != null) { message.put("floobits_plugin_version", p.getVersion()); } else { message.put("floobits_plugin_version", "No version information."); } message.put("sendingAt", String.format("%s", new Date().getTime())); Properties props = System.getProperties(); message.put("OS", String.format("name: %s arch: %s version: %s", props.getProperty("os.name"), props.getProperty("os.arch"), props.getProperty("os.version"))); message.put("cwd", props.getProperty("user.dir")); message.put("file_separator", props.getProperty("file.separator")); message.put("path_separator", props.getProperty("path.separator")); message.put("line_separator", props.getProperty("line.separator")); message.put("java_version", props.getProperty("java.version")); message.put("java_vendor", props.getProperty("java.vendor")); } }