Compare commits
19 Commits
85b27c0b31
...
3d5a024084
Author | SHA1 | Date | |
---|---|---|---|
3d5a024084 | |||
ba6478182d | |||
cc639243fc | |||
24c226e92c | |||
b5fcc3e20c | |||
d028eb2261 | |||
ca18d3759d | |||
a7c9bb5e1b | |||
d011b3a587 | |||
6974adbfdf | |||
461aece7a0 | |||
3f15d560ed | |||
8f3c14e28d | |||
0d419f651e | |||
9dad14d200 | |||
990b7c08da | |||
7f393a9e44 | |||
c91291dbce | |||
d684b5eaa9 |
2
pom.xml
2
pom.xml
@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>kangaroo-and-rabbit</groupId>
|
||||
<artifactId>archidata</artifactId>
|
||||
<version>0.21.0</version>
|
||||
<version>0.22.0</version>
|
||||
<properties>
|
||||
<java.version>21</java.version>
|
||||
<maven.compiler.version>3.1</maven.compiler.version>
|
||||
|
@ -5,6 +5,10 @@ import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.kar.archidata.annotation.checker.Checker;
|
||||
import org.kar.archidata.annotation.checker.CollectionItemNotNull;
|
||||
import org.kar.archidata.annotation.checker.CollectionItemUnique;
|
||||
import org.kar.archidata.annotation.checker.CollectionNotEmpty;
|
||||
import org.kar.archidata.dataAccess.QueryOptions;
|
||||
import org.kar.archidata.dataAccess.options.OptionRenameColumn;
|
||||
import org.kar.archidata.dataAccess.options.OverrideTableName;
|
||||
@ -24,6 +28,8 @@ import jakarta.persistence.ManyToMany;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.OneToMany;
|
||||
import jakarta.persistence.Table;
|
||||
import jakarta.validation.constraints.DecimalMax;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.Max;
|
||||
import jakarta.validation.constraints.Min;
|
||||
@ -85,6 +91,30 @@ public class AnnotationTools {
|
||||
return tmp;
|
||||
}
|
||||
|
||||
public static CollectionItemNotNull getCollectionItemNotNull(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(CollectionItemNotNull.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (CollectionItemNotNull) annotation[0];
|
||||
}
|
||||
|
||||
public static CollectionItemUnique getCollectionItemUnique(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(CollectionItemUnique.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (CollectionItemUnique) annotation[0];
|
||||
}
|
||||
|
||||
public static CollectionNotEmpty getCollectionNotEmpty(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(CollectionNotEmpty.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (CollectionNotEmpty) annotation[0];
|
||||
}
|
||||
|
||||
public static boolean getSchemaReadOnly(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Schema.class);
|
||||
if (annotation.length == 0) {
|
||||
@ -165,6 +195,30 @@ public class AnnotationTools {
|
||||
return (DataJson) annotation[0];
|
||||
}
|
||||
|
||||
public static Checker[] getCheckers(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Checker.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (Checker[]) annotation;
|
||||
}
|
||||
|
||||
public static DecimalMin getConstraintsDecimalMin(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(DecimalMin.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return ((DecimalMin) annotation[0]);
|
||||
}
|
||||
|
||||
public static DecimalMax getConstraintsDecimalMax(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(DecimalMax.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return ((DecimalMax) annotation[0]);
|
||||
}
|
||||
|
||||
public static Long getConstraintsMax(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Max.class);
|
||||
if (annotation.length == 0) {
|
||||
|
@ -5,13 +5,8 @@ import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.kar.archidata.dataAccess.options.CheckFunctionInterface;
|
||||
import org.kar.archidata.dataAccess.options.CheckFunctionVoid;
|
||||
|
||||
@Target({ ElementType.TYPE, ElementType.FIELD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface DataJson {
|
||||
Class<? extends CheckFunctionInterface> checker() default CheckFunctionVoid.class;
|
||||
|
||||
Class<?> targetEntity() default Void.class;
|
||||
}
|
||||
|
14
src/org/kar/archidata/annotation/checker/Checker.java
Normal file
14
src/org/kar/archidata/annotation/checker/Checker.java
Normal file
@ -0,0 +1,14 @@
|
||||
package org.kar.archidata.annotation.checker;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.kar.archidata.dataAccess.options.CheckFunctionInterface;
|
||||
|
||||
@Target({ ElementType.TYPE, ElementType.FIELD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface Checker {
|
||||
Class<? extends CheckFunctionInterface> value();
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package org.kar.archidata.annotation.checker;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Target(ElementType.FIELD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface CollectionItemNotNull {
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package org.kar.archidata.annotation.checker;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Target(ElementType.FIELD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface CollectionItemUnique {
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package org.kar.archidata.annotation.checker;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Target(ElementType.FIELD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface CollectionNotEmpty {
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package org.kar.archidata.annotation;
|
||||
package org.kar.archidata.annotation.method;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
@ -1,4 +1,4 @@
|
||||
package org.kar.archidata.annotation;
|
||||
package org.kar.archidata.annotation.method;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
@ -1,31 +1,41 @@
|
||||
package org.kar.archidata.dataAccess.options;
|
||||
package org.kar.archidata.checker;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.kar.archidata.annotation.AnnotationTools;
|
||||
import org.kar.archidata.annotation.DataJson;
|
||||
import org.kar.archidata.annotation.checker.Checker;
|
||||
import org.kar.archidata.annotation.checker.CollectionItemNotNull;
|
||||
import org.kar.archidata.annotation.checker.CollectionItemUnique;
|
||||
import org.kar.archidata.annotation.checker.CollectionNotEmpty;
|
||||
import org.kar.archidata.dataAccess.DBAccess;
|
||||
import org.kar.archidata.dataAccess.DataAccess;
|
||||
import org.kar.archidata.dataAccess.QueryCondition;
|
||||
import org.kar.archidata.dataAccess.QueryOptions;
|
||||
import org.kar.archidata.dataAccess.options.CheckFunctionInterface;
|
||||
import org.kar.archidata.dataAccess.options.CheckFunctionVoid;
|
||||
import org.kar.archidata.dataAccess.options.Condition;
|
||||
import org.kar.archidata.dataAccess.options.ConditionChecker;
|
||||
import org.kar.archidata.exception.DataAccessException;
|
||||
import org.kar.archidata.exception.InputException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.validation.constraints.DecimalMax;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
@ -120,6 +130,60 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
|
||||
final Class<?> type = field.getType();
|
||||
if (type == Long.class || type == long.class) {
|
||||
final DecimalMax maxValueDecimal = AnnotationTools.getConstraintsDecimalMax(field);
|
||||
if (maxValueDecimal != null) {
|
||||
final long maxValue = Long.parseLong(maxValueDecimal.value());
|
||||
final boolean inclusive = maxValueDecimal.inclusive();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object elem = field.get(data);
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
final Long elemTyped = (Long) elem;
|
||||
if (inclusive) {
|
||||
if (elemTyped > maxValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
}
|
||||
} else if (elemTyped >= maxValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
final DecimalMin minValueDecimal = AnnotationTools.getConstraintsDecimalMin(field);
|
||||
if (minValueDecimal != null) {
|
||||
final long minValue = Long.parseLong(minValueDecimal.value());
|
||||
final boolean inclusive = minValueDecimal.inclusive();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object elem = field.get(data);
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
final Long elemTyped = (Long) elem;
|
||||
if (inclusive) {
|
||||
if (elemTyped < minValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too Low min: " + minValue);
|
||||
}
|
||||
} else if (elemTyped <= minValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too Low min: " + minValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
final Long maxValue = AnnotationTools.getConstraintsMax(field);
|
||||
if (maxValue != null) {
|
||||
add(fieldName,
|
||||
@ -186,6 +250,61 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
}
|
||||
|
||||
} else if (type == Integer.class || type == int.class) {
|
||||
final DecimalMax maxValueDecimal = AnnotationTools.getConstraintsDecimalMax(field);
|
||||
if (maxValueDecimal != null) {
|
||||
final int maxValue = Integer.parseInt(maxValueDecimal.value());
|
||||
final boolean inclusive = maxValueDecimal.inclusive();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object elem = field.get(data);
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
final Integer elemTyped = (Integer) elem;
|
||||
if (inclusive) {
|
||||
if (elemTyped > maxValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
}
|
||||
} else if (elemTyped >= maxValue) {
|
||||
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
final DecimalMin minValueDecimal = AnnotationTools.getConstraintsDecimalMin(field);
|
||||
if (minValueDecimal != null) {
|
||||
final int minValue = Integer.parseInt(minValueDecimal.value());
|
||||
final boolean inclusive = minValueDecimal.inclusive();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object elem = field.get(data);
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
final Integer elemTyped = (Integer) elem;
|
||||
if (inclusive) {
|
||||
if (elemTyped < minValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too Low min: " + minValue);
|
||||
}
|
||||
} else if (elemTyped <= minValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too Low min: " + minValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
||||
if (maxValueRoot != null) {
|
||||
final int maxValue = maxValueRoot.intValue();
|
||||
@ -272,6 +391,60 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
} else if (type == Boolean.class || type == boolean.class) {
|
||||
|
||||
} else if (type == Float.class || type == float.class) {
|
||||
final DecimalMax maxValueDecimal = AnnotationTools.getConstraintsDecimalMax(field);
|
||||
if (maxValueDecimal != null) {
|
||||
final float maxValue = Float.parseFloat(maxValueDecimal.value());
|
||||
final boolean inclusive = maxValueDecimal.inclusive();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object elem = field.get(data);
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
final Float elemTyped = (Float) elem;
|
||||
if (inclusive) {
|
||||
if (elemTyped > maxValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
}
|
||||
} else if (elemTyped >= maxValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
final DecimalMin minValueDecimal = AnnotationTools.getConstraintsDecimalMin(field);
|
||||
if (minValueDecimal != null) {
|
||||
final float minValue = Float.parseFloat(minValueDecimal.value());
|
||||
final boolean inclusive = minValueDecimal.inclusive();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object elem = field.get(data);
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
final Float elemTyped = (Float) elem;
|
||||
if (inclusive) {
|
||||
if (elemTyped < minValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too Low min: " + minValue);
|
||||
}
|
||||
} else if (elemTyped <= minValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too Low min: " + minValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
||||
if (maxValueRoot != null) {
|
||||
final float maxValue = maxValueRoot.floatValue();
|
||||
@ -287,6 +460,7 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
return;
|
||||
}
|
||||
final Float elemTyped = (Float) elem;
|
||||
|
||||
if (elemTyped > maxValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
@ -315,6 +489,60 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
});
|
||||
}
|
||||
} else if (type == Double.class || type == double.class) {
|
||||
final DecimalMax maxValueDecimal = AnnotationTools.getConstraintsDecimalMax(field);
|
||||
if (maxValueDecimal != null) {
|
||||
final double maxValue = Float.parseFloat(maxValueDecimal.value());
|
||||
final boolean inclusive = maxValueDecimal.inclusive();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object elem = field.get(data);
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
final Double elemTyped = (Double) elem;
|
||||
if (inclusive) {
|
||||
if (elemTyped > maxValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
}
|
||||
} else if (elemTyped >= maxValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too height max: " + maxValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
final DecimalMin minValueDecimal = AnnotationTools.getConstraintsDecimalMin(field);
|
||||
if (minValueDecimal != null) {
|
||||
final double minValue = Float.parseFloat(minValueDecimal.value());
|
||||
final boolean inclusive = minValueDecimal.inclusive();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object elem = field.get(data);
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
final Double elemTyped = (Double) elem;
|
||||
if (inclusive) {
|
||||
if (elemTyped < minValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too Low min: " + minValue);
|
||||
}
|
||||
} else if (elemTyped <= minValue) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Value too Low min: " + minValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
||||
if (maxValueRoot != null) {
|
||||
final double maxValue = maxValueRoot.doubleValue();
|
||||
@ -452,29 +680,65 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (type == JsonValue.class) {
|
||||
final DataJson jsonAnnotation = AnnotationTools.getDataJson(field);
|
||||
if (jsonAnnotation != null && jsonAnnotation.checker() != CheckFunctionVoid.class) {
|
||||
// Here if we have an error it crash at start and no new instance after creation...
|
||||
final CheckFunctionInterface instance = jsonAnnotation.checker().getDeclaredConstructor()
|
||||
.newInstance();
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
instance.checkAll(ioDb, baseName + fieldName + ".", field.get(data), options);
|
||||
});
|
||||
}
|
||||
} else if (type.isEnum()) {
|
||||
// nothing to do.
|
||||
}
|
||||
final DataJson dataJson = AnnotationTools.getDataJson(field);
|
||||
if (dataJson != null && dataJson.checker() != null) {
|
||||
final CheckFunctionInterface checkerInstance = dataJson.checker().getDeclaredConstructor()
|
||||
.newInstance();
|
||||
final Checker[] checkers = AnnotationTools.getCheckers(field);
|
||||
if (checkers != null) {
|
||||
for (final Checker checker : checkers) {
|
||||
if (checker == null || checker.value() == CheckFunctionVoid.class) {
|
||||
continue;
|
||||
}
|
||||
final CheckFunctionInterface checkerInstance = checker.value().getDeclaredConstructor()
|
||||
.newInstance();
|
||||
if (Collection.class.isAssignableFrom(field.getType())) {
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
// get the field of the specific element
|
||||
final Object tmpData = field.get(data);
|
||||
// It is not the objective of this element to check if it is authorize to set NULL
|
||||
if (tmpData == null) {
|
||||
return;
|
||||
}
|
||||
final Collection<?> tmpCollection = (Collection<?>) tmpData;
|
||||
final Object[] elements = tmpCollection.toArray();
|
||||
for (int iii = 0; iii < elements.length; iii++) {
|
||||
if (elements[iii] != null) {
|
||||
checkerInstance.check(ioDb, baseName + fieldName + '[' + iii + "].",
|
||||
elements[iii], null, options);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
// get the field of the specific element
|
||||
final Object tmpData = field.get(data);
|
||||
// It is not the objective of this element to check if it is authorize to set NULL
|
||||
if (tmpData == null) {
|
||||
return;
|
||||
}
|
||||
checkerInstance.check(ioDb, baseName + fieldName + '.', tmpData, null, options);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
final CollectionItemUnique collectionUnique = AnnotationTools.getCollectionItemUnique(field);
|
||||
if (collectionUnique != null) {
|
||||
if (!Collection.class.isAssignableFrom(field.getType())) {
|
||||
throw new DataAccessException(
|
||||
"Request @CollectionItemUnique on a non collection field: '" + fieldName + "'");
|
||||
}
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
@ -482,9 +746,67 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
// get the field of the specific element
|
||||
final Object tmpData = field.get(data);
|
||||
checkerInstance.check(ioDb, baseName, tmpData, null, options);
|
||||
if (tmpData == null) {
|
||||
return;
|
||||
}
|
||||
final Collection<?> tmpCollection = (Collection<?>) tmpData;
|
||||
final Set<Object> uniqueValues = new HashSet<>(tmpCollection);
|
||||
if (uniqueValues.size() != tmpCollection.size()) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Cannot insert multiple times the same elements");
|
||||
}
|
||||
});
|
||||
}
|
||||
final CollectionItemNotNull collectionNotNull = AnnotationTools.getCollectionItemNotNull(field);
|
||||
if (collectionNotNull != null) {
|
||||
if (!Collection.class.isAssignableFrom(field.getType())) {
|
||||
throw new DataAccessException(
|
||||
"Request @CollectionItemNotNull on a non collection field: '" + fieldName + "'");
|
||||
}
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object tmpData = field.get(data);
|
||||
if (tmpData == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<?> tmpCollection = (Collection<?>) tmpData;
|
||||
final Object[] elements = tmpCollection.toArray();
|
||||
for (int iii = 0; iii < elements.length; iii++) {
|
||||
if (elements[iii] == null) {
|
||||
throw new InputException(baseName + fieldName + '[' + iii + ']',
|
||||
"This collection can not conatain NULL item");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
final CollectionNotEmpty collectionNotEmpty = AnnotationTools.getCollectionNotEmpty(field);
|
||||
if (collectionNotEmpty != null) {
|
||||
if (!Collection.class.isAssignableFrom(field.getType())) {
|
||||
throw new DataAccessException(
|
||||
"Request @collectionNotEmpty on a non collection field: '" + fieldName + "'");
|
||||
}
|
||||
add(fieldName,
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final T data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
final Object tmpData = field.get(data);
|
||||
if (tmpData == null) {
|
||||
return;
|
||||
}
|
||||
final Collection<?> tmpCollection = (Collection<?>) tmpData;
|
||||
if (tmpCollection.isEmpty()) {
|
||||
throw new InputException(baseName + fieldName, "Can not be empty");
|
||||
}
|
||||
});
|
||||
}
|
||||
// keep this is last ==> take more time...
|
@ -158,7 +158,7 @@ public class DBAccessSQL extends DBAccess {
|
||||
} else {
|
||||
// TODO : Maybe connect with a temporary not specified connection interface to a db ...
|
||||
final PreparedStatement ps = this.db.getConnection()
|
||||
.prepareStatement("SHOW TABLES IN `" + this.db.getCongig().getDbName() + "`");
|
||||
.prepareStatement("SHOW TABLES IN `" + this.db.getConfig().getDbName() + "`");
|
||||
final ResultSet rs = ps.executeQuery();
|
||||
// LOGGER.info("List all tables: equals? '{}'", name);
|
||||
while (rs.next()) {
|
||||
@ -815,6 +815,9 @@ public class DBAccessSQL extends DBAccess {
|
||||
@Override
|
||||
@SuppressFBWarnings("SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING")
|
||||
public <T> T insert(final T data, final QueryOption... option) throws Exception {
|
||||
if (data == null) {
|
||||
throw new DataAccessException("Try to check a null data ==> wrong API");
|
||||
}
|
||||
final Class<?> clazz = data.getClass();
|
||||
final QueryOptions options = new QueryOptions(option);
|
||||
|
||||
|
@ -355,12 +355,12 @@ public class AddOnManyToMany implements DataAccessAddOn {
|
||||
final FieldName columnName = AnnotationTools.getFieldName(field, options);
|
||||
final String linkTableName = generateLinkTableName(tableName, columnName.inTable());
|
||||
@SuppressWarnings("unchecked")
|
||||
final List<Long> dataCasted = (List<Long>) data;
|
||||
final List<Object> dataCasted = (List<Object>) data;
|
||||
if (dataCasted.size() == 0) {
|
||||
return;
|
||||
}
|
||||
final List<LinkTableGeneric> insertElements = new ArrayList<>();
|
||||
for (final Long remoteKey : dataCasted) {
|
||||
for (final Object remoteKey : dataCasted) {
|
||||
if (remoteKey == null) {
|
||||
throw new DataAccessException("Try to insert remote key with null value");
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ import org.kar.archidata.dataAccess.QueryOptions;
|
||||
/** By default some element are not read like createAt and UpdatedAt. This option permit to read it. */
|
||||
public interface CheckFunctionInterface {
|
||||
/** This function implementation is design to check if the updated class is valid of not for insertion
|
||||
* @param baseName NAme of the object to be precise with the use of what fail.
|
||||
* @param baseName Name of the object to be precise with the use of what fail.
|
||||
* @param data The object that might be injected.
|
||||
* @param modifiedValue List of fields that might be check. If null, then all column must be checked.
|
||||
* @throws Exception Exception is generate if the data are incorrect. */
|
||||
|
@ -76,7 +76,7 @@ public abstract class DbIo implements Closeable {
|
||||
return this.config.equals(config);
|
||||
}
|
||||
|
||||
public DbConfig getCongig() {
|
||||
public DbConfig getConfig() {
|
||||
return this.config;
|
||||
}
|
||||
}
|
||||
|
@ -7,11 +7,11 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.glassfish.jersey.media.multipart.FormDataParam;
|
||||
import org.kar.archidata.annotation.ARCHIVE;
|
||||
import org.kar.archidata.annotation.AsyncType;
|
||||
import org.kar.archidata.annotation.FormDataOptional;
|
||||
import org.kar.archidata.annotation.RESTORE;
|
||||
import org.kar.archidata.annotation.TypeScriptProgress;
|
||||
import org.kar.archidata.annotation.method.ARCHIVE;
|
||||
import org.kar.archidata.annotation.method.RESTORE;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import jakarta.ws.rs.Consumes;
|
||||
|
@ -4,7 +4,6 @@ import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
// https://stackoverflow.com/questions/26777083/best-practice-for-rest-token-based-authentication-with-jax-rs-and-jersey
|
||||
// https://stackoverflow.com/questions/26777083/best-practice-for-rest-token-based-authentication-with-jax-rs-and-jersey/45814178#45814178
|
||||
@ -119,7 +118,7 @@ public class AuthenticationFilter implements ContainerRequestFilter {
|
||||
final boolean isApplicationToken = apikeyHeader != null;
|
||||
final boolean isJwtToken = isTokenBasedAuthentication(authorizationHeader);
|
||||
if (!isApplicationToken && !isJwtToken) {
|
||||
LOGGER.warn("REJECTED unauthorized: {}", requestContext.getUriInfo().getPath());
|
||||
LOGGER.warn("REJECTED unauthorized: /{}", requestContext.getUriInfo().getPath());
|
||||
abortWithUnauthorized(requestContext, "REJECTED unauthorized: " + requestContext.getUriInfo().getPath());
|
||||
return;
|
||||
}
|
||||
@ -246,7 +245,7 @@ public class AuthenticationFilter implements ContainerRequestFilter {
|
||||
final Object rowRight = ret.getClaim("right");
|
||||
if (rowRight != null) {
|
||||
LOGGER.info("Detect right in Authentication Filter: {}", rowRight);
|
||||
user.right = (Map<String, Map<String, Object>>) ret.getClaim("right");
|
||||
user.right = RightSafeCaster.safeCastAndTransform(ret.getClaim("right"));
|
||||
/*
|
||||
if (rights.containsKey(this.applicationName)) {
|
||||
user.right = rights.get(this.applicationName);
|
||||
|
@ -26,7 +26,7 @@ public class MySecurityContext implements SecurityContext {
|
||||
return this.contextPrincipale;
|
||||
}
|
||||
|
||||
public Object getRightOfRoleInGroup(final String group, final String role) {
|
||||
public PartRight getRightOfRoleInGroup(final String group, final String role) {
|
||||
if (this.contextPrincipale.userByToken != null) {
|
||||
return this.contextPrincipale.userByToken.getRight(group, role);
|
||||
}
|
||||
@ -67,21 +67,15 @@ public class MySecurityContext implements SecurityContext {
|
||||
return false;
|
||||
}
|
||||
// get associated Roles:
|
||||
final Object rightPart = getRightOfRoleInGroup(group, role);
|
||||
final PartRight rightPart = getRightOfRoleInGroup(group, role);
|
||||
LOGGER.info("detect : {}", rightPart);
|
||||
long dataRight = 0;
|
||||
if (rightPart instanceof final Long rightPartCasted) {
|
||||
dataRight = rightPartCasted;
|
||||
} else if (rightPart instanceof final Integer rightPartCasted) {
|
||||
dataRight = rightPartCasted;
|
||||
}
|
||||
if (dataRight == PartRight.READ_WRITE.getValue()) {
|
||||
if (PartRight.READ_WRITE.equals(rightPart)) {
|
||||
return true;
|
||||
}
|
||||
if (!needRead && needWrite && dataRight == PartRight.WRITE.getValue()) {
|
||||
if (!needRead && needWrite && PartRight.WRITE.equals(rightPart)) {
|
||||
return true;
|
||||
}
|
||||
if (needRead && !needWrite && dataRight == PartRight.READ.getValue()) {
|
||||
if (needRead && !needWrite && PartRight.READ.equals(rightPart)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -27,4 +27,27 @@ public enum PartRight {
|
||||
}
|
||||
throw new IllegalArgumentException("PartRight: Unknown value: " + value);
|
||||
}
|
||||
|
||||
public static PartRight fromValue(final long value) {
|
||||
for (final PartRight element : values()) {
|
||||
if (element.getValue() == value) {
|
||||
return element;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("PartRight: Unknown value: " + value);
|
||||
}
|
||||
|
||||
public static PartRight fromString(final String value) {
|
||||
if (value == null) {
|
||||
throw new IllegalArgumentException("La chaîne ne peut pas être nulle");
|
||||
}
|
||||
|
||||
return switch (value.toUpperCase()) {
|
||||
case "NONE" -> NONE;
|
||||
case "READ" -> READ;
|
||||
case "WRITE" -> WRITE;
|
||||
case "READ_WRITE" -> READ_WRITE;
|
||||
default -> throw new IllegalArgumentException("Valeur inconnue pour PartRight : " + value);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
61
src/org/kar/archidata/filter/RightSafeCaster.java
Normal file
61
src/org/kar/archidata/filter/RightSafeCaster.java
Normal file
@ -0,0 +1,61 @@
|
||||
package org.kar.archidata.filter;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class RightSafeCaster {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Map<String, Map<String, PartRight>> safeCastAndTransform(final Object obj) {
|
||||
if (!(obj instanceof Map)) {
|
||||
throw new IllegalArgumentException("L'objet n'est pas un Map");
|
||||
}
|
||||
|
||||
final Map<?, ?> outerMap = (Map<?, ?>) obj;
|
||||
|
||||
// Résultat final après vérification et transformation
|
||||
final Map<String, Map<String, PartRight>> resultMap = new java.util.HashMap<>();
|
||||
|
||||
for (final Map.Entry<?, ?> outerEntry : outerMap.entrySet()) {
|
||||
if (!(outerEntry.getKey() instanceof String)) {
|
||||
throw new IllegalArgumentException("Une clé du Map externe n'est pas de type String");
|
||||
}
|
||||
|
||||
if (!(outerEntry.getValue() instanceof Map)) {
|
||||
throw new IllegalArgumentException("Une valeur du Map externe n'est pas un Map");
|
||||
}
|
||||
|
||||
final String outerKey = (String) outerEntry.getKey();
|
||||
final Map<?, ?> innerMap = (Map<?, ?>) outerEntry.getValue();
|
||||
|
||||
final Map<String, PartRight> transformedInnerMap = new java.util.HashMap<>();
|
||||
|
||||
for (final Map.Entry<?, ?> innerEntry : innerMap.entrySet()) {
|
||||
if (!(innerEntry.getKey() instanceof String)) {
|
||||
throw new IllegalArgumentException("Une clé du Map interne n'est pas de type String");
|
||||
}
|
||||
|
||||
final String innerKey = (String) innerEntry.getKey();
|
||||
final Object value = innerEntry.getValue();
|
||||
|
||||
PartRight partRight;
|
||||
if (value instanceof PartRight) {
|
||||
partRight = (PartRight) value;
|
||||
} else if (value instanceof final Integer valueCasted) {
|
||||
partRight = PartRight.fromValue(valueCasted);
|
||||
} else if (value instanceof final Long valueCasted) {
|
||||
partRight = PartRight.fromValue(valueCasted);
|
||||
} else if (value instanceof final String valueCasted) {
|
||||
partRight = PartRight.fromString(valueCasted);
|
||||
} else {
|
||||
throw new IllegalArgumentException("The Map Value is neither PartRight nor String nor Integer");
|
||||
}
|
||||
|
||||
transformedInnerMap.put(innerKey, partRight);
|
||||
}
|
||||
|
||||
resultMap.put(outerKey, transformedInnerMap);
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
}
|
@ -48,7 +48,8 @@ public class User extends GenericDataSoftDelete {
|
||||
|
||||
@DefaultValue("'0'")
|
||||
@Column(nullable = false)
|
||||
public boolean blocked = false;
|
||||
@Nullable
|
||||
public Boolean blocked = false;
|
||||
@Column(length = 512)
|
||||
public String blockedReason;
|
||||
|
||||
|
@ -4,6 +4,8 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.kar.archidata.filter.PartRight;
|
||||
|
||||
public class UserByToken {
|
||||
public static final int TYPE_USER = -1;
|
||||
public static final int TYPE_APPLICATION = -2;
|
||||
@ -11,10 +13,11 @@ public class UserByToken {
|
||||
public Integer type = null;
|
||||
|
||||
public Long id = null;
|
||||
public Long parentId = null; // FOr application, this is the id of the application, and of user token, this is the USERID
|
||||
// For application, this is the id of the application, and of user token, this is the USERID
|
||||
public Long parentId = null;
|
||||
public String name = null;
|
||||
// Right map
|
||||
public Map<String, Map<String, Object>> right = new HashMap<>();
|
||||
public Map<String, Map<String, PartRight>> right = new HashMap<>();
|
||||
|
||||
public Set<String> getGroups() {
|
||||
return this.right.keySet();
|
||||
@ -27,11 +30,11 @@ public class UserByToken {
|
||||
return this.right.containsKey(group);
|
||||
}
|
||||
|
||||
public Object getRight(final String group, final String key) {
|
||||
public PartRight getRight(final String group, final String key) {
|
||||
if (!this.right.containsKey(group)) {
|
||||
return null;
|
||||
}
|
||||
final Map<String, Object> rightGroup = this.right.get(group);
|
||||
final Map<String, PartRight> rightGroup = this.right.get(group);
|
||||
if (!rightGroup.containsKey(key)) {
|
||||
return null;
|
||||
}
|
||||
|
@ -100,9 +100,6 @@ public class ConfigBaseVariable {
|
||||
}
|
||||
|
||||
public static String getDBName() {
|
||||
if (bdDatabase == null) {
|
||||
return "unknown";
|
||||
}
|
||||
return bdDatabase;
|
||||
}
|
||||
|
||||
|
@ -198,7 +198,7 @@ public class JWTWrapper {
|
||||
.claim("login", userLogin).claim("application", application).issuer(isuer).issueTime(now)
|
||||
.expirationTime(expiration); // Do not ask why we need a "-" here ... this have no meaning
|
||||
// add right if needed:
|
||||
if (rights != null && !rights.isEmpty()) {
|
||||
if (rights != null) {
|
||||
builder.claim("right", rights);
|
||||
}
|
||||
// Prepare JWT with claims set
|
||||
|
@ -56,7 +56,6 @@ public class RESTApi {
|
||||
"Fail to get the data [" + httpResponse.statusCode() + "] " + httpResponse.body());
|
||||
}
|
||||
}
|
||||
//return this.mapper.readValue(httpResponse.body(), new TypeReference<List<T>>() {});
|
||||
return this.mapper.readValue(httpResponse.body(),
|
||||
this.mapper.getTypeFactory().constructCollectionType(List.class, clazz));
|
||||
}
|
||||
|
@ -4,9 +4,9 @@ import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.kar.archidata.annotation.ARCHIVE;
|
||||
import org.kar.archidata.annotation.AsyncType;
|
||||
import org.kar.archidata.annotation.RESTORE;
|
||||
import org.kar.archidata.annotation.method.ARCHIVE;
|
||||
import org.kar.archidata.annotation.method.RESTORE;
|
||||
import org.kar.archidata.exception.NotFoundException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -2,9 +2,9 @@ package test.kar.archidata.apiExtern.resource;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.kar.archidata.annotation.ARCHIVE;
|
||||
import org.kar.archidata.annotation.AsyncType;
|
||||
import org.kar.archidata.annotation.RESTORE;
|
||||
import org.kar.archidata.annotation.method.ARCHIVE;
|
||||
import org.kar.archidata.annotation.method.RESTORE;
|
||||
import org.kar.archidata.dataAccess.DataAccess;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -0,0 +1,240 @@
|
||||
package test.kar.archidata.checker;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.kar.archidata.exception.InputException;
|
||||
|
||||
import test.kar.archidata.checker.model.JpaBaseModel;
|
||||
import test.kar.archidata.checker.model.JpaBaseModel.JpaBaseModelChecker;
|
||||
|
||||
public class TestJPACheckerDecimalMax {
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxIncludeInteger() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxIncludeInteger = 75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeInteger = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeInteger = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxIncludeInteger = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxIncludeIntegerObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxIncludeIntegerObject = 75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeIntegerObject = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeIntegerObject = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxIncludeIntegerObject = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxIncludeLong() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxIncludeLong = 75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeLong = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeLong = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxIncludeLong = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxIncludeLongObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxIncludeLongObject = 75L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeLongObject = 74L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeLongObject = 76L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxIncludeLongObject = 100L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxIncludeFloat() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
// can not be tested
|
||||
//data.testDecimalMaxIncludeFloat = 75.56f;
|
||||
//Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeFloat = 75.5599f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeFloat = 75.5601f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxIncludeFloat = 100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxIncludeFloatObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxIncludeFloatObject = 75.56f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeFloatObject = 75.5599f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeFloatObject = 75.5601f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxIncludeFloatObject = 100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxIncludeDouble() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
// can not be tested
|
||||
//data.testDecimalMaxIncludeDouble = 75.56d;
|
||||
//Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeDouble = 75.5599d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeDouble = 75.5601d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxIncludeDouble = 100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxIncludeDoubleObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
//data.testDecimalMaxIncludeDoubleObject = 75.56d;
|
||||
//Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeDoubleObject = 75.5599d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxIncludeDoubleObject = 75.5601d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxIncludeDoubleObject = 100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
// exclude
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxExcludeInteger() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxExcludeInteger = 75;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeInteger = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxExcludeInteger = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeInteger = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxExcludeIntegerObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxExcludeIntegerObject = 75;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeIntegerObject = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxExcludeIntegerObject = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeIntegerObject = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxExcludeLong() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxExcludeLong = 75;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeLong = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxExcludeLong = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeLong = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxExcludeLongObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxExcludeLongObject = 75L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeLongObject = 74L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxExcludeLongObject = 76L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeLongObject = 100L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxExcludeFloat() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxExcludeFloat = 75.56f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeFloat = 75.5599f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxExcludeFloat = 75.5601f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeFloat = 100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxExcludeFloatObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxExcludeFloatObject = 75.56f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeFloatObject = 75.5599f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxExcludeFloatObject = 75.5601f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeFloatObject = 100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxExcludeDouble() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxExcludeDouble = 75.56d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeDouble = 75.5599d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxExcludeDouble = 75.5601d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeDouble = 100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMaxExcludeDoubleObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMaxExcludeDoubleObject = 75.56d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeDoubleObject = 75.5599d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMaxExcludeDoubleObject = 75.5601d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMaxExcludeDoubleObject = 100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,240 @@
|
||||
package test.kar.archidata.checker;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.kar.archidata.exception.InputException;
|
||||
|
||||
import test.kar.archidata.checker.model.JpaBaseModel;
|
||||
import test.kar.archidata.checker.model.JpaBaseModel.JpaBaseModelChecker;
|
||||
|
||||
public class TestJPACheckerDecimalMin {
|
||||
|
||||
@Test
|
||||
public void testDecimalMinIncludeInteger() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinIncludeInteger = -75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeInteger = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeInteger = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinIncludeInteger = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinIncludeIntegerObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinIncludeIntegerObject = -75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeIntegerObject = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeIntegerObject = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinIncludeIntegerObject = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinIncludeLong() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinIncludeLong = -75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeLong = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeLong = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinIncludeLong = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinIncludeLongObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinIncludeLongObject = -75L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeLongObject = -74L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeLongObject = -76L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinIncludeLongObject = -100L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinIncludeFloat() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinIncludeFloat = -75.56f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeFloat = -75.5599f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeFloat = -75.5601f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinIncludeFloat = -100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinIncludeFloatObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinIncludeFloatObject = -75.56f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeFloatObject = -75.5599f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeFloatObject = -75.5601f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinIncludeFloatObject = -100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinIncludeDouble() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
// can not be tested
|
||||
//data.testDecimalMinIncludeDouble = -75.56d;
|
||||
//Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeDouble = -75.5599d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeDouble = -75.5601d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinIncludeDouble = -100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinIncludeDoubleObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
// can not be tested
|
||||
//data.testDecimalMinIncludeDoubleObject = -75.56d;
|
||||
//Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeDoubleObject = -75.5599d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinIncludeDoubleObject = -75.5601d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinIncludeDoubleObject = -100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
// exclude
|
||||
|
||||
@Test
|
||||
public void testDecimalMinExcludeInteger() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinExcludeInteger = -75;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeInteger = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinExcludeInteger = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeInteger = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinExcludeIntegerObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinExcludeIntegerObject = -75;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeIntegerObject = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinExcludeIntegerObject = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeIntegerObject = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinExcludeLong() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinExcludeLong = -75;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeLong = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinExcludeLong = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeLong = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinExcludeLongObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinExcludeLongObject = -75L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeLongObject = -74L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinExcludeLongObject = -76L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeLongObject = -100L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinExcludeFloat() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinExcludeFloat = -75.56f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeFloat = -75.5599f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinExcludeFloat = -75.5601f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeFloat = -100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinExcludeFloatObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinExcludeFloatObject = -75.56f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeFloatObject = -75.5599f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinExcludeFloatObject = -75.5601f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeFloatObject = -100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinExcludeDouble() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinExcludeDouble = -75.56d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeDouble = -75.5599d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinExcludeDouble = -75.5601d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeDouble = -100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecimalMinExcludeDoubleObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testDecimalMinExcludeDoubleObject = -75.56d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeDoubleObject = -75.5599d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testDecimalMinExcludeDoubleObject = -75.5601d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testDecimalMinExcludeDoubleObject = -100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
}
|
30
test/src/test/kar/archidata/checker/TestJPACheckerEMail.java
Normal file
30
test/src/test/kar/archidata/checker/TestJPACheckerEMail.java
Normal file
@ -0,0 +1,30 @@
|
||||
package test.kar.archidata.checker;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.kar.archidata.exception.InputException;
|
||||
|
||||
import test.kar.archidata.checker.model.JpaBaseModel;
|
||||
import test.kar.archidata.checker.model.JpaBaseModel.JpaBaseModelChecker;
|
||||
|
||||
public class TestJPACheckerEMail {
|
||||
|
||||
@Test
|
||||
public void testEMail() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testEMail = "s@s.ds";
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testEMail = "yuio.sdf@sqdf.com";
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testEMail = "s@s.s";
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testEMail = "sq@qsd";
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testEMail = "sqsdfsdf";
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testEMail = "56465456";
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
}
|
123
test/src/test/kar/archidata/checker/TestJPACheckerMax.java
Normal file
123
test/src/test/kar/archidata/checker/TestJPACheckerMax.java
Normal file
@ -0,0 +1,123 @@
|
||||
package test.kar.archidata.checker;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.kar.archidata.exception.InputException;
|
||||
|
||||
import test.kar.archidata.checker.model.JpaBaseModel;
|
||||
import test.kar.archidata.checker.model.JpaBaseModel.JpaBaseModelChecker;
|
||||
|
||||
public class TestJPACheckerMax {
|
||||
|
||||
@Test
|
||||
public void testMaxInteger() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMaxInteger = 75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxInteger = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxInteger = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMaxInteger = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxIntegerObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMaxIntegerObject = 75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxIntegerObject = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxIntegerObject = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMaxIntegerObject = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxLong() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMaxLong = 75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxLong = 74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxLong = 76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMaxLong = 100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxLongObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMaxLongObject = 75L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxLongObject = 74L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxLongObject = 76L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMaxLongObject = 100L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxFloat() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMaxFloat = 75f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxFloat = 74.99f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxFloat = 75.01f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMaxFloat = 100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxFloatObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMaxFloatObject = 75f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxFloatObject = 74.99f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxFloatObject = 75.01f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMaxFloatObject = 100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxDouble() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMaxDouble = 75d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxDouble = 74.99d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxDouble = 75.01d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMaxDouble = 100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxDoubleObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMaxDoubleObject = 75d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxDoubleObject = 74.99d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMaxDoubleObject = 75.01d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMaxDoubleObject = 100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
}
|
123
test/src/test/kar/archidata/checker/TestJPACheckerMin.java
Normal file
123
test/src/test/kar/archidata/checker/TestJPACheckerMin.java
Normal file
@ -0,0 +1,123 @@
|
||||
package test.kar.archidata.checker;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.kar.archidata.exception.InputException;
|
||||
|
||||
import test.kar.archidata.checker.model.JpaBaseModel;
|
||||
import test.kar.archidata.checker.model.JpaBaseModel.JpaBaseModelChecker;
|
||||
|
||||
public class TestJPACheckerMin {
|
||||
|
||||
@Test
|
||||
public void testMinInteger() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMinInteger = -75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinInteger = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinInteger = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMinInteger = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinIntegerObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMinIntegerObject = -75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinIntegerObject = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinIntegerObject = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMinIntegerObject = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinLong() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMinLong = -75;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinLong = -74;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinLong = -76;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMinLong = -100;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinLongObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMinLongObject = -75L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinLongObject = -74L;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinLongObject = -76L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMinLongObject = -100L;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinFloat() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMinFloat = -75f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinFloat = -74.99f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinFloat = -75.01f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMinFloat = -100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinFloatObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMinFloatObject = -75f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinFloatObject = -74.99f;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinFloatObject = -75.01f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMinFloatObject = -100f;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinDouble() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMinDouble = -75d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinDouble = -74.99d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinDouble = -75.01d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMinDouble = -100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinDoubleObject() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testMinDoubleObject = -75d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinDoubleObject = -74.99d;
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testMinDoubleObject = -75.01d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testMinDoubleObject = -100d;
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package test.kar.archidata.checker;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.kar.archidata.exception.InputException;
|
||||
|
||||
import test.kar.archidata.checker.model.JpaBaseModel;
|
||||
import test.kar.archidata.checker.model.JpaBaseModel.JpaBaseModelChecker;
|
||||
|
||||
public class TestJPACheckerPattern {
|
||||
|
||||
@Test
|
||||
public void testPattern() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testPattern = "0";
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testPattern = "1234567890";
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testPattern = "q";
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testPattern = "qsdf4653";
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
}
|
26
test/src/test/kar/archidata/checker/TestJPACheckerSize.java
Normal file
26
test/src/test/kar/archidata/checker/TestJPACheckerSize.java
Normal file
@ -0,0 +1,26 @@
|
||||
package test.kar.archidata.checker;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.kar.archidata.exception.InputException;
|
||||
|
||||
import test.kar.archidata.checker.model.JpaBaseModel;
|
||||
import test.kar.archidata.checker.model.JpaBaseModel.JpaBaseModelChecker;
|
||||
|
||||
public class TestJPACheckerSize {
|
||||
|
||||
@Test
|
||||
public void testSize() throws Exception {
|
||||
final JpaBaseModelChecker checker = new JpaBaseModelChecker();
|
||||
final JpaBaseModel data = new JpaBaseModel();
|
||||
data.testSize = "000";
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testSize = "00000000";
|
||||
Assertions.assertDoesNotThrow(() -> checker.check(data));
|
||||
data.testSize = "00";
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
data.testSize = "000000000";
|
||||
Assertions.assertThrows(InputException.class, () -> checker.check(data));
|
||||
}
|
||||
|
||||
}
|
132
test/src/test/kar/archidata/checker/model/JpaBaseModel.java
Normal file
132
test/src/test/kar/archidata/checker/model/JpaBaseModel.java
Normal file
@ -0,0 +1,132 @@
|
||||
package test.kar.archidata.checker.model;
|
||||
|
||||
import org.kar.archidata.checker.CheckJPA;
|
||||
|
||||
import jakarta.validation.constraints.DecimalMax;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.Max;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
public class JpaBaseModel {
|
||||
// Simple checker declaration
|
||||
public static class JpaBaseModelChecker extends CheckJPA<JpaBaseModel> {
|
||||
public JpaBaseModelChecker() {
|
||||
super(JpaBaseModel.class);
|
||||
}
|
||||
}
|
||||
|
||||
// Simple data to verify if the checker is active
|
||||
@Size(min = 3, max = 8)
|
||||
public String testSize;
|
||||
|
||||
@Pattern(regexp = "^[0-9]+$")
|
||||
public String testPattern;
|
||||
|
||||
@Email
|
||||
public String testEMail;
|
||||
|
||||
@Min(-75)
|
||||
public int testMinInteger;
|
||||
@Min(-75)
|
||||
public Integer testMinIntegerObject;
|
||||
@Min(-75)
|
||||
public long testMinLong;
|
||||
@Min(-75)
|
||||
public Long testMinLongObject;
|
||||
@Min(-75)
|
||||
public float testMinFloat;
|
||||
@Min(-75)
|
||||
public Float testMinFloatObject;
|
||||
@Min(-75)
|
||||
public double testMinDouble;
|
||||
@Min(-75)
|
||||
public Double testMinDoubleObject;
|
||||
|
||||
@Max(75)
|
||||
public int testMaxInteger;
|
||||
@Max(75)
|
||||
public Integer testMaxIntegerObject;
|
||||
@Max(75)
|
||||
public long testMaxLong;
|
||||
@Max(75)
|
||||
public Long testMaxLongObject;
|
||||
@Max(75)
|
||||
public float testMaxFloat;
|
||||
@Max(75)
|
||||
public Float testMaxFloatObject;
|
||||
@Max(75)
|
||||
public double testMaxDouble;
|
||||
@Max(75)
|
||||
public Double testMaxDoubleObject;
|
||||
|
||||
@DecimalMin("-75")
|
||||
public int testDecimalMinIncludeInteger;
|
||||
@DecimalMin("-75")
|
||||
public Integer testDecimalMinIncludeIntegerObject;
|
||||
@DecimalMin("-75")
|
||||
public long testDecimalMinIncludeLong;
|
||||
@DecimalMin("-75")
|
||||
public Long testDecimalMinIncludeLongObject;
|
||||
@DecimalMin("-75.56")
|
||||
public float testDecimalMinIncludeFloat;
|
||||
@DecimalMin("-75.56")
|
||||
public Float testDecimalMinIncludeFloatObject;
|
||||
@DecimalMin("-75.56")
|
||||
public double testDecimalMinIncludeDouble;
|
||||
@DecimalMin("-75.56")
|
||||
public Double testDecimalMinIncludeDoubleObject;
|
||||
|
||||
@DecimalMax("75")
|
||||
public int testDecimalMaxIncludeInteger;
|
||||
@DecimalMax("75")
|
||||
public Integer testDecimalMaxIncludeIntegerObject;
|
||||
@DecimalMax("75")
|
||||
public long testDecimalMaxIncludeLong;
|
||||
@DecimalMax("75")
|
||||
public Long testDecimalMaxIncludeLongObject;
|
||||
@DecimalMax("75.56")
|
||||
public float testDecimalMaxIncludeFloat;
|
||||
@DecimalMax("75.56")
|
||||
public Float testDecimalMaxIncludeFloatObject;
|
||||
@DecimalMax("75.56")
|
||||
public double testDecimalMaxIncludeDouble;
|
||||
@DecimalMax("75.56")
|
||||
public Double testDecimalMaxIncludeDoubleObject;
|
||||
|
||||
@DecimalMin(value = "-75", inclusive = false)
|
||||
public int testDecimalMinExcludeInteger;
|
||||
@DecimalMin(value = "-75", inclusive = false)
|
||||
public Integer testDecimalMinExcludeIntegerObject;
|
||||
@DecimalMin(value = "-75", inclusive = false)
|
||||
public long testDecimalMinExcludeLong;
|
||||
@DecimalMin(value = "-75", inclusive = false)
|
||||
public Long testDecimalMinExcludeLongObject;
|
||||
@DecimalMin(value = "-75.56", inclusive = false)
|
||||
public float testDecimalMinExcludeFloat;
|
||||
@DecimalMin(value = "-75.56", inclusive = false)
|
||||
public Float testDecimalMinExcludeFloatObject;
|
||||
@DecimalMin(value = "-75.56", inclusive = false)
|
||||
public double testDecimalMinExcludeDouble;
|
||||
@DecimalMin(value = "-75.56", inclusive = false)
|
||||
public Double testDecimalMinExcludeDoubleObject;
|
||||
|
||||
@DecimalMax(value = "75", inclusive = false)
|
||||
public int testDecimalMaxExcludeInteger;
|
||||
@DecimalMax(value = "75", inclusive = false)
|
||||
public Integer testDecimalMaxExcludeIntegerObject;
|
||||
@DecimalMax(value = "75", inclusive = false)
|
||||
public long testDecimalMaxExcludeLong;
|
||||
@DecimalMax(value = "75", inclusive = false)
|
||||
public Long testDecimalMaxExcludeLongObject;
|
||||
@DecimalMax(value = "75.56", inclusive = false)
|
||||
public float testDecimalMaxExcludeFloat;
|
||||
@DecimalMax(value = "75.56", inclusive = false)
|
||||
public Float testDecimalMaxExcludeFloatObject;
|
||||
@DecimalMax(value = "75.56", inclusive = false)
|
||||
public double testDecimalMaxExcludeDouble;
|
||||
@DecimalMax(value = "75.56", inclusive = false)
|
||||
public Double testDecimalMaxExcludeDoubleObject;
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package test.kar.archidata.dataAccess.model;
|
||||
|
||||
import org.kar.archidata.dataAccess.options.CheckJPA;
|
||||
import org.kar.archidata.checker.CheckJPA;
|
||||
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
@ -1,7 +1,8 @@
|
||||
package test.kar.archidata.dataAccess.model;
|
||||
|
||||
import org.kar.archidata.annotation.DataJson;
|
||||
import org.kar.archidata.dataAccess.options.CheckJPA;
|
||||
import org.kar.archidata.annotation.checker.Checker;
|
||||
import org.kar.archidata.checker.CheckJPA;
|
||||
|
||||
public class DataWithSubJson {
|
||||
// Simple checker declaration
|
||||
@ -11,6 +12,7 @@ public class DataWithSubJson {
|
||||
}
|
||||
}
|
||||
|
||||
@DataJson(checker = DataInJson.DataInJsonChecker.class)
|
||||
@DataJson()
|
||||
@Checker(DataInJson.DataInJsonChecker.class)
|
||||
public DataInJson dataSerialized;
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
0.21.0
|
||||
0.22.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user