1 20 package org.enhydra.barracuda.core.forms.validators; 21 22 import java.util.*; 23 24 import org.enhydra.barracuda.core.forms.*; 25 import org.enhydra.barracuda.plankton.*; 26 27 33 public class ListValidator extends AbstractFormValidator { 34 35 protected FormValidator fv = null; 36 37 42 public ListValidator(FormValidator ifv) { 43 this(ifv, null); 44 } 45 46 52 public ListValidator(FormValidator ifv, String ierrmsg) { 53 setErrorMessage(ierrmsg); 54 fv = ifv; 55 } 56 57 62 public FormValidator getSubValidator() { 63 return fv; 64 } 65 66 79 public void validate(FormElement element, FormMap formMap, boolean deferExceptions) throws ValidationException { 80 if (localLogger.isDebugEnabled()) localLogger.debug("Validating one or more items"); 81 if (element.getOrigVal() instanceof List) { List origList = (List) element.getOrigVal(); for (int i=0; i<origList.size(); i++) { 86 FormElement newElement = this.getNewElement(i, element); 87 fv.validate((FormElement) newElement, formMap, deferExceptions); 88 } 89 } else if (fv!=null) { 90 fv.validate(element, formMap, deferExceptions); 91 } 92 } 93 94 95 101 private FormElement getNewElement(int index, FormElement element) { 102 DefaultFormElement newElement = new DefaultFormElement(); 103 Object origVal = ((List) element.getOrigVal()).get(index); Object val = ((List) element.getVal()).get(index); 108 newElement.setOrigVal(origVal); 109 newElement.setVal(val); 110 newElement.setKey(element.getKey()); 111 newElement.setName(element.getName()); 112 newElement.setType(element.getType()); 113 newElement.setDefaultVal(element.getDefaultVal()); 114 newElement.setAllowMultiples(false); 115 newElement.setValidator(fv); 116 117 try { 118 Class typeclass = newElement.getType().getFormClass(); 120 if (!typeclass.isInstance(origVal)) 121 element.getType().parse(origVal.toString()); 122 } catch (ParseException e) { 123 if (localLogger.isDebugEnabled()) localLogger.debug("ParseException:", e); 124 newElement.setParseException(e); 125 } 126 127 128 return (FormElement)newElement; 129 } 130 131 } 132 | Popular Tags |