Compare commits
3 Commits
3e81673d38
...
015c38ff5b
Author | SHA1 | Date | |
---|---|---|---|
015c38ff5b | |||
24590b2a1e | |||
c04660c01a |
@ -41,6 +41,24 @@ import jakarta.ws.rs.DefaultValue;
|
||||
public class AnnotationTools {
|
||||
static final Logger LOGGER = LoggerFactory.getLogger(AnnotationTools.class);
|
||||
|
||||
public static <TYPE extends Annotation> TYPE get(final Field element, final Class<TYPE> clazz) {
|
||||
final TYPE[] annotations = element.getDeclaredAnnotationsByType(clazz);
|
||||
|
||||
if (annotations.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return annotations[0];
|
||||
}
|
||||
|
||||
public static <TYPE extends Annotation> TYPE[] gets(final Field element, final Class<TYPE> clazz) {
|
||||
final TYPE[] annotations = element.getDeclaredAnnotationsByType(clazz);
|
||||
|
||||
if (annotations.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return annotations;
|
||||
}
|
||||
|
||||
// For SQL declaration table Name
|
||||
public static String getTableName(final Class<?> clazz, final QueryOptions options) throws DataAccessException {
|
||||
if (options != null) {
|
||||
@ -92,27 +110,15 @@ public class AnnotationTools {
|
||||
}
|
||||
|
||||
public static CollectionItemNotNull getCollectionItemNotNull(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(CollectionItemNotNull.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (CollectionItemNotNull) annotation[0];
|
||||
return get(element, CollectionItemNotNull.class);
|
||||
}
|
||||
|
||||
public static CollectionItemUnique getCollectionItemUnique(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(CollectionItemUnique.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (CollectionItemUnique) annotation[0];
|
||||
return get(element, CollectionItemUnique.class);
|
||||
}
|
||||
|
||||
public static CollectionNotEmpty getCollectionNotEmpty(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(CollectionNotEmpty.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (CollectionNotEmpty) annotation[0];
|
||||
return get(element, CollectionNotEmpty.class);
|
||||
}
|
||||
|
||||
public static boolean getSchemaReadOnly(final Field element) {
|
||||
@ -164,75 +170,39 @@ public class AnnotationTools {
|
||||
}
|
||||
|
||||
public static ManyToOne getManyToOne(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(ManyToOne.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (ManyToOne) annotation[0];
|
||||
return get(element, ManyToOne.class);
|
||||
}
|
||||
|
||||
public static ManyToMany getManyToMany(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(ManyToMany.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (ManyToMany) annotation[0];
|
||||
return get(element, ManyToMany.class);
|
||||
}
|
||||
|
||||
public static OneToMany getOneToMany(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(OneToMany.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (OneToMany) annotation[0];
|
||||
return get(element, OneToMany.class);
|
||||
}
|
||||
|
||||
public static DataJson getDataJson(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(DataJson.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (DataJson) annotation[0];
|
||||
return get(element, DataJson.class);
|
||||
}
|
||||
|
||||
public static Checker[] getConstraintsCheckers(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Checker.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (Checker[]) annotation;
|
||||
return gets(element, Checker.class);
|
||||
}
|
||||
|
||||
public static DecimalMin getConstraintsDecimalMin(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(DecimalMin.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return ((DecimalMin) annotation[0]);
|
||||
return get(element, DecimalMin.class);
|
||||
}
|
||||
|
||||
public static DecimalMax getConstraintsDecimalMax(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(DecimalMax.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return ((DecimalMax) annotation[0]);
|
||||
return get(element, DecimalMax.class);
|
||||
}
|
||||
|
||||
public static Max getConstraintsMax(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Max.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return ((Max) annotation[0]);
|
||||
return get(element, Max.class);
|
||||
}
|
||||
|
||||
public static Min getConstraintsMin(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Min.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return ((Min) annotation[0]);
|
||||
return get(element, Min.class);
|
||||
}
|
||||
|
||||
public static int getLimitSize(final Field element) {
|
||||
@ -245,27 +215,15 @@ public class AnnotationTools {
|
||||
}
|
||||
|
||||
public static Size getConstraintsSize(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Size.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (Size) annotation[0];
|
||||
return get(element, Size.class);
|
||||
}
|
||||
|
||||
public static Pattern getConstraintsPattern(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Pattern.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (Pattern) annotation[0];
|
||||
return get(element, Pattern.class);
|
||||
}
|
||||
|
||||
public static Email getConstraintsEmail(final Field element) {
|
||||
final Annotation[] annotation = element.getDeclaredAnnotationsByType(Email.class);
|
||||
if (annotation.length == 0) {
|
||||
return null;
|
||||
}
|
||||
return (Email) annotation[0];
|
||||
return get(element, Email.class);
|
||||
}
|
||||
|
||||
public static boolean isAnnotationGroup(final Field field, final Class<?> annotationType) {
|
||||
|
@ -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.TYPE, ElementType.FIELD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface CheckForeignKey {
|
||||
Class<?> target();
|
||||
}
|
@ -15,6 +15,7 @@ import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.kar.archidata.annotation.AnnotationTools;
|
||||
import org.kar.archidata.annotation.checker.CheckForeignKey;
|
||||
import org.kar.archidata.annotation.checker.Checker;
|
||||
import org.kar.archidata.annotation.checker.CollectionItemNotNull;
|
||||
import org.kar.archidata.annotation.checker.CollectionItemUnique;
|
||||
@ -651,6 +652,64 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
}
|
||||
}
|
||||
}
|
||||
final CheckForeignKey foreighKey = AnnotationTools.get(field, CheckForeignKey.class);
|
||||
if (foreighKey != null) {
|
||||
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 List<ConditionChecker> condCheckers = options.get(ConditionChecker.class);
|
||||
final Condition conditionCheck = condCheckers.isEmpty() ? null
|
||||
: condCheckers.get(0).toCondition();
|
||||
final Collection<?> tmpCollection = (Collection<?>) tmpData;
|
||||
final Object[] elements = tmpCollection.toArray();
|
||||
for (int iii = 0; iii < elements.length; iii++) {
|
||||
if (elements[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
final Long count = ioDb.count(foreighKey.target(), elements[iii],
|
||||
conditionCheck);
|
||||
if (count != 1) {
|
||||
throw new InputException(baseName + fieldName + '[' + iii + ']',
|
||||
"Foreign-key does not exist in the DB:" + elements[iii]);
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
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 List<ConditionChecker> condCheckers = options.get(ConditionChecker.class);
|
||||
final Condition conditionCheck = condCheckers.isEmpty() ? null
|
||||
: condCheckers.get(0).toCondition();
|
||||
final Long count = ioDb.count(foreighKey.target(), tmpData, conditionCheck);
|
||||
if (count != 1) {
|
||||
throw new InputException(baseName + fieldName,
|
||||
"Foreign-key does not exist in the DB:" + tmpData);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// check if we really want to keep it ...
|
||||
final ManyToOne annotationManyToOne = AnnotationTools.getManyToOne(field);
|
||||
if (annotationManyToOne != null && annotationManyToOne.targetEntity() != null) {
|
||||
add(fieldName,
|
||||
|
@ -260,14 +260,17 @@ public class TsClassElement {
|
||||
final Class<?> clazz = field.model().getOriginClasses();
|
||||
if (clazz == String.class) {
|
||||
if (field.stringSize() != null) {
|
||||
builder.append(".min(");
|
||||
builder.append(field.stringSize().min());
|
||||
builder.append(")");
|
||||
}
|
||||
if (field.stringSize() != null) {
|
||||
builder.append(".max(");
|
||||
builder.append(field.stringSize().max());
|
||||
builder.append(")");
|
||||
if (field.stringSize().min() > 0) {
|
||||
// A string size can not be lower at 0
|
||||
builder.append(".min(");
|
||||
builder.append(field.stringSize().min());
|
||||
builder.append(")");
|
||||
}
|
||||
if (field.stringSize().max() != Integer.MAX_VALUE) {
|
||||
builder.append(".max(");
|
||||
builder.append(field.stringSize().max());
|
||||
builder.append(")");
|
||||
}
|
||||
}
|
||||
/*Must be tested before
|
||||
if (field.pattern() != null) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user