Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 2.92 KB | None | 0 0
  1. package com.satgate.IpgConf2.validation;
  2.  
  3. import javax.validation.Constraint;
  4. import javax.validation.Payload;
  5. import java.lang.annotation.Documented;
  6. import java.lang.annotation.Retention;
  7. import java.lang.annotation.Target;
  8. import java.lang.reflect.Method;
  9.  
  10. import static java.lang.annotation.ElementType.TYPE;
  11. import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
  12. import static java.lang.annotation.RetentionPolicy.RUNTIME;
  13.  
  14. @Target({TYPE,ANNOTATION_TYPE})
  15. @Retention(RUNTIME)
  16. @Constraint(validatedBy = UniqueValidator.class)
  17. @Documented
  18. public @interface Unique {
  19.     String message() default "{com.satgate.IpgConf2.validation.unique}";
  20.  
  21.     Class<?>[] groups() default {};
  22.  
  23.     Class<? extends Payload>[] payload() default { };
  24.  
  25.     String property();
  26. }
  27.  
  28.  
  29. package com.satgate.IpgConf2.validation;
  30.  
  31. import com.satgate.IpgConf2.dao.CommonRepository;
  32. import com.satgate.IpgConf2.dao.UserRepository;
  33. import com.satgate.IpgConf2.entity.AbstractSecureObject;
  34. import com.satgate.IpgConf2.security.User;
  35. import org.slf4j.Logger;
  36. import org.slf4j.LoggerFactory;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import org.springframework.beans.factory.annotation.Qualifier;
  39.  
  40. import javax.validation.ConstraintValidator;
  41. import javax.validation.ConstraintValidatorContext;
  42. import java.io.Serializable;
  43. import java.util.Collection;
  44.  
  45. public class UniqueValidator implements ConstraintValidator<Unique,Object>{
  46.     private Logger logger = LoggerFactory.getLogger(UniqueValidator.class);
  47.  
  48.     @Autowired
  49.     private CommonRepository commonRepository;
  50.  
  51.     private String uniqueField;
  52.  
  53.     @Override
  54.     public void initialize(Unique unique) {
  55.         uniqueField = unique.property();
  56.     }
  57.  
  58.     @Override
  59.     public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
  60.         try {
  61.             Collection<?> possibilities = commonRepository.getAllByField(value.getClass(),uniqueField,value.getClass().getField(uniqueField).get(value));
  62.             if (possibilities.isEmpty()) {
  63.                 //No entries - entry is unique
  64.                 return true;
  65.             }
  66.             if (possibilities.size()>1) {
  67.                 //Too much entries
  68.                 return false;
  69.             }
  70.  
  71.             //We have exactly one entry in the collection, and this entry could be our value
  72.             if (value instanceof AbstractSecureObject && possibilities.toArray()[0] instanceof AbstractSecureObject ) {
  73.                 if (((AbstractSecureObject)value).getId().equals(((AbstractSecureObject) possibilities.toArray()[0]).getId())) {
  74.                     return true; //It's the same object
  75.                 }
  76.             }
  77.             return false;
  78.         } catch (Exception e) {
  79.             logger.warn("No such field or other error in UniqueValidator, field: "+uniqueField+" class: "+value.getClass().getName());
  80.             return false;
  81.         }
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement