01: /*
02: * Copyright (c) 2003-2007 JGoodies Karsten Lentzsch. All Rights Reserved.
03: *
04: * Redistribution and use in source and binary forms, with or without
05: * modification, are permitted provided that the following conditions are met:
06: *
07: * o Redistributions of source code must retain the above copyright notice,
08: * this list of conditions and the following disclaimer.
09: *
10: * o Redistributions in binary form must reproduce the above copyright notice,
11: * this list of conditions and the following disclaimer in the documentation
12: * and/or other materials provided with the distribution.
13: *
14: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
15: * its contributors may be used to endorse or promote products derived
16: * from this software without specific prior written permission.
17: *
18: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29: */
30:
31: package com.jgoodies.validation.tutorial.validator;
32:
33: import com.jgoodies.validation.Validator;
34: import com.jgoodies.validation.ValidationResult;
35: import com.jgoodies.validation.tutorial.shared.Order;
36: import com.jgoodies.validation.util.PropertyValidationSupport;
37: import com.jgoodies.validation.util.ValidationUtils;
38:
39: /**
40: * Validates Orders. This Validator style is the first choice
41: * for a domain object validation. It allows to use different validators
42: * for the same domain class. This can be useful if you have strict and
43: * relaxed validator for different validation contexts, such as saving (strict)
44: * and printing (relaxed). If the domain class validates itself (as in
45: * the ValidatingOrder), it is more difficult to implement this feature,
46: * or it may be more difficult to understand.
47: *
48: * @author Karsten Lentzsch
49: * @version $Revision: 1.5 $
50: *
51: * @see ValidatingOrder
52: */
53: public final class OrderValidator implements Validator<Order> {
54:
55: // Validation *************************************************************
56:
57: /**
58: * Validates this Validator's Order and returns the result
59: * as an instance of {@link ValidationResult}.
60: *
61: * @param order the Order to be validated
62: * @return the ValidationResult of the order validation
63: */
64: public ValidationResult validate(Order order) {
65: PropertyValidationSupport support = new PropertyValidationSupport(
66: order, "Order");
67:
68: if (ValidationUtils.isBlank(order.getOrderNo()))
69: support.addError("Order No", "is mandatory");
70: else if (!ValidationUtils.hasBoundedLength(order.getOrderNo(),
71: 5, 10))
72: support.addError("Order No", "length must be in [5, 10]");
73:
74: if (order.getOrderDate() == null)
75: support.addError("Order Date", "is mandatory");
76:
77: if (order.getOrderDate() != null
78: && order.getDeliveryDate() != null
79: && order.getOrderDate().after(order.getDeliveryDate()))
80: support.addWarning("Delivery Date",
81: "shall be after the order date");
82:
83: if (order.getDeliveryNotes() != null
84: && !ValidationUtils.hasMaximumLength(order
85: .getDeliveryNotes(), 30))
86: support.addWarning("Notes", "length shall be in [0, 30]");
87:
88: return support.getResult();
89: }
90:
91: }
|