Listing 5: The TaskValidator class.
<TaskValidator>
package jbriscoe.article.spring.validation.validator;
import java.util.Calendar;
import jbriscoe.article.spring.validation.entity.Task;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.validator.GenericValidator;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
public class TaskValidator extends DefaultValidator {
private static final int HOURS_IN_DAY = 24;
private Log log = LogFactory.getLog(getClass());
protected Class getValidatorSupportClass() {
return Task.class;
}
public void validate(final Object obj, final Errors errors) {
log.debug("Begin TaskValidator validation.");
final Task task = (Task) obj;
// Task can't already be completed.
if (Boolean.TRUE.equals(task.getCompleted())) {
errors.rejectValue("completed", "errorCode");
}
// Must assign a priority.
ValidationUtils.rejectIfEmpty(errors, "priority", "errorCode");
// Due Date must not be null or before today.
ValidationUtils.rejectIfEmpty(errors, "due", "errorCode");
Calendar dueCal = null;
if (task.getDue() != null) {
dueCal = Calendar.getInstance();
dueCal.setTime(task.getDue());
final Calendar todayCal = Calendar.getInstance();
todayCal.set(Calendar.HOUR_OF_DAY, 0);
todayCal.set(Calendar.MINUTE, 0);
todayCal.set(Calendar.SECOND, 0);
todayCal.set(Calendar.MILLISECOND, 0);
if (todayCal.after(dueCal)) {
errors.rejectValue("due", "errorCode");
}
}
// Had to assign to an employee.
ValidationUtils.rejectIfEmpty(errors, "assignedToEmployees", "errorCode");
// Must have a positive estimate for hours.
ValidationUtils.rejectIfEmpty(errors, "estimatedHoursToComplete","errorCode");
if (task.getEstimatedHoursToComplete() != null) {
if (GenericValidator.minValue(.01, task.getEstimatedHoursToComplete()
.doubleValue())) {
errors.rejectValue("estimatedHoursToComplete", "errorCode");
}
// Estimate must be within or equal to Due Date not past.
if (dueCal != null) {
final Calendar rollingWorkCal = Calendar.getInstance();
rollingWorkCal.add(Calendar.DATE, new Double(Math.ceil((task
.getEstimatedHoursToComplete().doubleValue() /HOURS_IN_DAY))).intValue());
rollingWorkCal.set(Calendar.HOUR_OF_DAY, 0);
rollingWorkCal.set(Calendar.MINUTE, 0);
rollingWorkCal.set(Calendar.SECOND, 0);
rollingWorkCal.set(Calendar.MILLISECOND, 0);
if (rollingWorkCal.after(dueCal)) {
errors.rejectValue("estimatedHoursToComplete", "errorCode");
}
}
}
// Must have a description.
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "description", "errorCode");
log.debug("End TaskValidator validation.");
}
}
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.