[FEAT] add List<String> modifiedValue
in all JPA checker to permit to know wich field are mododified
This commit is contained in:
parent
25a163d4fa
commit
3bbbea87fa
@ -10,9 +10,9 @@ public interface CheckFunctionInterface {
|
|||||||
/** This function implementation is design to check if the updated class is valid of not for insertion
|
/** 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 data The object that might be injected.
|
||||||
* @param filterValue List of fields that might be check. If null, then all column must be checked.
|
* @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. */
|
* @throws Exception Exception is generate if the data are incorrect. */
|
||||||
void check(final String baseName, Object data, List<String> filterValue, final QueryOptions options)
|
void check(final String baseName, Object data, List<String> modifiedValue, final QueryOptions options)
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
default void checkAll(final String baseName, final Object data, final QueryOptions options) throws Exception {
|
default void checkAll(final String baseName, final Object data, final QueryOptions options) throws Exception {
|
||||||
|
@ -35,10 +35,13 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
|||||||
/** By default some element are not read like createAt and UpdatedAt. This option permit to read it. */
|
/** By default some element are not read like createAt and UpdatedAt. This option permit to read it. */
|
||||||
public interface CheckInterface<K> {
|
public interface CheckInterface<K> {
|
||||||
/** This function implementation is design to check if the updated class is valid of not for insertion
|
/** This function implementation is design to check if the updated class is valid of not for insertion
|
||||||
|
* @param baseName Base of the name input that is displayed in exception generated.
|
||||||
* @param data The object that might be injected.
|
* @param data The object that might be injected.
|
||||||
* @param filterValue List of fields that might be check. If null, then all column must be checked.
|
* @param modifiedValue List of fields that modification is requested.
|
||||||
|
* @param options Some query option that the checker can need to generate basic check.
|
||||||
* @throws Exception Exception is generate if the data are incorrect. */
|
* @throws Exception Exception is generate if the data are incorrect. */
|
||||||
void check(final String baseName, final K data, final QueryOptions options) throws Exception;
|
void check(final String baseName, final K data, List<String> modifiedValue, final QueryOptions options)
|
||||||
|
throws Exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Map<String, List<CheckInterface<T>>> checking = null;
|
protected Map<String, List<CheckInterface<T>>> checking = null;
|
||||||
@ -67,128 +70,182 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
|||||||
for (final Field field : this.clazz.getFields()) {
|
for (final Field field : this.clazz.getFields()) {
|
||||||
final String fieldName = field.getName(); // AnnotationTools.getFieldName(field);
|
final String fieldName = field.getName(); // AnnotationTools.getFieldName(field);
|
||||||
if (AnnotationTools.isPrimaryKey(field)) {
|
if (AnnotationTools.isPrimaryKey(field)) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
throw new InputException(baseName + fieldName,
|
(
|
||||||
"This is a '@Id' (primaryKey) ==> can not be change");
|
final String baseName,
|
||||||
});
|
final T data,
|
||||||
|
final List<String> modifiedValue,
|
||||||
|
final QueryOptions options) -> {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"This is a '@Id' (primaryKey) ==> can not be change");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (AnnotationTools.getConstraintsNotNull(field)) {
|
if (AnnotationTools.getConstraintsNotNull(field)) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
if (field.get(data) == null) {
|
(
|
||||||
throw new InputException(baseName + fieldName, "Can not be null");
|
final String baseName,
|
||||||
}
|
final T data,
|
||||||
});
|
final List<String> modifiedValue,
|
||||||
|
final QueryOptions options) -> {
|
||||||
|
if (field.get(data) == null) {
|
||||||
|
throw new InputException(baseName + fieldName, "Can not be null");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (AnnotationTools.isCreatedAtField(field) || AnnotationTools.isUpdateAtField(field)) {
|
if (AnnotationTools.isCreatedAtField(field) || AnnotationTools.isUpdateAtField(field)) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
throw new InputException(baseName + fieldName, "It is forbidden to change this field");
|
(
|
||||||
});
|
final String baseName,
|
||||||
|
final T data,
|
||||||
|
final List<String> modifiedValue,
|
||||||
|
final QueryOptions options) -> {
|
||||||
|
throw new InputException(baseName + fieldName, "It is forbidden to change this field");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
final Class<?> type = field.getType();
|
final Class<?> type = field.getType();
|
||||||
if (type == Long.class || type == long.class) {
|
if (type == Long.class || type == long.class) {
|
||||||
final Long maxValue = AnnotationTools.getConstraintsMax(field);
|
final Long maxValue = AnnotationTools.getConstraintsMax(field);
|
||||||
if (maxValue != null) {
|
if (maxValue != null) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final Long elemTyped = (Long) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped > maxValue) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName, "Value too height max: " + maxValue);
|
if (elem == null) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
|
final Long elemTyped = (Long) elem;
|
||||||
|
if (elemTyped > maxValue) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Value too height max: " + maxValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final Long minValue = AnnotationTools.getConstraintsMin(field);
|
final Long minValue = AnnotationTools.getConstraintsMin(field);
|
||||||
if (minValue != null) {
|
if (minValue != null) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final Long elemTyped = (Long) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped < minValue) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName, "Value too Low min: " + minValue);
|
if (elem == null) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
|
final Long elemTyped = (Long) elem;
|
||||||
|
if (elemTyped < minValue) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Value too Low min: " + minValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final ManyToOne annotationManyToOne = AnnotationTools.getManyToOne(field);
|
final ManyToOne annotationManyToOne = AnnotationTools.getManyToOne(field);
|
||||||
if (annotationManyToOne != null && annotationManyToOne.targetEntity() != null) {
|
if (annotationManyToOne != null && annotationManyToOne.targetEntity() != null) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final List<ConditionChecker> condCheckers = options.get(ConditionChecker.class);
|
final QueryOptions options) -> {
|
||||||
final Condition conditionCheck = condCheckers.isEmpty() ? null
|
final Object elem = field.get(data);
|
||||||
: condCheckers.get(0).toCondition();
|
if (elem == null) {
|
||||||
final long count = DataAccess.count(annotationManyToOne.targetEntity(), elem,
|
return;
|
||||||
conditionCheck);
|
}
|
||||||
if (count == 0) {
|
final List<ConditionChecker> condCheckers = options.get(ConditionChecker.class);
|
||||||
throw new InputException(baseName + fieldName,
|
final Condition conditionCheck = condCheckers.isEmpty() ? null
|
||||||
"Foreign element does not exist in the DB:" + elem);
|
: condCheckers.get(0).toCondition();
|
||||||
}
|
final long count = DataAccess.count(annotationManyToOne.targetEntity(), elem,
|
||||||
});
|
conditionCheck);
|
||||||
|
if (count == 0) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Foreign element does not exist in the DB:" + elem);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (type == Integer.class || type == int.class) {
|
} else if (type == Integer.class || type == int.class) {
|
||||||
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
||||||
if (maxValueRoot != null) {
|
if (maxValueRoot != null) {
|
||||||
final int maxValue = maxValueRoot.intValue();
|
final int maxValue = maxValueRoot.intValue();
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final Integer elemTyped = (Integer) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped > maxValue) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName, "Value too height max: " + maxValue);
|
if (elem == null) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
|
final Integer elemTyped = (Integer) elem;
|
||||||
|
if (elemTyped > maxValue) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Value too height max: " + maxValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final Long minValueRoot = AnnotationTools.getConstraintsMin(field);
|
final Long minValueRoot = AnnotationTools.getConstraintsMin(field);
|
||||||
if (minValueRoot != null) {
|
if (minValueRoot != null) {
|
||||||
final int minValue = minValueRoot.intValue();
|
final int minValue = minValueRoot.intValue();
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final Integer elemTyped = (Integer) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped < minValue) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName, "Value too Low min: " + minValue);
|
if (elem == null) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
|
final Integer elemTyped = (Integer) elem;
|
||||||
|
if (elemTyped < minValue) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Value too Low min: " + minValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final ManyToOne annotationManyToOne = AnnotationTools.getManyToOne(field);
|
final ManyToOne annotationManyToOne = AnnotationTools.getManyToOne(field);
|
||||||
if (annotationManyToOne != null && annotationManyToOne.targetEntity() != null) {
|
if (annotationManyToOne != null && annotationManyToOne.targetEntity() != null) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final long count = DataAccess.count(annotationManyToOne.targetEntity(), elem);
|
final QueryOptions options) -> {
|
||||||
if (count == 0) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName,
|
if (elem == null) {
|
||||||
"Foreign element does not exist in the DB:" + elem);
|
return;
|
||||||
}
|
}
|
||||||
});
|
final long count = DataAccess.count(annotationManyToOne.targetEntity(), elem);
|
||||||
|
if (count == 0) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Foreign element does not exist in the DB:" + elem);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (type == UUID.class) {
|
} else if (type == UUID.class) {
|
||||||
final ManyToOne annotationManyToOne = AnnotationTools.getManyToOne(field);
|
final ManyToOne annotationManyToOne = AnnotationTools.getManyToOne(field);
|
||||||
if (annotationManyToOne != null && annotationManyToOne.targetEntity() != null) {
|
if (annotationManyToOne != null && annotationManyToOne.targetEntity() != null) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final long count = DataAccess.count(annotationManyToOne.targetEntity(), elem);
|
final QueryOptions options) -> {
|
||||||
if (count == 0) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName,
|
if (elem == null) {
|
||||||
"Foreign element does not exist in the DB:" + elem);
|
return;
|
||||||
}
|
}
|
||||||
});
|
final long count = DataAccess.count(annotationManyToOne.targetEntity(), elem);
|
||||||
|
if (count == 0) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Foreign element does not exist in the DB:" + elem);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (type == Boolean.class || type == boolean.class) {
|
} else if (type == Boolean.class || type == boolean.class) {
|
||||||
|
|
||||||
@ -196,59 +253,83 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
|||||||
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
||||||
if (maxValueRoot != null) {
|
if (maxValueRoot != null) {
|
||||||
final float maxValue = maxValueRoot.floatValue();
|
final float maxValue = maxValueRoot.floatValue();
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final Float elemTyped = (Float) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped > maxValue) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName, "Value too height max: " + maxValue);
|
if (elem == null) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
|
final Float elemTyped = (Float) elem;
|
||||||
|
if (elemTyped > maxValue) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Value too height max: " + maxValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final Long minValueRoot = AnnotationTools.getConstraintsMin(field);
|
final Long minValueRoot = AnnotationTools.getConstraintsMin(field);
|
||||||
if (minValueRoot != null) {
|
if (minValueRoot != null) {
|
||||||
final float minValue = minValueRoot.floatValue();
|
final float minValue = minValueRoot.floatValue();
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final Float elemTyped = (Float) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped < minValue) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName, "Value too Low min: " + minValue);
|
if (elem == null) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
|
final Float elemTyped = (Float) elem;
|
||||||
|
if (elemTyped < minValue) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Value too Low min: " + minValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (type == Double.class || type == double.class) {
|
} else if (type == Double.class || type == double.class) {
|
||||||
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
final Long maxValueRoot = AnnotationTools.getConstraintsMax(field);
|
||||||
if (maxValueRoot != null) {
|
if (maxValueRoot != null) {
|
||||||
final double maxValue = maxValueRoot.doubleValue();
|
final double maxValue = maxValueRoot.doubleValue();
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final Double elemTyped = (Double) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped > maxValue) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName, "Value too height max: " + maxValue);
|
if (elem == null) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
|
final Double elemTyped = (Double) elem;
|
||||||
|
if (elemTyped > maxValue) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Value too height max: " + maxValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final Long minValueRoot = AnnotationTools.getConstraintsMin(field);
|
final Long minValueRoot = AnnotationTools.getConstraintsMin(field);
|
||||||
if (minValueRoot != null) {
|
if (minValueRoot != null) {
|
||||||
final double minValue = minValueRoot.doubleValue();
|
final double minValue = minValueRoot.doubleValue();
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final Double elemTyped = (Double) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped < minValue) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName, "Value too Low min: " + minValue);
|
if (elem == null) {
|
||||||
}
|
return;
|
||||||
});
|
}
|
||||||
|
final Double elemTyped = (Double) elem;
|
||||||
|
if (elemTyped < minValue) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Value too Low min: " + minValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (type == Date.class || type == Timestamp.class) {
|
} else if (type == Date.class || type == Timestamp.class) {
|
||||||
|
|
||||||
@ -259,51 +340,66 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
|||||||
} else if (type == String.class) {
|
} else if (type == String.class) {
|
||||||
final int maxSizeString = AnnotationTools.getLimitSize(field);
|
final int maxSizeString = AnnotationTools.getLimitSize(field);
|
||||||
if (maxSizeString > 0) {
|
if (maxSizeString > 0) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final String elemTyped = (String) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped.length() > maxSizeString) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName,
|
if (elem == null) {
|
||||||
"Too long size must be <= " + maxSizeString);
|
return;
|
||||||
}
|
}
|
||||||
});
|
final String elemTyped = (String) elem;
|
||||||
|
if (elemTyped.length() > maxSizeString) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Too long size must be <= " + maxSizeString);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final Size limitSize = AnnotationTools.getConstraintsSize(field);
|
final Size limitSize = AnnotationTools.getConstraintsSize(field);
|
||||||
if (limitSize != null) {
|
if (limitSize != null) {
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final String elemTyped = (String) elem;
|
final QueryOptions options) -> {
|
||||||
if (elemTyped.length() > limitSize.max()) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName,
|
if (elem == null) {
|
||||||
"Too long size (constraints) must be <= " + limitSize.max());
|
return;
|
||||||
}
|
}
|
||||||
if (elemTyped.length() < limitSize.min()) {
|
final String elemTyped = (String) elem;
|
||||||
throw new InputException(baseName + fieldName,
|
if (elemTyped.length() > limitSize.max()) {
|
||||||
"Too small size (constraints) must be >= " + limitSize.min());
|
throw new InputException(baseName + fieldName,
|
||||||
}
|
"Too long size (constraints) must be <= " + limitSize.max());
|
||||||
});
|
}
|
||||||
|
if (elemTyped.length() < limitSize.min()) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"Too small size (constraints) must be >= " + limitSize.min());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
final String patternString = AnnotationTools.getConstraintsPattern(field);
|
final String patternString = AnnotationTools.getConstraintsPattern(field);
|
||||||
if (patternString != null) {
|
if (patternString != null) {
|
||||||
final Pattern pattern = Pattern.compile(patternString);
|
final Pattern pattern = Pattern.compile(patternString);
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final Object elem = field.get(data);
|
(
|
||||||
if (elem == null) {
|
final String baseName,
|
||||||
return;
|
final T data,
|
||||||
}
|
final List<String> modifiedValue,
|
||||||
final String elemTyped = (String) elem;
|
final QueryOptions options) -> {
|
||||||
if (!pattern.matcher(elemTyped).find()) {
|
final Object elem = field.get(data);
|
||||||
throw new InputException(baseName + fieldName,
|
if (elem == null) {
|
||||||
"does not match the required pattern (constraints) must be '" + patternString
|
return;
|
||||||
+ "'");
|
}
|
||||||
}
|
final String elemTyped = (String) elem;
|
||||||
});
|
if (!pattern.matcher(elemTyped).find()) {
|
||||||
|
throw new InputException(baseName + fieldName,
|
||||||
|
"does not match the required pattern (constraints) must be '"
|
||||||
|
+ patternString + "'");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (type == JsonValue.class) {
|
} else if (type == JsonValue.class) {
|
||||||
final DataJson jsonAnnotation = AnnotationTools.getDataJson(field);
|
final DataJson jsonAnnotation = AnnotationTools.getDataJson(field);
|
||||||
@ -311,9 +407,14 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
|||||||
// Here if we have an error it crash at start and no new instance after creation...
|
// Here if we have an error it crash at start and no new instance after creation...
|
||||||
final CheckFunctionInterface instance = jsonAnnotation.checker().getDeclaredConstructor()
|
final CheckFunctionInterface instance = jsonAnnotation.checker().getDeclaredConstructor()
|
||||||
.newInstance();
|
.newInstance();
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
instance.checkAll(baseName + fieldName + ".", field.get(data), options);
|
(
|
||||||
});
|
final String baseName,
|
||||||
|
final T data,
|
||||||
|
final List<String> modifiedValue,
|
||||||
|
final QueryOptions options) -> {
|
||||||
|
instance.checkAll(baseName + fieldName + ".", field.get(data), options);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (type.isEnum()) {
|
} else if (type.isEnum()) {
|
||||||
// nothing to do.
|
// nothing to do.
|
||||||
@ -321,21 +422,26 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
|||||||
// keep this is last ==> take more time...
|
// keep this is last ==> take more time...
|
||||||
if (AnnotationTools.isUnique(field)) {
|
if (AnnotationTools.isUnique(field)) {
|
||||||
// Create the request ...
|
// Create the request ...
|
||||||
add(fieldName, (final String baseName, final T data, final QueryOptions options) -> {
|
add(fieldName,
|
||||||
final List<ConditionChecker> condCheckers = options.get(ConditionChecker.class);
|
(
|
||||||
Object other = null;
|
final String baseName,
|
||||||
if (condCheckers.isEmpty()) {
|
final T data,
|
||||||
other = DataAccess.getWhere(this.clazz,
|
final List<String> modifiedValue,
|
||||||
new Condition(new QueryCondition(fieldName, "==", field.get(data))));
|
final QueryOptions options) -> {
|
||||||
} else {
|
final List<ConditionChecker> condCheckers = options.get(ConditionChecker.class);
|
||||||
other = DataAccess.getWhere(this.clazz,
|
Object other = null;
|
||||||
new Condition(new QueryCondition(fieldName, "==", field.get(data))),
|
if (condCheckers.isEmpty()) {
|
||||||
condCheckers.get(0).toCondition());
|
other = DataAccess.getWhere(this.clazz,
|
||||||
}
|
new Condition(new QueryCondition(fieldName, "==", field.get(data))));
|
||||||
if (other != null) {
|
} else {
|
||||||
throw new InputException(baseName + fieldName, "Name already exist in the DB");
|
other = DataAccess.getWhere(this.clazz,
|
||||||
}
|
new Condition(new QueryCondition(fieldName, "==", field.get(data))),
|
||||||
});
|
condCheckers.get(0).toCondition());
|
||||||
|
}
|
||||||
|
if (other != null) {
|
||||||
|
throw new InputException(baseName + fieldName, "Name already exist in the DB");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -349,7 +455,7 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
|||||||
public void check(
|
public void check(
|
||||||
final String baseName,
|
final String baseName,
|
||||||
final Object data,
|
final Object data,
|
||||||
final List<String> filterValue,
|
final List<String> modifiedValue,
|
||||||
final QueryOptions options) throws Exception {
|
final QueryOptions options) throws Exception {
|
||||||
if (this.checking == null) {
|
if (this.checking == null) {
|
||||||
initialize();
|
initialize();
|
||||||
@ -359,19 +465,20 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
|||||||
}
|
}
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final T dataCasted = (T) data;
|
final T dataCasted = (T) data;
|
||||||
for (final String filter : filterValue) {
|
for (final String filter : modifiedValue) {
|
||||||
final List<CheckInterface<T>> actions = this.checking.get(filter);
|
final List<CheckInterface<T>> actions = this.checking.get(filter);
|
||||||
if (actions == null) {
|
if (actions == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (final CheckInterface<T> action : actions) {
|
for (final CheckInterface<T> action : actions) {
|
||||||
action.check(baseName, dataCasted, options);
|
action.check(baseName, dataCasted, modifiedValue, options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
checkTyped(dataCasted, filterValue, options);
|
checkTyped(dataCasted, modifiedValue, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkTyped(final T data, final List<String> filterValue, final QueryOptions options) throws Exception {
|
public void checkTyped(final T data, final List<String> modifiedValue, final QueryOptions options)
|
||||||
|
throws Exception {
|
||||||
// nothing to do ...
|
// nothing to do ...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user