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.Validatable;
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: * An Order subclass that can validate itself.
41: * This class is intended for learning purposes.
42: * The first choice for a domain object validation, is to have
43: * a separate Validator class per domain class. See for example
44: * the {@link OrderValidator}.
45: *
46: * @author Karsten Lentzsch
47: * @version $Revision: 1.9 $
48: *
49: * @see OrderValidator
50: */
51: final class ValidatingOrder extends Order implements Validatable {
52:
53: // Validation *************************************************************
54:
55: /**
56: * Validates the order and returns a ValidationResult.
57: *
58: * @return the ValidationResult of the pure order validation
59: */
60: public ValidationResult validate() {
61: PropertyValidationSupport support = new PropertyValidationSupport(
62: this , "Order");
63:
64: if (ValidationUtils.isBlank(getOrderNo()))
65: support.addError("Order No", "is mandatory");
66: else if (!ValidationUtils.hasBoundedLength(getOrderNo(), 5, 10))
67: support.addError("Order No", "length must be in [5, 10]");
68:
69: if (getOrderDate() == null)
70: support.addError("Order Date", "is mandatory");
71:
72: if (getOrderDate() != null && getDeliveryDate() != null
73: && getOrderDate().after(getDeliveryDate()))
74: support.addWarning("Delivery Date",
75: "shall be after the order date");
76:
77: if (getDeliveryNotes() != null
78: && !ValidationUtils.hasMaximumLength(
79: getDeliveryNotes(), 30))
80: support.addWarning("Notes", "length shall be in [0, 30]");
81:
82: return support.getResult();
83: }
84:
85: }
|