1 /***
2 * Copyright (c) 2002, CodeStreet LLC. All rights reserved.<p>
3 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
4 * conditions are met:<p>
5 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
6 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
7 * in the documentation and/or other materials provided with the distribution. Neither the name of CodeStreet LLC. nor the
8 * names of its contributors may be used to endorse or promote products derived from this software without specific prior written
9 * permission.<p>
10 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
11 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
12 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
13 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
14 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
15 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<p>
16 */
17
18 package com.codestreet.messageforge;
19
20 /***
21 * Class to represent a minimum/maximum value constraint on a <tt>double</tt>
22 * numeric message field.
23 * @author Jawaid Hakim.
24 */
25 public class RFldConstraintF64MinMax extends RFldConstraintF64
26 {
27 /***
28 * Factory. Returns a <tt>RFldConstraintF32MinMax</tt> instance based on the input parameters.
29 * @param key Key to use for caching constraint.
30 * @param fldName Name of field to which this constraint is bound.
31 * @param minSet Flag to indicate whether min value is set.
32 * @param min Minimum length allowed. If this is <tt>null</tt> then no
33 * constraint is placed on the minimum length.
34 * @param maxSet Flag to indicate whether max value is set.
35 * @param max Maximum length allowed. If this is <tt>null</tt> then no
36 * constraint is placed on the maximum length.
37 */
38 public static RFldConstraintF64MinMax valueOf(String key, String fldName, boolean minSet, Double min, boolean maxSet, Double max) throws FieldValidationException
39 {
40 RFldConstraintF64MinMax instance;
41 if (! instances_.containsKey(key))
42 {
43 instance = new RFldConstraintF64MinMax(fldName, minSet, min, maxSet, max);
44 synchronized (instances_)
45 {
46 instances_.put(key, instance);
47 }
48 }
49 else
50 instance = (RFldConstraintF64MinMax)instances_.get(key);
51
52 return instance;
53 }
54
55 /***
56 * Factory. Returns a <tt>RFldConstraintF64MinMax</tt> instance based on the input parameters.
57 * @param key Key to use for caching constraint.
58 * @param fldName Name of field to which this constraint is bound.
59 * @param minSet Flag to indicate whether min value is set.
60 * @param min Minimum length allowed. If this is <tt>null</tt> then no
61 * constraint is placed on the minimum length.
62 * @param maxSet Flag to indicate whether max value is set.
63 * @param max Maximum length allowed. If this is <tt>null</tt> then no
64 * constraint is placed on the maximum length.
65 */
66 public static RFldConstraintF64MinMax valueOf(String key, String fldName, boolean minSet, String min, boolean maxSet, String max) throws FieldValidationException
67 {
68 if (instances_.containsKey(key))
69 return (RFldConstraintF64MinMax)instances_.get(key);
70
71 if (minSet && maxSet)
72 return valueOf(key, fldName, minSet, Double.valueOf(min), maxSet, Double.valueOf(max));
73 else if (minSet)
74 return valueOf(key, fldName, minSet, Double.valueOf(min), maxSet, null);
75 else if (maxSet)
76 return valueOf(key, fldName, minSet, null, maxSet, Double.valueOf(max));
77 else
78 throw new FieldValidationException("Either the minimum or the maximum must be set");
79 }
80
81 /***
82 * Constructor.
83 * @param fldName Name of field to which this constraint is bound.
84 * @param minSet Flag to indicate whether min value is set.
85 * @param minVal Minimum value allowed.
86 * @param maxSet Flag to indicate whether max value is set.
87 * @param maxVal Maximum value allowed.
88 */
89 private RFldConstraintF64MinMax(String fldName, boolean minSet, Double minVal, boolean maxSet, Double maxVal) throws FieldValidationException
90 {
91 if (! minSet && ! maxSet)
92 throw new FieldValidationException("Min and max cannot both be NULL: " + fldName);
93
94 double minValue = (minSet) ? minVal.doubleValue() : 0.0;
95 double maxValue = (maxSet) ? maxVal.doubleValue() : 0.0;
96
97 if (minSet && maxSet && minValue > maxValue)
98 throw new FieldValidationException("Minimum value is after maximum value: " + fldName);
99
100 if (minSet)
101 setMinVal(fldName, minValue);
102
103 if (maxSet)
104 setMaxVal(fldName, maxValue);
105 }
106
107 /***
108 * Set minimum value.
109 * @param fldName Field name.
110 * @param minVal Minimum value.
111 */
112 private void setMinVal(String fldName, double minVal) throws FieldValidationException
113 {
114 if (maxValSet_ && minVal > maxVal_)
115 throw new FieldValidationException("Minimum value is greater than maximum value: " + fldName);
116
117 minValSet_ = true;
118 minVal_ = minVal;
119 }
120
121 /***
122 * Set maximum value.
123 * @param fldName Field name.
124 * @param maxVal Maximum value.
125 */
126 private void setMaxVal(String fldName, double maxVal) throws FieldValidationException
127 {
128 if (minValSet_ && maxVal < minVal_)
129 throw new FieldValidationException("Minimum value is greater than maximum value: " + fldName);
130
131 maxValSet_ = true;
132 maxVal_ = maxVal;
133 }
134
135 /***
136 * Get error description.
137 * @param fldName Field name.
138 * @return Error description.
139 */
140 public String errDesc(String fldName)
141 {
142 return "Field value outside min/max range: " + fldName;
143 }
144
145 /***
146 * Check if a value satisfies the constraint.
147 * @param val Field value to validate.
148 * @return <tt>true</tt> if the field satisfied the
149 * constraint. Otherwise, <tt>false</tt> is returned.
150 */
151 public boolean isValid(double val)
152 {
153 boolean ret = (! minValSet_ || val >= minVal_);
154 ret = (ret && (! maxValSet_ || val <= maxVal_));
155 return ret;
156 }
157
158 /***
159 * Cache of instances.
160 */
161 private static java.util.Map instances_ = new java.util.HashMap();
162
163 /***
164 * Flag to indicate if minimum value constraint is set.
165 */
166 protected boolean minValSet_;
167
168 /***
169 * Flag to indicate if maximum value constraint is set.
170 */
171 protected boolean maxValSet_;
172
173 /***
174 * Minimum value allowed.
175 */
176 protected double minVal_;
177
178 /***
179 * Maximum value allowed.
180 */
181 protected double maxVal_;
182 }
This page was automatically generated by Maven