package io.monokkel.core.utils; import io.monokkel.exceptions.ValidationError; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.xml.bind.ValidationException; import java.util.ArrayList; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import static io.monokkel.core.utils.ParserUtils.isAValidJsonBaseType; /** * Created by tarjei on 20/09/14. */ public class ValidatorFunction implements MapTransformationFunction<String,Object> { private Logger log = LoggerFactory.getLogger(ValidatorFunction.class); private class MatchAllExpression {} @Override public Object transform(String key, Object value, Map<String, Object> validationMap) { final Object validationObject = validationMap.getOrDefault(key,MatchAllExpression.class); if (validationObject instanceof String){ String validateExpression = (String)validationObject; Pattern pattern = Pattern.compile(validateExpression); final Matcher matcher = pattern.matcher(value.toString()); final boolean patternMatches = matcher.matches(); if(!patternMatches){ log.debug("Pattern {} do no match value {}",validateExpression,value); throw new ValidationError(key, value.toString(), validateExpression); } else { log.debug("Pattern {} match value {}",validateExpression,value); return patternMatches; } } else if(validationObject instanceof ArrayList){ log.warn("Your configuration seem to have a list in its validator configuration. This functionality is not supported yet", validationObject); return true; } else { // No legal expression for the field is available in the validation map, the // default is to return valid element. return true; } } }