KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > validation > BeanValidationFailure


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.validation;
57
58 import java.util.Collection JavaDoc;
59
60 import org.apache.commons.beanutils.PropertyUtils;
61 import org.objectstyle.cayenne.CayenneRuntimeException;
62
63 /**
64  * ValidationFailure implementation that described a failure of a single
65  * named property of a Java Bean object.
66  *
67  * @author Fabricio Voznika
68  * @author Andrei Adamchik
69  * @since 1.1
70  */

71 public class BeanValidationFailure extends SimpleValidationFailure {
72
73     protected String JavaDoc property;
74
75     private static String JavaDoc validationMessage(String JavaDoc attribute, String JavaDoc message) {
76         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc(message.length() + attribute.length() + 5);
77         buffer.append('\"').append(attribute).append("\" ").append(message);
78         return buffer.toString();
79     }
80
81     /**
82      * Returns a ValidationFailure if a collection attribute
83      * of an object is null or empty.
84      */

85     public static ValidationFailure validateNotEmpty(
86         Object JavaDoc bean,
87         String JavaDoc attribute,
88         Collection JavaDoc value) {
89
90         if (value == null) {
91             return new BeanValidationFailure(
92                 bean,
93                 attribute,
94                 validationMessage(attribute, " is required."));
95         }
96
97         if (value.isEmpty()) {
98             return new BeanValidationFailure(
99                 bean,
100                 attribute,
101                 validationMessage(attribute, " can not be empty."));
102         }
103
104         return null;
105     }
106
107     public static ValidationFailure validateMandatory(
108         Object JavaDoc bean,
109         String JavaDoc attribute,
110         Object JavaDoc value) {
111
112         if (value instanceof String JavaDoc) {
113             return validateNotEmpty(bean, attribute, (String JavaDoc) value);
114         }
115         if (value instanceof Collection JavaDoc) {
116             return validateNotEmpty(bean, attribute, (Collection JavaDoc) value);
117         }
118         return validateNotNull(bean, attribute, value);
119     }
120
121     public static ValidationFailure validateMandatory(Object JavaDoc bean, String JavaDoc attribute) {
122         if (bean == null) {
123             throw new NullPointerException JavaDoc("Null bean.");
124         }
125
126         try {
127             Object JavaDoc result = PropertyUtils.getProperty(bean, attribute);
128             return validateMandatory(bean, attribute, result);
129         }
130         catch (Exception JavaDoc ex) {
131             throw new CayenneRuntimeException(
132                 "Error validationg bean property: "
133                     + bean.getClass().getName()
134                     + "."
135                     + attribute,
136                 ex);
137         }
138     }
139
140     public static ValidationFailure validateNotNull(
141         Object JavaDoc bean,
142         String JavaDoc attribute,
143         Object JavaDoc value) {
144
145         if (value == null) {
146             return new BeanValidationFailure(
147                 bean,
148                 attribute,
149                 validationMessage(attribute, " is required."));
150         }
151
152         return null;
153     }
154
155     public static ValidationFailure validateNotEmpty(
156         Object JavaDoc bean,
157         String JavaDoc attribute,
158         String JavaDoc value) {
159         if (value == null || value.length() == 0) {
160             return new BeanValidationFailure(
161                 bean,
162                 attribute,
163                 validationMessage(attribute, " is a required field."));
164         }
165         return null;
166     }
167
168     /**
169      * Creates new BeanValidationFailure.
170      */

171     public BeanValidationFailure(Object JavaDoc source, String JavaDoc property, Object JavaDoc error) {
172         super(source, error);
173
174         if (source == null && property != null) {
175             throw new IllegalArgumentException JavaDoc("ValidationFailure cannot have 'property' when 'source' is null.");
176         }
177
178         this.property = property;
179     }
180
181     /**
182      * Returns a failed property of the failure source object.
183      */

184     public String JavaDoc getProperty() {
185         return property;
186     }
187
188     /**
189      * Returns a String representation of the failure.
190      */

191     public String JavaDoc toString() {
192         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
193
194         buffer.append("Validation failure for ");
195         Object JavaDoc source = getSource();
196
197         if (source == null) {
198             buffer.append("[General]");
199         }
200         else {
201             String JavaDoc property = getProperty();
202             buffer.append(source.getClass().getName()).append('.').append(
203                 (property == null ? "[General]" : property));
204         }
205         buffer.append(": ");
206         buffer.append(getDescription());
207         return buffer.toString();
208     }
209 }
210
Popular Tags