package org.atdl4j.data.validation;
import java.util.Map;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
import org.atdl4j.data.ValidationRule;
import org.atdl4j.data.exception.ValidationException;
import org.atdl4j.ui.Atdl4jWidget;
/**
* Validator that validates input against a regular expression.
*
* @author renato.gallart
*/
public class PatternValidationRule
implements ValidationRule
{
private static final Logger logger = Logger.getLogger( PatternValidationRule.class );
private String field;
private String pattern;
public PatternValidationRule(String field, String pattern)
{
this.field = field;
this.pattern = pattern;
String tempMsg = "PatternValidationRule constructor: field: " + field + " pattern: " + pattern;
logger.debug( tempMsg );
logger.trace( tempMsg, new Exception( "Stack trace" ) );
}
public void validate(Map<String, ValidationRule> refRules, Map<String, Atdl4jWidget<?>> targets)
throws ValidationException
{
// get the widget from context using field name
Atdl4jWidget<?> target = targets.get( field );
if ( target == null )
{
String tempMsg = "No parameter defined for field \"" + field + "\" in this context (PatternValidationRule) field: " + field + " pattern: "
+ pattern;
logger.debug( tempMsg );
logger.trace( tempMsg, new Exception( "Stack trace" ) );
throw new ValidationException( null, tempMsg );
}
// PatternRules always validate against a parameter,
// so no need to fetch control value
String value = target.getParameterFixWireValue();
if ( value != null && !Pattern.matches( this.pattern, value ) )
{
throw new ValidationException( target, "Rule tested: [" + value + " pattern match: " + this.pattern + "]" );
}
}
}