package com.blazebit.validation.constraint;
import com.blazebit.validation.constraint.validator.CheckCompareValidator;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Comparator;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
*
* @author Christian Beikov
*
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CheckCompareValidator.class)
@Documented
public @interface CheckCompare {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
/**
*
* @return
*/
String[] value();
/**
*
* @return
*/
ComparisonMode mode() default ComparisonMode.EQUAL;
/**
*
* @return
*/
Class<? extends Comparator<?>> comparator() default EqualsComparator.class;
/**
* Defines several @CheckCompare annotations on the same element
*
* @see (@link CheckCompare}
*/
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE,
ElementType.CONSTRUCTOR, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface List {
CheckCompare[] value();
}
class EqualsComparator implements Comparator<Object> {
@Override
public int compare(Object o1, Object o2) {
if (o1 == o2) {
return 0;
}
if (o1 == null || o2 == null) {
return -1;
}
return o1.equals(o2) ? 0 : -1;
}
}
}