diff --git a/client/src/main/java/envoy/client/ui/settings/BugReportPane.java b/client/src/main/java/envoy/client/ui/settings/BugReportPane.java index 1404e16..0ac1d83 100644 --- a/client/src/main/java/envoy/client/ui/settings/BugReportPane.java +++ b/client/src/main/java/envoy/client/ui/settings/BugReportPane.java @@ -4,8 +4,7 @@ import javafx.event.EventHandler; import javafx.scene.control.*; import javafx.scene.input.InputEvent; -import envoy.client.data.Context; -import envoy.client.util.IssueUtil; +import envoy.event.IssueProposal; /** * This class offers the option for users to submit a bug report. Only the title @@ -58,10 +57,10 @@ public final class BugReportPane extends OnlineOnlySettingsPane { // Displaying the submitReportButton submitReportButton.setDisable(true); - submitReportButton.setOnAction(e -> client.send(IssueUtil.createIssueProposal(titleTextField.getText(), - errorDetailArea.getText(), - showUsernameInBugReport.isSelected() ? Context.getInstance().getLocalDB().getUser().getName() : null, - true))); + submitReportButton.setOnAction(e -> { + String title = titleTextField.getText(), description = errorDetailArea.getText(); + client.send(showUsernameInBugReport.isSelected() ? new IssueProposal(title, description, true) : new IssueProposal(title, description, client.getSender().getName(), true)); + }); getChildren().add(submitReportButton); } } diff --git a/client/src/main/java/envoy/client/util/IssueUtil.java b/client/src/main/java/envoy/client/util/IssueUtil.java deleted file mode 100644 index eb2c0ea..0000000 --- a/client/src/main/java/envoy/client/util/IssueUtil.java +++ /dev/null @@ -1,83 +0,0 @@ -package envoy.client.util; - -import java.util.regex.Pattern; - -import envoy.event.IssueProposal; - -/** - * Provides methods to handle outgoing issues. - * - * @author Leon Hofmeister - * @author Kai S. K. Engelbart - * @since Envoy Client v0.2-beta - */ -public final class IssueUtil { - - private static final Pattern removeBackslashes = Pattern.compile("\\\\"); - private static final Pattern escapeQuotes = Pattern.compile("\""); - - private IssueUtil() {} - - /** - * Creates a new {@code IssueProposal} from the given data. - * - * @param title the proposed title of the issue - * @param description the proposed description of the issue - * @param username the user who submitted the issue. Should be - * {@code null} if he does not want to be named. * @param - * isBug - * @param isBug whether this issue is a bug or a feature - * @return a sanitized IssueProposal that should not fail to be sent - * @since Envoy Client v0.2-beta - */ - public static IssueProposal createIssueProposal(String title, String description, String username, boolean isBug) { - title = sanitizeIssueTitle(title); - description = sanitizeIssueDescription(description, username); - return new IssueProposal(title, description, isBug); - } - - /** - * Escapes quotes and removes backslashes for a suggested issue title. - * - * @param title the title to sanitize - * @return the sanitized title - * @since Envoy Client v0.2-beta - */ - private static String sanitizeIssueTitle(String title) { - - // Remove ALL backslashes as they are only error prone - title = removeBackslashes.matcher(title).replaceAll(""); - - // Escape quotes - title = escapeQuotes.matcher(title).replaceAll("\\\\\""); - return title; - } - - /** - * Normalizes line breaks,
- * removes all backslashes,
- * escapes quotes and
- * appends the user name to the issue description if requested. - * - * @param description the description to sanitize - * @param username the user who submitted the issue. Should be - * {@code null} if he does not want to be named. - * @return the sanitized description - * @since Envoy Client v0.2-beta - */ - public static String sanitizeIssueDescription(String description, String username) { - - // Trim and replace line breaks by
tags - description = description.trim().replaceAll(System.getProperty("line.separator"), "
"); - - // Append user name if requested - if (username != null) description += String.format("
Submitted by user %s.", username); - - // Remove ALL backslashes as they are only error prone - description = removeBackslashes.matcher(description).replaceAll(""); - - // Escape all quotes to avoid prematurely ending the string - description = escapeQuotes.matcher(description).replaceAll("\\\\\""); - return description; - } -} diff --git a/common/src/main/java/envoy/event/IssueProposal.java b/common/src/main/java/envoy/event/IssueProposal.java index 63c54f1..b12b6fd 100644 --- a/common/src/main/java/envoy/event/IssueProposal.java +++ b/common/src/main/java/envoy/event/IssueProposal.java @@ -23,11 +23,46 @@ public final class IssueProposal extends Event { * @since Envoy Common v0.2-beta */ public IssueProposal(String title, String description, boolean isBug) { - super(title); - this.description = description; + super(escape(title)); + this.description = sanitizeDescription(description); bug = isBug; } + /** + * @param title the title of the reported bug + * @param description the description of this bug + * @param user the name of the user creating the issue + * @param isBug determines whether this {@code IssueProposal} is + * supposed to be a + * feature or a bug (true = bug, false = feature) + * @since Envoy Common v0.2-beta + */ + public IssueProposal(String title, String description, String user, boolean isBug) { + super(escape(title)); + this.description = sanitizeDescription(description) + String.format("
Submitted by user %s.", user); + bug = isBug; + } + + /** + * Escapes an issue description and normalizes its line breaks. + * + * @param description the description to normalize + * @return the normalized description + * @since Envoy Common v0.2-beta + */ + private static String sanitizeDescription(String description) { + return escape(description).replaceAll("\r?\n", "
"); + } + + /** + * Escapes quotes and backslashes from a string. + * + * @param raw the string to escape + * @return the escaped string + * @since Envoy Client v0.2-beta + */ + private static String escape(String raw) { return raw.replace("\\", "\\\\").replace("\"", "\\\""); } + /** * @return the description * @since Envoy Common v0.2-beta