jkevan commented on code in PR #612:
URL: https://github.com/apache/unomi/pull/612#discussion_r1182249233


##########
extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java:
##########
@@ -111,12 +112,52 @@ public boolean isEventValid(String event) {
 
     @Override
     public Set<ValidationError> validateEvent(String event) throws 
ValidationException {
-        JsonNode jsonEvent = parseData(event);
-        String eventType = extractEventType(jsonEvent);
+        return validateNodeEvent(parseData(event));
+    }
+
+    @Override
+    public Map<String, Set<ValidationError>> validateEvents(String events) 
throws ValidationException {
+        Map<String, Set<ValidationError>> errorsPerEventType = new HashMap<>();
+        JsonNode eventsNodes = parseData(events);
+        eventsNodes.forEach(event -> {
+            String eventType = event.get("eventType").asText();
+            try {
+                Set<ValidationError> errors = validateNodeEvent(event);
+                if (errorsPerEventType.containsKey(eventType)) {
+                    errorsPerEventType.get(eventType).addAll(errors);
+                } else {
+                    errorsPerEventType.put(eventType, errors);
+                }
+            } catch (ValidationException e) {
+                Set<ValidationError> errors = buildCustomErrorMessage();
+                if (errorsPerEventType.containsKey(eventType)) {
+                    errorsPerEventType.get(eventType).addAll(errors);
+                } else {
+                    errorsPerEventType.put(eventType, errors);
+                }
+                errorsPerEventType.put(eventType, errors);
+
+                logger.debug(e.getMessage());

Review Comment:
   I think this two lines need to be removed ?



##########
extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java:
##########
@@ -42,7 +42,8 @@ public String toString() {
     }
 
     public boolean equals(Object o) {
-        return validationMessage.equals(o);
+        ValidationError other = (ValidationError) o;
+        return validationMessage.equals(other.validationMessage);

Review Comment:
   Could be simpler to replace directly the inner ValidationMessage object by 
the String error message at this step.
   I would also simplify the building of custom error messages.



##########
extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java:
##########
@@ -111,12 +112,52 @@ public boolean isEventValid(String event) {
 
     @Override
     public Set<ValidationError> validateEvent(String event) throws 
ValidationException {
-        JsonNode jsonEvent = parseData(event);
-        String eventType = extractEventType(jsonEvent);
+        return validateNodeEvent(parseData(event));
+    }
+
+    @Override
+    public Map<String, Set<ValidationError>> validateEvents(String events) 
throws ValidationException {
+        Map<String, Set<ValidationError>> errorsPerEventType = new HashMap<>();
+        JsonNode eventsNodes = parseData(events);
+        eventsNodes.forEach(event -> {
+            String eventType = event.get("eventType").asText();

Review Comment:
   Could be interesting to make the eventType part of the ValidationException 
to make it a bit more generic.
   This would allow to avoid parsing the event type here, as it is supposed to 
be done in the **extractEventType** function.



##########
extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java:
##########
@@ -111,12 +112,52 @@ public boolean isEventValid(String event) {
 
     @Override
     public Set<ValidationError> validateEvent(String event) throws 
ValidationException {
-        JsonNode jsonEvent = parseData(event);
-        String eventType = extractEventType(jsonEvent);
+        return validateNodeEvent(parseData(event));
+    }
+
+    @Override
+    public Map<String, Set<ValidationError>> validateEvents(String events) 
throws ValidationException {
+        Map<String, Set<ValidationError>> errorsPerEventType = new HashMap<>();
+        JsonNode eventsNodes = parseData(events);
+        eventsNodes.forEach(event -> {
+            String eventType = event.get("eventType").asText();
+            try {
+                Set<ValidationError> errors = validateNodeEvent(event);
+                if (errorsPerEventType.containsKey(eventType)) {
+                    errorsPerEventType.get(eventType).addAll(errors);
+                } else {
+                    errorsPerEventType.put(eventType, errors);
+                }
+            } catch (ValidationException e) {
+                Set<ValidationError> errors = buildCustomErrorMessage();

Review Comment:
   Not against building custom error messages, but we should reuse the error 
message from the ValidationException then. 



##########
extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java:
##########
@@ -111,12 +112,52 @@ public boolean isEventValid(String event) {
 
     @Override
     public Set<ValidationError> validateEvent(String event) throws 
ValidationException {
-        JsonNode jsonEvent = parseData(event);
-        String eventType = extractEventType(jsonEvent);
+        return validateNodeEvent(parseData(event));
+    }
+
+    @Override
+    public Map<String, Set<ValidationError>> validateEvents(String events) 
throws ValidationException {
+        Map<String, Set<ValidationError>> errorsPerEventType = new HashMap<>();
+        JsonNode eventsNodes = parseData(events);
+        eventsNodes.forEach(event -> {
+            String eventType = event.get("eventType").asText();
+            try {
+                Set<ValidationError> errors = validateNodeEvent(event);
+                if (errorsPerEventType.containsKey(eventType)) {
+                    errorsPerEventType.get(eventType).addAll(errors);
+                } else {
+                    errorsPerEventType.put(eventType, errors);
+                }
+            } catch (ValidationException e) {
+                Set<ValidationError> errors = buildCustomErrorMessage();
+                if (errorsPerEventType.containsKey(eventType)) {
+                    errorsPerEventType.get(eventType).addAll(errors);
+                } else {
+                    errorsPerEventType.put(eventType, errors);
+                }
+                errorsPerEventType.put(eventType, errors);
+
+                logger.debug(e.getMessage());
+            }
+        });
+        return errorsPerEventType;
+    }
+
+    private Set<ValidationError> buildCustomErrorMessage() {
+        ValidationMessage.Builder builder = new ValidationMessage.Builder();
+        builder.customMessage("No Schema found for this event 
type").format(new MessageFormat("Not used pattern. Message format is 
required"));
+        ValidationError error = new ValidationError(builder.build());
+        Set<ValidationError> errors = new HashSet<>();
+        errors.add(error);
+        return errors;

Review Comment:
   This part would be simpler if we directly return the String validation error 
in the response instead of a thirdparty object from the external lib.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@unomi.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to