Compare commits

...

19 Commits

Author SHA1 Message Date
3d5a024084 [RELEASE] new version 0.22.0 2025-01-28 23:27:05 +01:00
ba6478182d [API] move the cheker in the correct folder 2025-01-28 23:25:32 +01:00
cc639243fc [FEAT] add support of @DecimalMin and @DecimalMax 2025-01-28 23:17:34 +01:00
24c226e92c [FEAT] add @Size @Min @Max @parttern @email unit test for JPAChecker 2025-01-28 23:16:18 +01:00
b5fcc3e20c [FEAT,API] remove checker from JsonData and creadte @CheckerAnnotation 2025-01-28 23:15:11 +01:00
d028eb2261 Manage correct rights 2025-01-26 23:38:48 +01:00
ca18d3759d [FIX] congig in config 2025-01-25 15:48:35 +01:00
a7c9bb5e1b [FIX] do not set the table name at unknow when null is find 2025-01-25 15:48:04 +01:00
d011b3a587 [FEAT] add decorator CollectionNotEmpty 2025-01-25 14:41:39 +01:00
6974adbfdf [FEAT] add decorator CollectionItemUnique 2025-01-25 14:41:20 +01:00
461aece7a0 [FEAT] add decorator @CollectionItemNotNull 2025-01-25 14:40:07 +01:00
3f15d560ed [FEAT] better interface for dataJson 2025-01-25 14:38:53 +01:00
8f3c14e28d [FEAT] assert when try to insart null data 2025-01-25 12:16:39 +01:00
0d419f651e [FIX] dataJson checker is not responsive for null data pointer 2025-01-25 12:16:13 +01:00
9dad14d200 [FIX] many-many support every key type 2025-01-25 12:15:25 +01:00
990b7c08da [FIX] correct right: set it when no element is requested 2025-01-18 09:57:55 +01:00
7f393a9e44 [FIX] set User block boolean nullable for creation capability (front pb) 2025-01-18 09:57:52 +01:00
c91291dbce [DOC] log better display of path when call filter authentication 2025-01-18 09:57:47 +01:00
d684b5eaa9 [VERSION] update dev tag version 2025-01-11 17:29:13 +01:00
37 changed files with 1516 additions and 73 deletions

View File

@ -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>

View File

@ -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) {

View File

@ -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;
}

View 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();
}

View File

@ -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 {
}

View File

@ -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 {
}

View File

@ -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 {
}

View File

@ -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;

View File

@ -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;

View File

@ -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...

View File

@ -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);

View File

@ -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");
}

View File

@ -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. */

View File

@ -76,7 +76,7 @@ public abstract class DbIo implements Closeable {
return this.config.equals(config);
}
public DbConfig getCongig() {
public DbConfig getConfig() {
return this.config;
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);
};
}
}

View 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;
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -100,9 +100,6 @@ public class ConfigBaseVariable {
}
public static String getDBName() {
if (bdDatabase == null) {
return "unknown";
}
return bdDatabase;
}

View File

@ -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

View File

@ -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));
}

View File

@ -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;

View File

@ -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;

View File

@ -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));
}
}

View File

@ -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));
}
}

View 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));
}
}

View 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));
}
}

View 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));
}
}

View 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 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));
}
}

View 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));
}
}

View 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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -1 +1 @@
0.21.0
0.22.0