diff --git a/pom.xml b/pom.xml
index f7ebc14..7466fae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,6 +85,10 @@
org.glassfish.jersey.containers
jersey-container-grizzly2-http
+
+ org.glassfish.jersey.ext
+ jersey-bean-validation
+
javax.xml.bind
jaxb-api
@@ -246,7 +250,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 4.0.0-beta-2
+ 3.14.0
21
21
diff --git a/src/org/kar/archidata/annotation/checker/CheckForeignKey.java b/src/org/kar/archidata/annotation/checker/CheckForeignKey.java
index b1550ea..cc393af 100644
--- a/src/org/kar/archidata/annotation/checker/CheckForeignKey.java
+++ b/src/org/kar/archidata/annotation/checker/CheckForeignKey.java
@@ -5,8 +5,18 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-@Target({ ElementType.TYPE, ElementType.FIELD })
+import jakarta.validation.Constraint;
+import jakarta.validation.Payload;
+
+@Constraint(validatedBy = CheckForeignKeyValidator.class)
+@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckForeignKey {
Class> target();
+
+ String message() default "Foreign-key does not exist in the DB";
+
+ Class>[] groups() default {};
+
+ Class extends Payload>[] payload() default {};
}
diff --git a/src/org/kar/archidata/annotation/checker/CheckForeignKeyValidator.java b/src/org/kar/archidata/annotation/checker/CheckForeignKeyValidator.java
new file mode 100644
index 0000000..4ba36b2
--- /dev/null
+++ b/src/org/kar/archidata/annotation/checker/CheckForeignKeyValidator.java
@@ -0,0 +1,43 @@
+package org.kar.archidata.annotation.checker;
+
+import java.util.Collection;
+
+import org.kar.archidata.dataAccess.DataAccess;
+
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+
+public class CheckForeignKeyValidator implements ConstraintValidator {
+ Class> target = null;
+
+ @Override
+ public void initialize(final CheckForeignKey annotation) {
+ this.target = annotation.target();
+ }
+
+ @Override
+ public boolean isValid(final Object value, final ConstraintValidatorContext context) {
+ if (value != null) {
+ return true;
+ }
+ if (value instanceof final Collection> tmpCollection) {
+ final Object[] elements = tmpCollection.toArray();
+ for (final Object element : elements) {
+ if (element == null) {
+ continue;
+ }
+ try {
+ final long count = DataAccess.count(this.target, element);
+ if (count != 1) {
+ return false;
+
+ }
+ } catch (final Exception e) {
+ // TODO ...
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/org/kar/archidata/annotation/checker/CollectionItemNotNull.java b/src/org/kar/archidata/annotation/checker/CollectionItemNotNull.java
index 77b9c2c..bf2589c 100644
--- a/src/org/kar/archidata/annotation/checker/CollectionItemNotNull.java
+++ b/src/org/kar/archidata/annotation/checker/CollectionItemNotNull.java
@@ -5,8 +5,16 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-@Target(ElementType.FIELD)
+import jakarta.validation.Constraint;
+import jakarta.validation.Payload;
+
+@Constraint(validatedBy = CollectionItemNotNullValidator.class)
+@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface CollectionItemNotNull {
+ String message() default "Collection can not contain NULL item";
+ Class>[] groups() default {};
+
+ Class extends Payload>[] payload() default {};
}
diff --git a/src/org/kar/archidata/annotation/checker/CollectionItemNotNullValidator.java b/src/org/kar/archidata/annotation/checker/CollectionItemNotNullValidator.java
new file mode 100644
index 0000000..a6fe8b3
--- /dev/null
+++ b/src/org/kar/archidata/annotation/checker/CollectionItemNotNullValidator.java
@@ -0,0 +1,31 @@
+package org.kar.archidata.annotation.checker;
+
+import java.util.Collection;
+
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+
+public class CollectionItemNotNullValidator implements ConstraintValidator {
+
+ @Override
+ public void initialize(final CollectionItemNotNull annotation) {
+ // nothing to do...
+ }
+
+ @Override
+ public boolean isValid(final Object value, final ConstraintValidatorContext context) {
+ if (value == null) {
+ return true;
+ }
+ if (value instanceof final Collection> tmpCollection) {
+ final Object[] elements = tmpCollection.toArray();
+ for (final Object element : elements) {
+ if (element == null) {
+ return false;
+ //throw new InputException(baseName + fieldName + '[' + iii + ']', "Collection can not contain NULL item");
+ }
+ }
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/org/kar/archidata/annotation/checker/CollectionItemUnique.java b/src/org/kar/archidata/annotation/checker/CollectionItemUnique.java
index 3b905e2..7a4c5de 100644
--- a/src/org/kar/archidata/annotation/checker/CollectionItemUnique.java
+++ b/src/org/kar/archidata/annotation/checker/CollectionItemUnique.java
@@ -5,8 +5,17 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-@Target(ElementType.FIELD)
+import jakarta.validation.Constraint;
+import jakarta.validation.Payload;
+
+@Constraint(validatedBy = CollectionItemUniqueValidator.class)
+@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface CollectionItemUnique {
+ String message() default "Cannot insert multiple times the same elements";
+
+ Class>[] groups() default {};
+
+ Class extends Payload>[] payload() default {};
}
diff --git a/src/org/kar/archidata/annotation/checker/CollectionItemUniqueValidator.java b/src/org/kar/archidata/annotation/checker/CollectionItemUniqueValidator.java
new file mode 100644
index 0000000..a93701a
--- /dev/null
+++ b/src/org/kar/archidata/annotation/checker/CollectionItemUniqueValidator.java
@@ -0,0 +1,30 @@
+package org.kar.archidata.annotation.checker;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+
+public class CollectionItemUniqueValidator implements ConstraintValidator {
+
+ @Override
+ public void initialize(final CollectionItemUnique annotation) {
+ // nothing to do...
+ }
+
+ @Override
+ public boolean isValid(final Object value, final ConstraintValidatorContext context) {
+ if (value == null) {
+ return true;
+ }
+ if (value instanceof final Collection> tmpCollection) {
+ final Set