KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > latka > validators > BaseConditionalValidator


1 /*
2  * Copyright 1999-2001,2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.commons.latka.validators;
18
19 import org.apache.commons.latka.ValidationException;
20 import org.apache.commons.latka.http.Response;
21
22 import org.apache.log4j.Category;
23
24 /**
25  * This subclass of BaseValidator largely removes the need of
26  * a validator to know whether a particular test is supposed
27  * to succeed or fail. The validate(Response) method
28  * becomes final, and the logic is moved into two
29  * abstract methods (see Javadocs): assertTrue(Response)
30  * and generateBareExceptionMessage().
31  *
32  * @author MorganDelagrange
33  * @version
34  * $Id: BaseConditionalValidator.java 155424 2005-02-26 13:09:29Z dirkv $
35  */

36 public abstract class BaseConditionalValidator extends BaseValidator {
37     // ------------------------------------------------------ Instance Variables
38

39     /** log4j category for output */
40     protected final Category _log = Category.getInstance(
41         BaseConditionalValidator.class);
42     /** condition to test against */
43     protected boolean _condition = true;
44
45     // ----------------------------------------------------------- Constructors
46

47     /**
48      * A test without a label
49      *
50      * @param condition Whether the test should evaluate to true or false
51      */

52     public BaseConditionalValidator(boolean condition) {
53         this(null, condition);
54     }
55
56     /**
57      * A test with a label
58      *
59      * @param label test label
60      * @param condition whether the test should evaluate to true or false
61      */

62     public BaseConditionalValidator(String JavaDoc label, boolean condition) {
63         super(label);
64         _condition = condition;
65     }
66
67     // ---------------------------------------------------------------- Methods
68

69     /**
70      * Set whether or not this test is supposed to succeed
71      *
72      * @param condition true if the test should succeed
73      */

74     public void setCondition(boolean condition) {
75         _condition = condition;
76     }
77
78     /**
79      * Returns whether or not this test is supposed to succeed
80      *
81      * @return true if the test is supposed to succeed
82      */

83     public boolean getCondition() {
84         return _condition;
85     }
86
87     /**
88      * Final method. Implement the assertion logic for
89      * the test in assertTrue(Response), and the exception generation
90      * in generateBareExceptionMessage()
91      *
92      * @param response Response from the HTTP server
93      * @throws ValidationException when a validation fails
94      */

95     public final void validate(Response response) throws ValidationException {
96         boolean assertion = assertTrue(response);
97
98         if ((assertion == true) && (_condition == false)) {
99             throwValidationException();
100         } else if ((assertion == false) && (_condition == true)) {
101             throwValidationException();
102         }
103     }
104
105     /**
106      * Return true or false, depending on whether or not
107      * the test conditions were met. This
108      * is <i>regardless</i> of the value of getCondition(),
109      * which is handled elsewhere.
110      *
111      * Note: this method
112      * should _only_ throw ValidationExceptions under
113      * exceptional circumstances (e.g. invalid regular
114      * expressions, IOExceptions, etc). A successful test
115      * should only return true or false.
116      *
117      * @param response HTTP response
118      * @return true if the test conditions were met, false otherwise
119      * @throws ValidationException when a validation fails
120      */

121     public abstract boolean assertTrue(Response response) throws
122         ValidationException;
123
124     /**
125      * The BASE exception message for a subclass of
126      * BaseConditionalValidator. Expect that the String
127      * "EXPECTED" or "DID NOT EXPECT" will be prepended to
128      * this message, depending on the value of getCondition().
129      * For example, if you are validator attempts to match
130      * regular expression <i>x</i>, this methods should
131      * generate something like " TO MATCH REGULAR EXPRESSION
132      * <i>x</i>.".
133      *
134      * @return bare exception message, to which will be prepended
135      * "EXPECTED" or "DID NOT EXPECT"
136      */

137     public abstract String JavaDoc generateBareExceptionMessage();
138
139     /**
140      * Automatically generated exception messages, based
141      * on the value of getCondition() and
142      * generateBareExceptionMessage().
143      *
144      * @exception ValidationException
145      * generated Exception
146      */

147     protected void throwValidationException() throws ValidationException {
148
149         if (_condition == true) {
150             fail("EXPECTED" + generateBareExceptionMessage());
151         } else {
152             fail("DID NOT EXPECT" + generateBareExceptionMessage());
153         }
154
155     }
156
157 }
158
Popular Tags