package org.freeplane.plugin.bugreport; import java.awt.EventQueue; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; import javax.swing.JOptionPane; import org.freeplane.core.resources.ResourceController; import org.freeplane.core.ui.components.UITools; import org.freeplane.core.util.HtmlUtils; import org.freeplane.core.util.LogUtils; import org.freeplane.core.util.TextUtils; import org.freeplane.features.mode.Controller; class ManualBugReporter implements IBugReportListener { // // final private Controller controller; public ManualBugReporter() { super(); // this.controller = controller; } public void onReportSent(final Map<String, String> report, final String status) { if (!status.equals("wanted")) { return; } final String log = report.get("log"); final String hash = report.get("hash"); EventQueue.invokeLater(new Runnable() { public void run() { openBugTracker(log, hash); } }); } static final private String OPTION = "org.freeplane.plugin.manualbugreport"; private void openBugTracker(final String log, final String hash) { final String option = showBugReportDialog(log, hash); if (!BugReportDialogManager.ALLOWED.equals(option)) { return; } try { final ResourceController resourceController = ResourceController.getResourceController(); final String location = resourceController.getProperty("bugTrackerLocation"); final Controller controller = Controller.getCurrentController(); controller.getViewController().openDocument(new URL(location)); } catch (final MalformedURLException ex) { UITools.errorMessage(TextUtils.getText("url_error") + "\n" + ex); LogUtils.warn(ex); } catch (final Exception ex) { UITools.errorMessage(ex); LogUtils.warn(ex); } } private String showBugReportDialog(final String log, final String hash) { final String title = TextUtils.getText("org.freeplane.plugin.bugreport.freeplane_team").replaceAll("\\n", "\n"); String option = ResourceController.getResourceController().getProperty(OPTION, BugReportDialogManager.ASK); if (option.equals(BugReportDialogManager.ASK)) { String question = TextUtils.getText("org.freeplane.plugin.bugreport.wanted_bug"); if (!question.startsWith("<html>")) { question = HtmlUtils.plainToHTML(question); } final Object[] options = new Object[] { TextUtils.getText("ok"), TextUtils.getText("cancel"), TextUtils.getText("org.freeplane.plugin.bugreport.never") }; final String reportName = TextUtils.getText("org.freeplane.plugin.bugreport.lastreport"); final int choice = BugReportDialogManager.showBugReportDialog(title, question, JOptionPane.QUESTION_MESSAGE, options, options[0], reportName, log); final ReportRegistry register = ReportRegistry.getInstance(); if (choice != 2) { register.unregisterReport(hash); } switch (choice) { case 0: option = BugReportDialogManager.ALLOWED; break; case 1: option = BugReportDialogManager.DENIED; break; case 2: option = BugReportDialogManager.DENIED; ResourceController.getResourceController().setProperty(OPTION, option); break; default: option = BugReportDialogManager.DENIED; break; } } return option; } }