View Issue Details

IDProjectCategoryView StatusLast Update
0000009KafkaEsqueImprovementpublic2018-11-26 12:56
ReporterOliver G.Assigned Topatschuh 
PrioritylowSeveritytweakReproducibilityalways
Status resolvedResolutionfixed 
Product Version 
Target Version0.12.0Fixed in Version0.12.0 
Summary0000009: Improve Error Alert for JSON Validation Errors
Description

Show Message instead of RuntimeException and StackTrace.
Patch with the a possible solution will be attached.

TagsNo tags attached.

Activities

Oliver G.

Oliver G.

2018-11-25 22:06

reporter  

Improved_Error_Alert_for_JSON_Validation.patch (7,214 bytes)
Index: src/main/java/com/modulo/kafkaesque/PublisherController.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/modulo/kafkaesque/PublisherController.java	(revision 5403c717d55ee18a5cd03a66103c8b6db2aa29f5)
+++ src/main/java/com/modulo/kafkaesque/PublisherController.java	(revision )
@@ -118,20 +118,29 @@
     private boolean validateMessage(String key, String value) {
         boolean result = true;
         if (validateIsJsonKeyBox.isSelected()) {
-            if (!JsonUtils.isJsonValid(key)) {
+            ValidationResult validationResult = JsonUtils.validate(key);
+
+            if (!validationResult.isValid()) {
                 result = false;
-                ErrorAlert.show(new RuntimeException("key is not a valid json string"));
+                showError("key", validationResult);
             }
         }
         if (validateIsJsonValueBox.isSelected()) {
-            if (!JsonUtils.isJsonValid(value)) {
+            ValidationResult validationResult = JsonUtils.validate(value);
+
+            if (!validationResult.isValid()) {
                 result = false;
-                ErrorAlert.show(new RuntimeException("value is not a valid json string"));
+                showError("value", validationResult);
             }
         }
         return result;
     }
 
+    private void showError(String inputName, ValidationResult validationResult) {
+        String message = String.format("%s is not a valid json String: %s ", inputName, validationResult.getValidationError());
+        ErrorAlert.show(new ValidationException(message), false);
+    }
+
     @FXML
     private void addHeaderClick(ActionEvent event) {
         try {
Index: src/main/java/com/modulo/kafkaesque/alerts/ErrorAlert.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/modulo/kafkaesque/alerts/ErrorAlert.java	(revision 5403c717d55ee18a5cd03a66103c8b6db2aa29f5)
+++ src/main/java/com/modulo/kafkaesque/alerts/ErrorAlert.java	(revision )
@@ -10,34 +10,40 @@
 import java.io.StringWriter;
 
 public class ErrorAlert {
+
     public static void show(Throwable ex){
+        show(ex,true);
+    }
+
+    public static void show(Throwable ex, boolean expandable) {
         Alert alert = new Alert(Alert.AlertType.ERROR);
         alert.setTitle(ex.getClass().getSimpleName());
         alert.setHeaderText(ex.getClass().getName());
         alert.setContentText(ex.getMessage());
         Main.applyStylesheet(alert.getDialogPane().getScene());
 
-// Create expandable Exception.
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        ex.printStackTrace(pw);
-        String exceptionText = sw.toString();
+        if (expandable) {
+            StringWriter sw = new StringWriter();
+            PrintWriter pw = new PrintWriter(sw);
+            ex.printStackTrace(pw);
+            String exceptionText = sw.toString();
 
-        TextArea textArea = new TextArea(exceptionText);
-        textArea.setEditable(false);
-        textArea.setWrapText(true);
+            TextArea textArea = new TextArea(exceptionText);
+            textArea.setEditable(false);
+            textArea.setWrapText(true);
 
-        textArea.setMaxWidth(Double.MAX_VALUE);
-        textArea.setMaxHeight(Double.MAX_VALUE);
-        GridPane.setVgrow(textArea, Priority.ALWAYS);
-        GridPane.setHgrow(textArea, Priority.ALWAYS);
+            textArea.setMaxWidth(Double.MAX_VALUE);
+            textArea.setMaxHeight(Double.MAX_VALUE);
+            GridPane.setVgrow(textArea, Priority.ALWAYS);
+            GridPane.setHgrow(textArea, Priority.ALWAYS);
 
-        GridPane expContent = new GridPane();
-        expContent.setMaxWidth(Double.MAX_VALUE);
-        expContent.add(textArea, 0, 0);
+            GridPane expContent = new GridPane();
+            expContent.setMaxWidth(Double.MAX_VALUE);
+            expContent.add(textArea, 0, 0);
 
-// Set expandable Exception into the dialog pane.
-        alert.getDialogPane().setExpandableContent(expContent);
+            // Set expandable Exception into the dialog pane.
+            alert.getDialogPane().setExpandableContent(expContent);
+        }
 
         alert.showAndWait();
     }
Index: src/main/java/com/modulo/kafkaesque/JsonUtils.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/modulo/kafkaesque/JsonUtils.java	(revision 5403c717d55ee18a5cd03a66103c8b6db2aa29f5)
+++ src/main/java/com/modulo/kafkaesque/JsonUtils.java	(revision )
@@ -8,16 +8,17 @@
     private JsonUtils() {
     }
 
-    public static boolean isJsonValid(String jsonInString) {
+    public static ValidationResult validate(String jsonInString) {
         if (jsonInString == null) {
-            return true;
+            return new ValidationResult(true);
         }
+
         try {
             final ObjectMapper mapper = new ObjectMapper();
             mapper.readTree(jsonInString);
-            return true;
+            return new ValidationResult(true);
         } catch (IOException e) {
-            return false;
+            return new ValidationResult(false, e.getMessage());
         }
     }
 }
Index: src/main/java/com/modulo/kafkaesque/ValidationResult.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/modulo/kafkaesque/ValidationResult.java	(revision )
+++ src/main/java/com/modulo/kafkaesque/ValidationResult.java	(revision )
@@ -0,0 +1,26 @@
+package com.modulo.kafkaesque;
+
+public class ValidationResult {
+
+    private final boolean valid;
+
+    private final String validationError;
+
+    public ValidationResult(boolean valid) {
+        this.valid = valid;
+        this.validationError = null;
+    }
+
+    public ValidationResult(boolean valid, String validationError) {
+        this.valid = valid;
+        this.validationError = validationError;
+    }
+
+    public boolean isValid() {
+        return valid;
+    }
+
+    public String getValidationError() {
+        return validationError;
+    }
+}
Index: src/main/java/com/modulo/kafkaesque/ValidationException.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/modulo/kafkaesque/ValidationException.java	(revision )
+++ src/main/java/com/modulo/kafkaesque/ValidationException.java	(revision )
@@ -0,0 +1,8 @@
+package com.modulo.kafkaesque;
+
+public class ValidationException extends RuntimeException {
+
+    public ValidationException(String message) {
+        super(message);
+    }
+}
patschuh

patschuh

2018-11-26 12:56

developer   ~0000008

Reviewed and applied patch

Related Changesets

KafkaEsque: master 09dd8f5c

2018-11-26 12:55:10

patschuh

Details Diff
[ESQUE-9]: Applied provided patch
Affected Issues
0000009

Issue History

Date Modified Username Field Change
2018-11-25 22:06 Oliver G. New Issue
2018-11-25 22:06 Oliver G. File Added: Improved_Error_Alert_for_JSON_Validation.patch
2018-11-26 06:39 patschuh Target Version => 0.12.0
2018-11-26 06:39 patschuh Description Updated View Revisions
2018-11-26 12:55 patschuh Changeset attached => KafkaEsque master 09dd8f5c
2018-11-26 12:56 patschuh Assigned To => patschuh
2018-11-26 12:56 patschuh Status new => resolved
2018-11-26 12:56 patschuh Resolution open => fixed
2018-11-26 12:56 patschuh Fixed in Version => 0.12.0
2018-11-26 12:56 patschuh Note Added: 0000008