Author: tchemit Date: 2009-01-20 19:39:17 +0000 (Tue, 20 Jan 2009) New Revision: 1172 Added: jaxx/trunk/jaxx-runtime-validator/src/main/java/jaxx/runtime/validator/field/CollectionFieldExpressionValidator.java jaxx/trunk/jaxx-runtime-validator/src/main/resources/validators.xml jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/AbstractValidatorTest.java jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/CollectionFieldExpressionValidatorTest.java jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ExistingDirectoryFieldValidatorTest.java jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ExistingFileFieldValidatorTest.java jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/NotExistingDirectoryFieldValidatorTest.java jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/NotExistingFileFieldValidatorTest.java jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/RequiredFileFieldValidatorTest.java jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ValidatorBean.java jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/runtime/ jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/runtime/validator/ jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/runtime/validator/field/ jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/runtime/validator/field/ValidatorBean-validation.xml Removed: jaxx/trunk/jaxx-runtime-validator/src/main/resources/validators.xml jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/junit/ValidatorBean.java jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/junit/ValidatorBean-validation.xml Modified: jaxx/trunk/jaxx-runtime-validator/changelog.txt jaxx/trunk/jaxx-runtime-validator/src/test/resources/log4j.properties Log: - improve validators tests (one test by validator with a common AbstractValidatorTest super class) - add a CollectionFieldExpressionValidator to validate a collection of a bean Modified: jaxx/trunk/jaxx-runtime-validator/changelog.txt =================================================================== --- jaxx/trunk/jaxx-runtime-validator/changelog.txt 2009-01-19 12:57:33 UTC (rev 1171) +++ jaxx/trunk/jaxx-runtime-validator/changelog.txt 2009-01-20 19:39:17 UTC (rev 1172) @@ -1,3 +1,7 @@ +1.1 chemit 200901?? +* 20090120 [chemit] - improve validators tests (one test by validator with a common AbstractValidatorTest super class) + - add a CollectionFieldExpressionValidator to validate a collection of a bean + 1.0 chemit 20090111 * 20090111 [chemit] - integrate new architecture to allow to have runtime code with NO link with compiler :) * 20090111 [chemit] - add parent attribute on BeanValidator to chain validators Added: jaxx/trunk/jaxx-runtime-validator/src/main/java/jaxx/runtime/validator/field/CollectionFieldExpressionValidator.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/main/java/jaxx/runtime/validator/field/CollectionFieldExpressionValidator.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/main/java/jaxx/runtime/validator/field/CollectionFieldExpressionValidator.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,192 @@ +package jaxx.runtime.validator.field; + +import com.opensymphony.xwork2.validator.ValidationException; +import com.opensymphony.xwork2.validator.validators.FieldExpressionValidator; + +import java.util.Collection; + +/** + * Un validateur basé sur {@link FieldExpressionValidator} qui valide sur une collection de propriéte. + * + * @author chemit + */ +public class CollectionFieldExpressionValidator extends FieldExpressionValidator { + + + public enum Mode { + /** au moins une entrée de la collection doit etre valide */ + AT_LEAST_ONE, + /** exactement une entrée dela collection doit être valide */ + EXACTLY_ONE, + /** toutes les valeurs de la collection doivent etre valides */ + ALL, + /** aucune valeur de la collection doivent etre valides */ + NONE + } + + /** le mode de validation sur la liste */ + protected Mode mode; + + public Mode getMode() { + return mode; + } + + public void setMode(Mode mode) { + this.mode = mode; + } + + public void setMode(String mode) { + this.mode = Mode.valueOf(mode); + } + + @Override + public void validate(Object object) throws ValidationException { + if (mode == null) { + throw new ValidationException("no mode was setted"); + } + + String fieldName = getFieldName(); + + Collection<?> col = getCollection(object); + + boolean answer; + + switch (mode) { + case ALL: + answer = validateAllEntries(col); + break; + case AT_LEAST_ONE: + answer = validateAtLeastOneEntry(col); + break; + case EXACTLY_ONE: + answer = validateExtacltyOneEntry(col); + break; + case NONE: + answer = validateNoneEntry(col); + break; + + default: + // should never come here... + answer = false; + } + + if (!answer) { + addFieldError(fieldName, object); + } + } + + protected Boolean validateAllEntries(Collection<?> col) throws ValidationException { + boolean answer = true; + for (Object entry : col) { + answer = validateOneEntry(entry); + if (!answer) { + // validation on one entry has failed + // no need to continue + break; + } + } + return answer; + } + + protected Boolean validateNoneEntry(Collection<?> col) throws ValidationException { + boolean answer = true; + for (Object entry : col) { + boolean b = validateOneEntry(entry); + if (b) { + // one entry has sucessed, validation has failed + // no need to continue + answer = false; + break; + } + } + return answer; + } + + protected Boolean validateAtLeastOneEntry(Collection<?> col) throws ValidationException { + boolean answer = false; + for (Object entry : col) { + answer = validateOneEntry(entry); + if (answer) { + // one entry was succes, validation is ok, + // no need to continue + break; + } + } + return answer; + } + + protected Boolean validateExtacltyOneEntry(Collection<?> col) throws ValidationException { + int count = 0; + for (Object entry : col) { + boolean answer = validateOneEntry(entry); + if (answer) { + // one entry has succed + count++; + if (count > 1) { + // more than one entriy was successfull + // so validation has failed + break; + } + + } + } + return count == 1; + } + + protected boolean validateOneEntry(Object object) throws ValidationException { + // obtain the validation of one entry of the collection + Object obj = null; + try { + obj = getFieldValue(getExpression(), object); + } catch (ValidationException e) { + throw e; + } catch (Exception e) { + // let this pass, but it will be logged right below + } + + Boolean answer = Boolean.FALSE; + + if (obj != null && obj instanceof Boolean) { + answer = (Boolean) obj; + } else { + log.warn("Got result of " + obj + " when trying to get Boolean."); + } + return answer; + } + + /** + * @param object the incoming object containing the collection to test + * @return the collection of the incoming object given by the fieldName property + * @throws ValidationException if any pb to retreave the collection + */ + protected Collection<?> getCollection(Object object) throws ValidationException { + String fieldName = getFieldName(); + + Object obj = null; + + // obtain the collection to test + try { + obj = getFieldValue(fieldName, object); + } catch (ValidationException e) { + throw e; + } catch (Exception e) { + // let this pass, but it will be logged right below + } + + if (obj == null) { + // la collection est nulle, donc on renvoie une collection vide + return java.util.Collections.EMPTY_LIST; + } + + if (!Collection.class.isInstance(obj)) { + throw new ValidationException("field " + fieldName + " is not a collection type! (" + obj.getClass() + ")"); + } + return (Collection<?>) obj; + } + + @Override + public String getValidatorType() { + return "collectionFieldExpression"; + } + +} Deleted: jaxx/trunk/jaxx-runtime-validator/src/main/resources/validators.xml =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/main/resources/validators.xml 2009-01-19 12:57:33 UTC (rev 1171) +++ jaxx/trunk/jaxx-runtime-validator/src/main/resources/validators.xml 2009-01-20 19:39:17 UTC (rev 1172) @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE validators PUBLIC - "-//OpenSymphony Group//XWork Validator Config 1.0//EN" - "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd"> - -<!-- START SNIPPET: validators --> -<validators> - <validator name="requiredFile" class="jaxx.runtime.validator.field.RequiredFileFieldValidator"/> - <validator name="existingFile" class="jaxx.runtime.validator.field.ExistingFileFieldValidator"/> - <validator name="notExistingFile" class="jaxx.runtime.validator.field.NotExistingFileFieldValidator"/> - <validator name="existingDirectory" class="jaxx.runtime.validator.field.ExistingDirectoryFieldValidator"/> - <validator name="notExistingDirectory" class="jaxx.runtime.validator.field.NotExistingDirectoryFieldValidator"/> -</validators> -<!-- END SNIPPET: validators --> Added: jaxx/trunk/jaxx-runtime-validator/src/main/resources/validators.xml =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/main/resources/validators.xml (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/main/resources/validators.xml 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE validators PUBLIC + "-//OpenSymphony Group//XWork Validator Config 1.0//EN" + "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd"> + +<!-- START SNIPPET: validators --> +<validators> + <validator name="requiredFile" class="jaxx.runtime.validator.field.RequiredFileFieldValidator"/> + <validator name="existingFile" class="jaxx.runtime.validator.field.ExistingFileFieldValidator"/> + <validator name="notExistingFile" class="jaxx.runtime.validator.field.NotExistingFileFieldValidator"/> + <validator name="existingDirectory" class="jaxx.runtime.validator.field.ExistingDirectoryFieldValidator"/> + <validator name="notExistingDirectory" class="jaxx.runtime.validator.field.NotExistingDirectoryFieldValidator"/> + <validator name="collectionFieldExpression" + class="jaxx.runtime.validator.field.CollectionFieldExpressionValidator"/> +</validators> + <!-- END SNIPPET: validators --> Deleted: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/junit/ValidatorBean.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/junit/ValidatorBean.java 2009-01-19 12:57:33 UTC (rev 1171) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/junit/ValidatorBean.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -1,78 +0,0 @@ -package jaxx.junit; - -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; -import java.io.File; - -public class ValidatorBean { - - protected File existingFile; - protected File notExistingFile; - - protected File existingDirectory; - protected File notExistingDirectory; - - PropertyChangeSupport p; - - public ValidatorBean() { - p = new PropertyChangeSupport(this); - } - - public void addPropertyChangeListener(PropertyChangeListener listener) { - p.addPropertyChangeListener(listener); - } - - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - p.addPropertyChangeListener(propertyName, listener); - } - - public void removePropertyChangeListener(PropertyChangeListener listener) { - p.removePropertyChangeListener(listener); - } - - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - p.removePropertyChangeListener(propertyName, listener); - } - - - public File getExistingFile() { - return existingFile; - } - - public File getNotExistingFile() { - return notExistingFile; - } - - public File getExistingDirectory() { - return existingDirectory; - } - - public File getNotExistingDirectory() { - return notExistingDirectory; - } - - public void setExistingFile(File existingFile) { - File old = this.existingFile; - this.existingFile = existingFile; - p.firePropertyChange("existingFile", old, existingFile); - } - - public void setNotExistingFile(File notExistingFile) { - File old = this.notExistingFile; - this.notExistingFile = notExistingFile; - p.firePropertyChange("notExistingFile", old, notExistingFile); - } - - public void setExistingDirectory(File existingDirectory) { - File old = this.existingDirectory; - this.existingDirectory = existingDirectory; - p.firePropertyChange("existingDirectory", old, existingDirectory); - } - - public void setNotExistingDirectory(File notExistingDirectory) { - File old = this.notExistingDirectory; - this.notExistingDirectory = notExistingDirectory; - p.firePropertyChange("notExistingDirectory", old, notExistingDirectory); - } - -} \ No newline at end of file Added: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/AbstractValidatorTest.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/AbstractValidatorTest.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/AbstractValidatorTest.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,72 @@ +package jaxx.runtime.validator.field; + +import jaxx.runtime.validator.BeanValidator; +import jaxx.runtime.validator.BeanValidatorError; +import jaxx.runtime.validator.BeanValidatorErrorListModel; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; + +import javax.swing.JLabel; +import java.io.File; +import java.util.Enumeration; + +/** @author chemit */ +public abstract class AbstractValidatorTest extends Assert { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(AbstractValidatorTest.class); + + protected ValidatorBean bean; + + static protected BeanValidator<ValidatorBean> validator; + static protected BeanValidatorErrorListModel errors; + static protected File basedir; + + public abstract void testValidator() throws Exception; + + @BeforeClass + public static void initValidator() throws Exception { + + String b = System.getenv("basedir"); + if (b == null) { + b = new File("").getAbsolutePath(); + } + basedir = new File(b); + validator = new BeanValidator<ValidatorBean>(ValidatorBean.class); + validator.setErrorListModel(errors = new BeanValidatorErrorListModel()); + JLabel label = new JLabel(); + validator.setFieldRepresentation("existingFile", label); + validator.setFieldRepresentation("existingDirectory", label); + validator.setFieldRepresentation("notExistingFile", label); + validator.setFieldRepresentation("notExistingDirectory", label); + validator.setFieldRepresentation("entries", label); + } + + @Before + public void setUp() throws Exception { + log.info("start test " + getClass().getSimpleName()); + validator.setBean(bean = new ValidatorBean()); + } + + @After + public void tearDown() { + validator.setBean(null); + } + + protected void assertFieldInError(String s, String error, boolean required) { + Enumeration<?> myErrors = errors.elements(); + while (myErrors.hasMoreElements()) { + BeanValidatorError o = (BeanValidatorError) myErrors.nextElement(); + if (o.getFieldName().equals(s) && o.getError().equals(error)) { + assertTrue(required); + return; + } + } + // error was not found + assertFalse(required); + } +} \ No newline at end of file Added: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/CollectionFieldExpressionValidatorTest.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/CollectionFieldExpressionValidatorTest.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/CollectionFieldExpressionValidatorTest.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,56 @@ +package jaxx.runtime.validator.field; + +import jaxx.runtime.validator.field.ValidatorBean.ValidatorBeanEntry; + +import java.util.Arrays; + +/** @author chemit */ +public class CollectionFieldExpressionValidatorTest extends AbstractValidatorTest { + + static protected ValidatorBeanEntry beanEntry = new ValidatorBeanEntry(0, "stringValue"); + static protected ValidatorBeanEntry beanEntry2 = new ValidatorBeanEntry(0, "fake"); + + @org.junit.Test + @Override + public void testValidator() throws Exception { + assertNull(bean.getEntries()); + + // no entry + assertFieldInError("entries", "collectionFieldExpression.atLeastOne", true); + assertFieldInError("entries", "collectionFieldExpression.exactlyOne", true); + assertFieldInError("entries", "collectionFieldExpression.all", false); + assertFieldInError("entries", "collectionFieldExpression.none", false); + + // add a matching etry + bean.setEntries(Arrays.asList(beanEntry)); + + assertFieldInError("entries", "collectionFieldExpression.atLeastOne", false); + assertFieldInError("entries", "collectionFieldExpression.exactlyOne", false); + assertFieldInError("entries", "collectionFieldExpression.all", false); + assertFieldInError("entries", "collectionFieldExpression.none", true); + + // two matching etries + bean.setEntries(Arrays.asList(beanEntry, beanEntry)); + + assertFieldInError("entries", "collectionFieldExpression.atLeastOne", false); + assertFieldInError("entries", "collectionFieldExpression.exactlyOne", true); + assertFieldInError("entries", "collectionFieldExpression.all", false); + assertFieldInError("entries", "collectionFieldExpression.none", true); + + // add a none matching etry + bean.setEntries(Arrays.asList(beanEntry2)); + + assertFieldInError("entries", "collectionFieldExpression.atLeastOne", true); + assertFieldInError("entries", "collectionFieldExpression.exactlyOne", true); + assertFieldInError("entries", "collectionFieldExpression.all", true); + assertFieldInError("entries", "collectionFieldExpression.none", false); + + // add a none matching etry and a matching entry + bean.setEntries(Arrays.asList(beanEntry2, beanEntry)); + + assertFieldInError("entries", "collectionFieldExpression.atLeastOne", false); + assertFieldInError("entries", "collectionFieldExpression.exactlyOne", false); + assertFieldInError("entries", "collectionFieldExpression.all", true); + assertFieldInError("entries", "collectionFieldExpression.none", true); + } +} Added: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ExistingDirectoryFieldValidatorTest.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ExistingDirectoryFieldValidatorTest.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ExistingDirectoryFieldValidatorTest.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,30 @@ +package jaxx.runtime.validator.field; + +import java.io.File; + +/** @author chemit */ +public class ExistingDirectoryFieldValidatorTest extends AbstractValidatorTest { + + @org.junit.Test + @Override + public void testValidator() throws Exception { + + assertNull(bean.getExistingDirectory()); + assertFieldInError("existingDirectory", "existingDirectory.required", true); + + bean.setExistingDirectory(new File("")); + assertFieldInError("existingDirectory", "existingDirectory.required", true); + + // existing file + bean.setExistingDirectory(new File(basedir, "pom.xml")); + assertFieldInError("existingDirectory", "existingDirectory.required", false); + assertFieldInError("existingDirectory", "existingDirectory.not.exist", true); + + // existing directory + bean.setExistingDirectory(basedir); + assertFieldInError("existingDirectory", "existingDirectory.required", false); + assertFieldInError("existingDirectory", "existingDirectory.not.exist", false); + + } + +} \ No newline at end of file Added: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ExistingFileFieldValidatorTest.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ExistingFileFieldValidatorTest.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ExistingFileFieldValidatorTest.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,30 @@ +package jaxx.runtime.validator.field; + +import java.io.File; + +/** @author chemit */ +public class ExistingFileFieldValidatorTest extends AbstractValidatorTest { + + @org.junit.Test + @Override + public void testValidator() throws Exception { + + assertNull(bean.getExistingFile()); + assertFieldInError("existingFile", "existingFile.required", true); + + bean.setExistingFile(new File("")); + assertFieldInError("existingFile", "existingFile.required", true); + + // existing directory + bean.setExistingFile(basedir); + assertFieldInError("existingFile", "existingFile.required", false); + assertFieldInError("existingFile", "existingFile.not.exist", true); + + // existing file + bean.setExistingFile(new File(basedir, "pom.xml")); + assertFieldInError("existingFile", "existingFile.required", false); + assertFieldInError("existingFile", "existingFile.not.exist", false); + + } + +} \ No newline at end of file Added: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/NotExistingDirectoryFieldValidatorTest.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/NotExistingDirectoryFieldValidatorTest.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/NotExistingDirectoryFieldValidatorTest.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,33 @@ +package jaxx.runtime.validator.field; + +import java.io.File; + +/** @author chemit */ +public class NotExistingDirectoryFieldValidatorTest extends AbstractValidatorTest { + + @org.junit.Test + @Override + public void testValidator() throws Exception { + assertNull(bean.getNotExistingDirectory()); + assertFieldInError("notExistingDirectory", "notExistingDirectory.required", true); + + bean.setNotExistingDirectory(new File("")); + assertFieldInError("notExistingDirectory", "notExistingDirectory.required", true); + + // existing directory + bean.setNotExistingDirectory(basedir); + assertFieldInError("notExistingDirectory", "notExistingDirectory.required", false); + assertFieldInError("notExistingDirectory", "notExistingDirectory.exist", true); + + // existing file + bean.setNotExistingDirectory(new File(basedir, "pom.xml")); + assertFieldInError("notExistingDirectory", "notExistingDirectory.required", false); + assertFieldInError("notExistingDirectory", "notExistingDirectory.exist", true); + + // none existing directory + bean.setNotExistingDirectory(new File(basedir, "pom.xml-" + System.currentTimeMillis())); + assertFieldInError("notExistingDirectory", "notEexistingFile.required", false); + assertFieldInError("notExistingDirectory", "notExistingDirectory.exist", false); + } + +} \ No newline at end of file Added: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/NotExistingFileFieldValidatorTest.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/NotExistingFileFieldValidatorTest.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/NotExistingFileFieldValidatorTest.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,37 @@ +package jaxx.runtime.validator.field; + +import java.io.File; + +/** @author chemit */ +public class NotExistingFileFieldValidatorTest extends AbstractValidatorTest { + + + @org.junit.Test + @Override + public void testValidator() throws Exception { + + assertNull(bean.getNotExistingFile()); + assertFieldInError("notExistingFile", "notExistingFile.required", true); + + bean.setNotExistingFile(new File("")); + assertFieldInError("notExistingFile", "notExistingFile.required", true); + + // existing directory + bean.setNotExistingFile(basedir); + assertFieldInError("notExistingFile", "notExistingFile.required", false); + assertFieldInError("notExistingFile", "notExistingFile.exist", true); + + // existing file + bean.setNotExistingFile(new File(basedir, "pom.xml")); + assertFieldInError("notExistingFile", "notExistingFile.required", false); + assertFieldInError("notExistingFile", "notExistingFile.exist", true); + + // none existing file + bean.setNotExistingFile(new File(basedir, "pom.xml-" + System.currentTimeMillis())); + assertFieldInError("notExistingFile", "notEexistingFile.required", false); + assertFieldInError("notExistingFile", "notExistingFile.exist", false); + + + } + +} \ No newline at end of file Added: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/RequiredFileFieldValidatorTest.java =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/RequiredFileFieldValidatorTest.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/RequiredFileFieldValidatorTest.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,29 @@ +package jaxx.runtime.validator.field; + +import java.io.File; + +/** @author chemit */ +public class RequiredFileFieldValidatorTest extends AbstractValidatorTest { + + @org.junit.Test + @Override + public void testValidator() throws Exception { + + assertNull(bean.getExistingFile()); + assertFieldInError("existingFile", "existingFile.required", true); + + bean.setExistingFile(new File("")); + assertFieldInError("existingFile", "existingFile.required", true); + + bean.setExistingFile(basedir); + assertFieldInError("existingFile", "existingFile.required", false); + + assertFieldInError("existingFile", "existingFile.not.exist", true); + + bean.setExistingFile(new File(basedir, "pom.xml")); + assertFieldInError("existingFile", "existingFile.required", false); + assertFieldInError("existingFile", "existingFile.not.exist", false); + + } + +} \ No newline at end of file Copied: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ValidatorBean.java (from rev 1169, jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/junit/ValidatorBean.java) =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ValidatorBean.java (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ValidatorBean.java 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,117 @@ +package jaxx.runtime.validator.field; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.File; +import java.util.Collection; + +public class ValidatorBean { + + public static class ValidatorBeanEntry { + + protected int intValue; + protected String stringValue; + + public ValidatorBeanEntry(int intValue, String stringValue) { + this.intValue = intValue; + this.stringValue = stringValue; + } + + public int getIntValue() { + return intValue; + } + + public void setIntValue(int intValue) { + this.intValue = intValue; + } + + public String getStringValue() { + return stringValue; + } + + public void setStringValue(String stringValue) { + this.stringValue = stringValue; + } + } + + protected File existingFile; + protected File notExistingFile; + + protected File existingDirectory; + protected File notExistingDirectory; + + protected Collection<ValidatorBeanEntry> entries; + + PropertyChangeSupport p; + + public ValidatorBean() { + p = new PropertyChangeSupport(this); + } + + public void addPropertyChangeListener(PropertyChangeListener listener) { + p.addPropertyChangeListener(listener); + } + + public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + p.addPropertyChangeListener(propertyName, listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + p.removePropertyChangeListener(listener); + } + + public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + p.removePropertyChangeListener(propertyName, listener); + } + + + public File getExistingFile() { + return existingFile; + } + + public File getNotExistingFile() { + return notExistingFile; + } + + public File getExistingDirectory() { + return existingDirectory; + } + + public File getNotExistingDirectory() { + return notExistingDirectory; + } + + public Collection<ValidatorBeanEntry> getEntries() { + return entries; + } + + public void setExistingFile(File existingFile) { + File old = this.existingFile; + this.existingFile = existingFile; + p.firePropertyChange("existingFile", old, existingFile); + } + + public void setNotExistingFile(File notExistingFile) { + File old = this.notExistingFile; + this.notExistingFile = notExistingFile; + p.firePropertyChange("notExistingFile", old, notExistingFile); + } + + public void setExistingDirectory(File existingDirectory) { + File old = this.existingDirectory; + this.existingDirectory = existingDirectory; + p.firePropertyChange("existingDirectory", old, existingDirectory); + } + + public void setNotExistingDirectory(File notExistingDirectory) { + File old = this.notExistingDirectory; + this.notExistingDirectory = notExistingDirectory; + p.firePropertyChange("notExistingDirectory", old, notExistingDirectory); + } + + public void setEntries(Collection<ValidatorBeanEntry> entries) { + Collection<ValidatorBeanEntry> old = this.entries; + this.entries = entries; + p.firePropertyChange("entries", old, entries); + } +} \ No newline at end of file Property changes on: jaxx/trunk/jaxx-runtime-validator/src/test/java/jaxx/runtime/validator/field/ValidatorBean.java ___________________________________________________________________ Name: svn:mergeinfo + Deleted: jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/junit/ValidatorBean-validation.xml =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/junit/ValidatorBean-validation.xml 2009-01-19 12:57:33 UTC (rev 1171) +++ jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/junit/ValidatorBean-validation.xml 2009-01-20 19:39:17 UTC (rev 1172) @@ -1,44 +0,0 @@ -<!DOCTYPE validators PUBLIC - "-//OpenSymphony Group//XWork Validator 1.0.2//EN" - "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> -<validators> - - <field name="existingFile"> - <field-validator type="requiredFile" short-circuit="true"> - <message>existingFile.required</message> - </field-validator> - <field-validator type="existingFile" short-circuit="true"> - <message>existingFile.not.exist</message> - </field-validator> - </field> - - <field name="notExistingFile"> - <field-validator type="requiredFile" short-circuit="true"> - <message>notExistingFile.required</message> - </field-validator> - <field-validator type="notExistingFile" short-circuit="true"> - <message>notExistingFile.exist</message> - </field-validator> - </field> - - <field name="existingDirectory"> - <field-validator type="requiredFile" short-circuit="true"> - <message>existingDirectory.required</message> - </field-validator> - - <field-validator type="existingDirectory" short-circuit="true"> - <message>existingDirectory.not.exist</message> - </field-validator> - </field> - - <field name="notExistingDirectory"> - <field-validator type="requiredFile" short-circuit="true"> - <message>notExistingDirectory.required</message> - </field-validator> - - <field-validator type="notExistingDirectory" short-circuit="true"> - <message>notExistingDirectory.exist</message> - </field-validator> - </field> - -</validators> \ No newline at end of file Copied: jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/runtime/validator/field/ValidatorBean-validation.xml (from rev 1169, jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/junit/ValidatorBean-validation.xml) =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/runtime/validator/field/ValidatorBean-validation.xml (rev 0) +++ jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/runtime/validator/field/ValidatorBean-validation.xml 2009-01-20 19:39:17 UTC (rev 1172) @@ -0,0 +1,67 @@ +<!DOCTYPE validators PUBLIC + "-//OpenSymphony Group//XWork Validator 1.0.2//EN" + "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> +<validators> + + <field name="existingFile"> + <field-validator type="requiredFile" short-circuit="true"> + <message>existingFile.required</message> + </field-validator> + <field-validator type="existingFile" short-circuit="true"> + <message>existingFile.not.exist</message> + </field-validator> + </field> + + <field name="notExistingFile"> + <field-validator type="requiredFile" short-circuit="true"> + <message>notExistingFile.required</message> + </field-validator> + <field-validator type="notExistingFile" short-circuit="true"> + <message>notExistingFile.exist</message> + </field-validator> + </field> + + <field name="existingDirectory"> + <field-validator type="requiredFile" short-circuit="true"> + <message>existingDirectory.required</message> + </field-validator> + + <field-validator type="existingDirectory" short-circuit="true"> + <message>existingDirectory.not.exist</message> + </field-validator> + </field> + + <field name="notExistingDirectory"> + <field-validator type="requiredFile" short-circuit="true"> + <message>notExistingDirectory.required</message> + </field-validator> + + <field-validator type="notExistingDirectory" short-circuit="true"> + <message>notExistingDirectory.exist</message> + </field-validator> + </field> + + <field name="entries"> + <field-validator type="collectionFieldExpression"> + <param name="mode">AT_LEAST_ONE</param> + <param name="expression"><![CDATA[ intValue == 0 && stringValue == "stringValue" ]]></param> + <message>collectionFieldExpression.atLeastOne</message> + </field-validator> + <field-validator type="collectionFieldExpression"> + <param name="mode">EXACTLY_ONE</param> + <param name="expression"><![CDATA[ intValue == 0 && stringValue == "stringValue" ]]></param> + <message>collectionFieldExpression.exactlyOne</message> + </field-validator> + <field-validator type="collectionFieldExpression"> + <param name="mode">ALL</param> + <param name="expression"><![CDATA[ intValue == 0 && stringValue == "stringValue" ]]></param> + <message>collectionFieldExpression.all</message> + </field-validator> + <field-validator type="collectionFieldExpression"> + <param name="mode">NONE</param> + <param name="expression"><![CDATA[ intValue == 0 && stringValue == "stringValue" ]]></param> + <message>collectionFieldExpression.none</message> + </field-validator> + </field> + +</validators> \ No newline at end of file Property changes on: jaxx/trunk/jaxx-runtime-validator/src/test/resources/jaxx/runtime/validator/field/ValidatorBean-validation.xml ___________________________________________________________________ Name: svn:mergeinfo + Modified: jaxx/trunk/jaxx-runtime-validator/src/test/resources/log4j.properties =================================================================== --- jaxx/trunk/jaxx-runtime-validator/src/test/resources/log4j.properties 2009-01-19 12:57:33 UTC (rev 1171) +++ jaxx/trunk/jaxx-runtime-validator/src/test/resources/log4j.properties 2009-01-20 19:39:17 UTC (rev 1172) @@ -5,4 +5,4 @@ log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n -log4j.logger.jaxx=DEBUG +log4j.logger.jaxx=INFO