package org.jsondoc.core.util; import java.lang.reflect.Field; import javax.validation.constraints.AssertFalse; import javax.validation.constraints.AssertTrue; import javax.validation.constraints.DecimalMax; import javax.validation.constraints.DecimalMin; import javax.validation.constraints.Digits; import javax.validation.constraints.Future; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Null; import javax.validation.constraints.Past; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import org.hibernate.validator.constraints.CreditCardNumber; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotBlank; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; import org.hibernate.validator.constraints.URL; import org.jsondoc.core.pojo.ApiObjectFieldDoc; public class JSONDocHibernateValidatorProcessor { private final static String AssertFalse_message = "must be false"; private final static String AssertTrue_message = "must be true"; private final static String DecimalMax_message = "must be less than %s %s"; private final static String DecimalMin_message = "must be greater than %s %s"; private final static String Digits_message = "numeric value made of <%s digits>.<%s digits>)"; private final static String Future_message = "must be in the future"; private final static String Max_message = "must be less than or equal to %s"; private final static String Min_message = "must be greater than or equal to %s"; private final static String NotNull_message = "may not be null"; private final static String Null_message = "must be null"; private final static String Past_message = "must be in the past"; private final static String Pattern_message = "must match %s"; private final static String Size_message = "size must be between %s and %s"; private final static String Email_message = "must be a well-formed email address"; private final static String Length_message = "length must be between %s and %s"; private final static String NotBlank_message = "may not be empty"; private final static String NotEmpty_message = "may not be empty"; private final static String Range_message = "must be between %s and %s"; private final static String URL_message = "must be a valid URL"; private final static String CreditCardNumber_message = "must be a valid credit card number"; private final static String ScriptAssert_message = "script expression %s didn't evaluate to true"; public static void processHibernateValidatorAnnotations(Field field, ApiObjectFieldDoc apiPojoFieldDoc) { try { Class.forName("org.hibernate.validator.constraints.NotBlank"); if (field.isAnnotationPresent(AssertFalse.class)) { apiPojoFieldDoc.addFormat(AssertFalse_message); } if (field.isAnnotationPresent(AssertTrue.class)) { apiPojoFieldDoc.addFormat(AssertTrue_message); } if (field.isAnnotationPresent(NotNull.class)) { apiPojoFieldDoc.addFormat(NotNull_message); } if (field.isAnnotationPresent(Null.class)) { apiPojoFieldDoc.addFormat(Null_message); } if (field.isAnnotationPresent(Size.class)) { Size annotation = field.getAnnotation(Size.class); apiPojoFieldDoc.addFormat(String.format(Size_message, annotation.min(), annotation.max())); } if (field.isAnnotationPresent(NotBlank.class)) { apiPojoFieldDoc.addFormat(NotBlank_message); } if (field.isAnnotationPresent(NotEmpty.class)) { apiPojoFieldDoc.addFormat(NotEmpty_message); } if (field.isAnnotationPresent(Length.class)) { Length annotation = field.getAnnotation(Length.class); apiPojoFieldDoc.addFormat(String.format(Length_message, annotation.min(), annotation.max())); } if (field.isAnnotationPresent(Range.class)) { Range annotation = field.getAnnotation(Range.class); apiPojoFieldDoc.addFormat(String.format(Range_message, annotation.min(), annotation.max())); } if (field.isAnnotationPresent(DecimalMax.class)) { DecimalMax annotation = field.getAnnotation(DecimalMax.class); apiPojoFieldDoc.addFormat(String.format(DecimalMax_message, annotation.inclusive() ? "or equal to" : "", annotation.value())); } if (field.isAnnotationPresent(DecimalMin.class)) { DecimalMin annotation = field.getAnnotation(DecimalMin.class); apiPojoFieldDoc.addFormat(String.format(DecimalMin_message, annotation.inclusive() ? "or equal to" : "", annotation.value())); } if (field.isAnnotationPresent(Future.class)) { apiPojoFieldDoc.addFormat(Future_message); } if (field.isAnnotationPresent(Past.class)) { apiPojoFieldDoc.addFormat(Past_message); } if (field.isAnnotationPresent(Digits.class)) { Digits annotation = field.getAnnotation(Digits.class); apiPojoFieldDoc.addFormat(String.format(Digits_message, annotation.integer(), annotation.fraction())); } if (field.isAnnotationPresent(Max.class)) { Max annotation = field.getAnnotation(Max.class); apiPojoFieldDoc.addFormat(String.format(Max_message, annotation.value())); } if (field.isAnnotationPresent(Min.class)) { Min annotation = field.getAnnotation(Min.class); apiPojoFieldDoc.addFormat(String.format(Min_message, annotation.value())); } if (field.isAnnotationPresent(Pattern.class)) { Pattern annotation = field.getAnnotation(Pattern.class); apiPojoFieldDoc.addFormat(String.format(Pattern_message, annotation.regexp())); } if (field.isAnnotationPresent(Email.class)) { apiPojoFieldDoc.addFormat(Email_message); } if (field.isAnnotationPresent(URL.class)) { apiPojoFieldDoc.addFormat(URL_message); } if (field.isAnnotationPresent(CreditCardNumber.class)) { apiPojoFieldDoc.addFormat(CreditCardNumber_message); } } catch (ClassNotFoundException e) { // nothing to do here } } }