package com.bitmonlab.osiris.core.validations.validator;
import java.util.Collection;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Named;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import com.bitmonlab.osiris.core.validations.rest.violationProcessor.InvalidParametersException;
@Named
public class Validations {
private static final String EMAIL_PATTERN =
"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
public void checkIsNotNull(Object... objects){
for(Object object: objects){
if(object==null){
throw new InvalidParametersException("Passed parameter can not be null");
}
}
}
public void checkIsNotNullAndNotBlank(String... objects){
checkIsNotNull((Object[])objects);
for(String object: objects){
object=object.trim();
if(object.length()==0){
throw new InvalidParametersException("Passed parameter can not be blank");
}
}
}
public void checkIsEmail(String... objects){
checkIsNotNullAndNotBlank(objects);
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
for(String object: objects){
Matcher matcher = pattern.matcher(object);
boolean isEmail=matcher.matches();
if(!isEmail){
throw new InvalidParametersException("Passed parameter with value "+ object +" must be an email");
}
}
}
public void checkMin(Integer minValue,Integer...objects){
checkIsNotNull((Object[])objects);
for(Integer object: objects){
if(object<minValue){
throw new InvalidParametersException("Passed parameter with value "+ object +" is less than "+minValue);
}
}
}
public void checkMin(Double minValue,Double...objects){
checkIsNotNull((Object[])objects);
for(Double object: objects){
if(object<minValue){
throw new InvalidParametersException("Passed parameter with value "+ object +" is less than "+minValue);
}
}
}
public void checkMax(Double maxValue,Double...objects){
checkIsNotNull((Object[])objects);
for(Double object: objects){
if(object>maxValue){
throw new InvalidParametersException("Passed parameter with value "+ object +"is greater than "+maxValue);
}
}
}
public void checkCollection(Collection<?> collection){
checkIsNotNull(collection);
checkCollectionIsNotEmpty(collection);
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
for(Object object:collection){
Set<ConstraintViolation<Object>> validation = validator.validate(object);
if (validation.size() > 0) {
throw new InvalidParametersException("Passed collection is not correct");
}
}
}
private void checkCollectionIsNotEmpty(Collection<?> collection){
boolean isEmpty=collection.isEmpty();
if(isEmpty){
throw new InvalidParametersException("Passed collection can not be empty");
}
}
}