package org.atdl4j.data; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.atdl4j.data.exception.ValidationException; import org.atdl4j.fixatdl.validation.StrategyEditT; import org.atdl4j.ui.Atdl4jWidget; import org.atdl4j.ui.impl.ControlHelper; public class StrategyRuleset { private Map<StrategyEditT, ValidationRule> refRules; private List<ValidationRule> requiredFieldRules; private List<ValidationRule> constFieldRules; private List<ValidationRule> rangeFieldRules; private List<ValidationRule> lengthFieldRules; private List<ValidationRule> patternRules; public void addRequiredFieldRule(ValidationRule editUI) { requiredFieldRules.add( editUI ); } public void addConstFieldRule(ValidationRule editUI) { constFieldRules.add( editUI ); } public void addRangeFieldRule(ValidationRule editUI) { rangeFieldRules.add( editUI ); } public void addLengthFieldRule(ValidationRule editUI) { lengthFieldRules.add( editUI ); } public void addPatternRule(ValidationRule editUI) { patternRules.add( editUI ); } public StrategyRuleset() { this.refRules = new HashMap<StrategyEditT, ValidationRule>(); this.requiredFieldRules = new ArrayList<ValidationRule>(); this.constFieldRules = new ArrayList<ValidationRule>(); this.rangeFieldRules = new ArrayList<ValidationRule>(); this.lengthFieldRules = new ArrayList<ValidationRule>(); this.patternRules = new ArrayList<ValidationRule>(); } public void putRefRule(StrategyEditT strategyEdit, ValidationRule rule) { this.refRules.put( strategyEdit, rule ); } public void validate(Map<String, ValidationRule> refRules, Map<String, Atdl4jWidget<?>> parameters) throws ValidationException { for ( ValidationRule requiredFieldRule : requiredFieldRules ) { try { requiredFieldRule.validate( refRules, parameters ); } catch (ValidationException e) { throw buildValidationException( e, " is required." ); } } for ( ValidationRule constFieldRule : constFieldRules ) { try { constFieldRule.validate( refRules, parameters ); } catch (ValidationException e) { throw buildValidationException( e, " must remain a constant value." ); } } for ( ValidationRule rangeFieldRule : rangeFieldRules ) { try { rangeFieldRule.validate( refRules, parameters ); } catch (ValidationException e) { throw buildValidationException( e, " is out of range (min/max bounds)." ); } } for ( ValidationRule lengthFieldRule : lengthFieldRules ) { try { lengthFieldRule.validate( refRules, parameters ); } catch (ValidationException e) { throw buildValidationException( e, " length is out of range (min/max bounds)." ); } } for ( ValidationRule patternRule : patternRules ) { try { patternRule.validate( refRules, parameters ); } catch (ValidationException e) { Atdl4jWidget<?> target = e.getTarget(); String type = target.getClass().toString(); throw buildValidationException( e, " of type " + type + " does not follow the required pattern." ); } } for ( Entry<StrategyEditT, ValidationRule> entry : this.refRules.entrySet() ) { StrategyEditT strategyEdit = entry.getKey(); ValidationRule rule = entry.getValue(); try { rule.validate( refRules, parameters ); } catch (ValidationException e) { String tempValuesChecked = ""; if ( e.getMessage() != null ) { tempValuesChecked = " " + e.getMessage(); } throw new ValidationException( e.getTarget(), strategyEdit.getErrorMessage() + tempValuesChecked ); } } } protected ValidationException buildValidationException( ValidationException aOriginalValidationException, String aMsgText ) { Atdl4jWidget<?> tempAtdl4jWidget = aOriginalValidationException.getTarget(); return new ValidationException( tempAtdl4jWidget, buildValidationExceptionText( aOriginalValidationException, aMsgText, tempAtdl4jWidget ) ); } protected String buildValidationExceptionText( ValidationException aOriginalValidationException, String aMsgText, Atdl4jWidget<?> aAtdl4jWidget ) { StringBuffer tempStringBuffer = new StringBuffer(); tempStringBuffer.append( "Parameter \"" + aAtdl4jWidget.getParameter().getName() + "\"" ); tempStringBuffer.append( " (\"" + ControlHelper.getLabelOrID( aAtdl4jWidget.getControl() ) + "\") " ); tempStringBuffer.append( aMsgText ); if ( aOriginalValidationException.getMessage() != null ) { tempStringBuffer.append( " " + aOriginalValidationException.getMessage() ); } return tempStringBuffer.toString(); } }