Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.satgate.IpgConf2.validation;
- import javax.validation.Constraint;
- import javax.validation.Payload;
- import java.lang.annotation.Documented;
- import java.lang.annotation.Retention;
- import java.lang.annotation.Target;
- import java.lang.reflect.Method;
- import static java.lang.annotation.ElementType.TYPE;
- import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
- import static java.lang.annotation.RetentionPolicy.RUNTIME;
- @Target({TYPE,ANNOTATION_TYPE})
- @Retention(RUNTIME)
- @Constraint(validatedBy = UniqueValidator.class)
- @Documented
- public @interface Unique {
- String message() default "{com.satgate.IpgConf2.validation.unique}";
- Class<?>[] groups() default {};
- Class<? extends Payload>[] payload() default { };
- String property();
- }
- package com.satgate.IpgConf2.validation;
- import com.satgate.IpgConf2.dao.CommonRepository;
- import com.satgate.IpgConf2.dao.UserRepository;
- import com.satgate.IpgConf2.entity.AbstractSecureObject;
- import com.satgate.IpgConf2.security.User;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Qualifier;
- import javax.validation.ConstraintValidator;
- import javax.validation.ConstraintValidatorContext;
- import java.io.Serializable;
- import java.util.Collection;
- public class UniqueValidator implements ConstraintValidator<Unique,Object>{
- private Logger logger = LoggerFactory.getLogger(UniqueValidator.class);
- @Autowired
- private CommonRepository commonRepository;
- private String uniqueField;
- @Override
- public void initialize(Unique unique) {
- uniqueField = unique.property();
- }
- @Override
- public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
- try {
- Collection<?> possibilities = commonRepository.getAllByField(value.getClass(),uniqueField,value.getClass().getField(uniqueField).get(value));
- if (possibilities.isEmpty()) {
- //No entries - entry is unique
- return true;
- }
- if (possibilities.size()>1) {
- //Too much entries
- return false;
- }
- //We have exactly one entry in the collection, and this entry could be our value
- if (value instanceof AbstractSecureObject && possibilities.toArray()[0] instanceof AbstractSecureObject ) {
- if (((AbstractSecureObject)value).getId().equals(((AbstractSecureObject) possibilities.toArray()[0]).getId())) {
- return true; //It's the same object
- }
- }
- return false;
- } catch (Exception e) {
- logger.warn("No such field or other error in UniqueValidator, field: "+uniqueField+" class: "+value.getClass().getName());
- return false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement