This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git


The following commit(s) were added to refs/heads/master by this push:
     new 9e74caa  [JOHNZON-327] Json Schema Validation: added integer type 
validation. (#72)
9e74caa is described below

commit 9e74caa3c0c19311da783313c52863967d313bf6
Author: manuelrazola <manuel.raz...@ubisoft.com>
AuthorDate: Thu Dec 3 11:36:51 2020 +0100

    [JOHNZON-327] Json Schema Validation: added integer type validation. (#72)
    
    * Added integer type validation to JsonSchemaValidatorFactory.
    
    * Implemented PR suggestions.
---
 .../jsonschema/JsonSchemaValidatorFactory.java     |  2 ++
 .../jsonschema/spi/builtin/IntegerValidation.java  | 28 ++++++++++++++++++++++
 .../spi/builtin/MultipleOfValidation.java          |  4 ++--
 .../jsonschema/spi/builtin/TypeValidation.java     |  1 +
 .../jsonschema/JsonSchemaValidatorTest.java        | 27 +++++++++++++++++++++
 5 files changed, 60 insertions(+), 2 deletions(-)

diff --git 
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java
 
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java
index a873dfe..2fe4e27 100644
--- 
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java
+++ 
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java
@@ -43,6 +43,7 @@ import 
org.apache.johnzon.jsonschema.spi.builtin.ContainsValidation;
 import org.apache.johnzon.jsonschema.spi.builtin.EnumValidation;
 import org.apache.johnzon.jsonschema.spi.builtin.ExclusiveMaximumValidation;
 import org.apache.johnzon.jsonschema.spi.builtin.ExclusiveMinimumValidation;
+import org.apache.johnzon.jsonschema.spi.builtin.IntegerValidation;
 import org.apache.johnzon.jsonschema.spi.builtin.ItemsValidation;
 import org.apache.johnzon.jsonschema.spi.builtin.MaxItemsValidation;
 import org.apache.johnzon.jsonschema.spi.builtin.MaxLengthValidation;
@@ -88,6 +89,7 @@ public class JsonSchemaValidatorFactory implements 
AutoCloseable {
         return asList(
                 new RequiredValidation(),
                 new TypeValidation(),
+                new IntegerValidation(),
                 new EnumValidation(),
                 new MultipleOfValidation(),
                 new MaximumValidation(),
diff --git 
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/IntegerValidation.java
 
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/IntegerValidation.java
new file mode 100644
index 0000000..dc12db5
--- /dev/null
+++ 
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/IntegerValidation.java
@@ -0,0 +1,28 @@
+package org.apache.johnzon.jsonschema.spi.builtin;
+
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import javax.json.JsonNumber;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import javax.json.JsonValue.ValueType;
+
+import org.apache.johnzon.jsonschema.ValidationResult;
+import org.apache.johnzon.jsonschema.ValidationResult.ValidationError;
+import org.apache.johnzon.jsonschema.spi.ValidationContext;
+import org.apache.johnzon.jsonschema.spi.ValidationExtension;
+
+public class IntegerValidation implements ValidationExtension {
+
+       @Override
+       public Optional<Function<JsonValue, Stream<ValidationError>>> 
create(ValidationContext model) {
+               final JsonValue type = model.getSchema().get("type");
+               if (type.getValueType().equals(ValueType.STRING) && 
"integer".equals(JsonString.class.cast(type).getString())) {
+                       return Optional.of(new 
MultipleOfValidation.Impl(model.toPointer(), model.getValueProvider(), 1));
+               }
+               return Optional.empty();
+       }
+
+}
diff --git 
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/MultipleOfValidation.java
 
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/MultipleOfValidation.java
index a4c101c..72a1862 100644
--- 
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/MultipleOfValidation.java
+++ 
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/MultipleOfValidation.java
@@ -40,8 +40,8 @@ public class MultipleOfValidation implements 
ValidationExtension {
         return Optional.empty();
     }
 
-    private static class Impl extends BaseNumberValidation {
-        private Impl(final String pointer, final Function<JsonValue, 
JsonValue> valueProvider, final double multipleOf) {
+    static class Impl extends BaseNumberValidation {
+        Impl(final String pointer, final Function<JsonValue, JsonValue> 
valueProvider, final double multipleOf) {
             super(pointer, valueProvider, multipleOf);
         }
 
diff --git 
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java
 
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java
index 18a5697..67c1ace 100644
--- 
a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java
+++ 
b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java
@@ -55,6 +55,7 @@ public class TypeValidation implements ValidationExtension {
             case "string":
                 return Stream.of(JsonValue.ValueType.STRING);
             case "number":
+            case "integer":
                 return Stream.of(JsonValue.ValueType.NUMBER);
             case "array":
                 return Stream.of(JsonValue.ValueType.ARRAY);
diff --git 
a/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java
 
b/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java
index 08ea742..c9aa42f 100644
--- 
a/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java
+++ 
b/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.Collection;
 
 import javax.json.Json;
@@ -355,6 +357,29 @@ public class JsonSchemaValidatorTest {
 
         validator.close();
     }
+    
+    @Test
+    public void integerType() {
+       final JsonSchemaValidator validator = 
factory.newInstance(jsonFactory.createObjectBuilder()
+                .add("type", "object")
+                .add("properties", jsonFactory.createObjectBuilder()
+                        .add("age", jsonFactory.createObjectBuilder()
+                                .add("type", "integer")
+                                .build())
+                        .build())
+                .build());
+
+        
assertTrue(validator.apply(jsonFactory.createObjectBuilder().build()).isSuccess());
+        
assertTrue(validator.apply(jsonFactory.createObjectBuilder().add("age", 
30).build()).isSuccess());
+        
assertTrue(validator.apply(jsonFactory.createObjectBuilder().add("age", 
-10).build()).isSuccess());
+        
assertTrue(validator.apply(jsonFactory.createObjectBuilder().add("age", 
BigInteger.valueOf(50)).build()).isSuccess());
+        // check no decimal numbers allowed
+        assertFalse(validator.apply(jsonFactory.createObjectBuilder() 
.add("age", 30.3f) .build()).isSuccess());
+        assertFalse(validator.apply(jsonFactory.createObjectBuilder() 
.add("age", -7.4d) .build()).isSuccess());
+        assertFalse(validator.apply(jsonFactory.createObjectBuilder() 
.add("age", BigDecimal.valueOf(50.35613d)).build()).isSuccess());
+        
+        validator.close();
+    }
 
     @Test
     public void minLength() {
@@ -657,4 +682,6 @@ public class JsonSchemaValidatorTest {
 
         validator.close();
     }
+    
+
 }

Reply via email to