diff --git a/src/main/java/com/openpojo/validation/test/impl/GetterTester.java b/src/main/java/com/openpojo/validation/test/impl/GetterTester.java index 0c175149..119807f5 100644 --- a/src/main/java/com/openpojo/validation/test/impl/GetterTester.java +++ b/src/main/java/com/openpojo/validation/test/impl/GetterTester.java @@ -18,6 +18,9 @@ package com.openpojo.validation.test.impl; +import java.util.HashSet; +import java.util.Set; + import com.openpojo.log.LoggerFactory; import com.openpojo.random.RandomFactory; import com.openpojo.reflection.PojoClass; @@ -34,9 +37,16 @@ */ public class GetterTester implements Tester { + private Set skippedFields = new HashSet(); + public void run(final PojoClass pojoClass) { final Object classInstance = ValidationHelper.getBasicInstance(pojoClass); for (final PojoField fieldEntry : pojoClass.getPojoFields()) { + if (skippedFields.contains(fieldEntry.getName())) { + LoggerFactory.getLogger(this.getClass()).debug("Skipping field [{0}]", fieldEntry); + continue; + } + if (fieldEntry.hasGetter()) { Object value = fieldEntry.get(classInstance); @@ -57,4 +67,20 @@ public void run(final PojoClass pojoClass) { } } } + + /** + * Instructs GetterTester to skip the field when running pojoClass + * validation. + * + * @param fieldToBeSkipped + * Field name (e.g. Into Person class, to skip getName, provide + * "name" as a field to be skipped. + */ + public void addField(String fieldToBeSkipped) { + if (fieldToBeSkipped == null || fieldToBeSkipped.trim().isEmpty()) { + throw new IllegalArgumentException("The argument 'fieldToBeSkipped' cannot be null or empty."); + } + + this.skippedFields.add(fieldToBeSkipped); + } } diff --git a/src/main/java/com/openpojo/validation/test/impl/SetterTester.java b/src/main/java/com/openpojo/validation/test/impl/SetterTester.java index 1a1af225..49fd3fa5 100644 --- a/src/main/java/com/openpojo/validation/test/impl/SetterTester.java +++ b/src/main/java/com/openpojo/validation/test/impl/SetterTester.java @@ -18,6 +18,9 @@ package com.openpojo.validation.test.impl; +import java.util.HashSet; +import java.util.Set; + import com.openpojo.log.LoggerFactory; import com.openpojo.random.RandomFactory; import com.openpojo.reflection.PojoClass; @@ -34,9 +37,16 @@ */ public class SetterTester implements Tester { + private Set skippedFields = new HashSet(); + public void run(final PojoClass pojoClass) { final Object classInstance = ValidationHelper.getBasicInstance(pojoClass); for (final PojoField fieldEntry : pojoClass.getPojoFields()) { + if (skippedFields.contains(fieldEntry.getName())) { + LoggerFactory.getLogger(this.getClass()).debug("Skipping field [{0}]", fieldEntry); + continue; + } + if (fieldEntry.hasSetter()) { final Object value; @@ -56,4 +66,20 @@ public void run(final PojoClass pojoClass) { } } } -} + + /** + * Instructs SetterTester to skip the field when running pojoClass + * validation. + * + * @param fieldToBeSkipped + * Field name (e.g. Into Person class, to skip getName, provide + * "name" as a field to be skipped. + */ + public void addField(String fieldToBeSkipped) { + if (fieldToBeSkipped == null || fieldToBeSkipped.trim().isEmpty()) { + throw new IllegalArgumentException("The argument 'fieldToBeSkipped' cannot be null or empty."); + } + + this.skippedFields.add(fieldToBeSkipped); + } +} \ No newline at end of file diff --git a/src/test/java/com/openpojo/validation/test/impl/Person.java b/src/test/java/com/openpojo/validation/test/impl/Person.java new file mode 100644 index 00000000..dbcf82cd --- /dev/null +++ b/src/test/java/com/openpojo/validation/test/impl/Person.java @@ -0,0 +1,13 @@ +package com.openpojo.validation.test.impl; + +public class Person { + private String name; + + public void setName(String name) { + this.name = "bad programming"; + } + + public String getName() { + return "bad programming"; + } +} diff --git a/src/test/java/com/openpojo/validation/test/impl/SetterTesterTest.java b/src/test/java/com/openpojo/validation/test/impl/SetterTesterTest.java new file mode 100644 index 00000000..74fd0e36 --- /dev/null +++ b/src/test/java/com/openpojo/validation/test/impl/SetterTesterTest.java @@ -0,0 +1,31 @@ +package com.openpojo.validation.test.impl; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.openpojo.reflection.PojoClass; +import com.openpojo.reflection.impl.PojoClassFactory; +import com.openpojo.validation.PojoValidator; +import com.openpojo.validation.Validator; +import com.openpojo.validation.ValidatorBuilder; +import com.openpojo.validation.rule.impl.GetterMustExistRule; +import com.openpojo.validation.rule.impl.SetterMustExistRule; + +public class SetterTesterTest { + + @Test + public void test() { + PojoClass personPojo = PojoClassFactory.getPojoClass(Person.class); + + SetterTester setterTester = new SetterTester(); + setterTester.addField("name"); + + GetterTester getterTester = new GetterTester(); + getterTester.addField("name"); + + Validator validator = ValidatorBuilder.create().with(setterTester).with(getterTester).build(); + + validator.validate(personPojo); + } +}