1 16 package org.apache.myfaces.taglib.core; 17 18 import java.util.Locale ; 19 import javax.faces.context.FacesContext; 20 import javax.faces.convert.Converter; 21 import javax.faces.convert.NumberConverter; 22 import javax.faces.el.ValueBinding; 23 import javax.faces.webapp.ConverterTag; 24 import javax.faces.webapp.UIComponentTag; 25 import javax.servlet.jsp.JspException ; 26 import javax.servlet.jsp.PageContext ; 27 28 51 public class ConvertNumberTag 52 extends ConverterTag 53 { 54 private String _currencyCode = null; 55 private String _currencySymbol = null; 56 private String _groupingUsed = "true"; private String _integerOnly = "false"; private String _locale = null; 59 private String _maxFractionDigits = null; 60 private String _maxIntegerDigits = null; 61 private String _minFractionDigits = null; 62 private String _minIntegerDigits = null; 63 private String _pattern = null; 64 private String _type = "number"; 66 public ConvertNumberTag() 67 { 68 setConverterId(NumberConverter.CONVERTER_ID); 69 } 70 71 public void setCurrencyCode(String currencyCode) 72 { 73 _currencyCode = currencyCode; 74 } 75 76 public void setCurrencySymbol(String currencySymbol) 77 { 78 _currencySymbol = currencySymbol; 79 } 80 81 public void setGroupingUsed(String groupingUsed) 82 { 83 _groupingUsed = groupingUsed; 84 } 85 86 public void setIntegerOnly(String integerOnly) 87 { 88 _integerOnly = integerOnly; 89 } 90 91 public void setLocale(String locale) 92 { 93 _locale = locale; 94 } 95 96 public void setMaxFractionDigits(String maxFractionDigits) 97 { 98 _maxFractionDigits = maxFractionDigits; 99 } 100 101 public void setMaxIntegerDigits(String maxIntegerDigits) 102 { 103 _maxIntegerDigits = maxIntegerDigits; 104 } 105 106 public void setMinFractionDigits(String minFractionDigits) 107 { 108 _minFractionDigits = minFractionDigits; 109 } 110 111 public void setMinIntegerDigits(String minIntegerDigits) 112 { 113 _minIntegerDigits = minIntegerDigits; 114 } 115 116 public void setPattern(String pattern) 117 { 118 _pattern = pattern; 119 } 120 121 public void setType(String type) 122 { 123 _type = type; 124 } 125 126 public void setPageContext(PageContext context) 127 { 128 super.setPageContext(context); 129 setConverterId(NumberConverter.CONVERTER_ID); 130 } 131 132 protected Converter createConverter() throws JspException 133 { 134 NumberConverter converter = (NumberConverter)super.createConverter(); 135 136 FacesContext facesContext = FacesContext.getCurrentInstance(); 137 setConverterCurrencyCode(facesContext, converter, _currencyCode); 138 setConverterCurrencySymbol(facesContext, converter, _currencySymbol); 139 setConverterGroupingUsed(facesContext, converter, _groupingUsed); 140 setConverterIntegerOnly(facesContext, converter, _integerOnly); 141 setConverterLocale(facesContext, converter, _locale); 142 setConverterMaxFractionDigits(facesContext, converter, _maxFractionDigits); 143 setConverterMaxIntegerDigits(facesContext, converter, _maxIntegerDigits); 144 setConverterMinFractionDigits(facesContext, converter, _minFractionDigits); 145 setConverterMinIntegerDigits(facesContext, converter, _minIntegerDigits); 146 setConverterPattern(facesContext, converter, _pattern); 147 setConverterType(facesContext, converter, _type); 148 149 return converter; 150 } 151 152 153 private static void setConverterCurrencyCode(FacesContext facesContext, 154 NumberConverter converter, 155 String value) 156 { 157 if (value == null) return; 158 if (UIComponentTag.isValueReference(value)) 159 { 160 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 161 converter.setCurrencyCode((String )vb.getValue(facesContext)); 162 } 163 else 164 { 165 converter.setCurrencyCode(value); 166 } 167 } 168 169 private static void setConverterCurrencySymbol(FacesContext facesContext, 170 NumberConverter converter, 171 String value) 172 { 173 if (value == null) return; 174 if (UIComponentTag.isValueReference(value)) 175 { 176 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 177 converter.setCurrencySymbol((String )vb.getValue(facesContext)); 178 } 179 else 180 { 181 converter.setCurrencySymbol(value); 182 } 183 } 184 185 private static void setConverterGroupingUsed(FacesContext facesContext, 186 NumberConverter converter, 187 String value) 188 { 189 if (value == null) return; 190 if (UIComponentTag.isValueReference(value)) 191 { 192 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 193 Boolean b = (Boolean )vb.getValue(facesContext); 194 if (b != null) 195 { 196 converter.setGroupingUsed(b.booleanValue()); 197 } 198 } 199 else 200 { 201 converter.setGroupingUsed(Boolean.valueOf(value).booleanValue()); 202 } 203 } 204 205 private static void setConverterIntegerOnly(FacesContext facesContext, 206 NumberConverter converter, 207 String value) 208 { 209 if (value == null) return; 210 if (UIComponentTag.isValueReference(value)) 211 { 212 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 213 Boolean b = (Boolean )vb.getValue(facesContext); 214 if (b != null) 215 { 216 converter.setIntegerOnly(b.booleanValue()); 217 } 218 } 219 else 220 { 221 converter.setIntegerOnly(Boolean.valueOf(value).booleanValue()); 222 } 223 } 224 225 private static void setConverterLocale(FacesContext facesContext, 226 NumberConverter converter, 227 String value) 228 { 229 if (value == null) return; 230 if (UIComponentTag.isValueReference(value)) 231 { 232 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 233 converter.setLocale((Locale )vb.getValue(facesContext)); 234 } 235 else 236 { 237 throw new IllegalArgumentException ("Attribute locale of type String not supported"); 238 } 239 } 240 241 private static void setConverterMaxFractionDigits(FacesContext facesContext, 242 NumberConverter converter, 243 String value) 244 { 245 if (value == null) return; 246 if (UIComponentTag.isValueReference(value)) 247 { 248 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 249 Integer i = (Integer )vb.getValue(facesContext); 250 if (i != null) 251 { 252 converter.setMaxFractionDigits(i.intValue()); 253 } 254 } 255 else 256 { 257 converter.setMaxFractionDigits(Integer.parseInt(value)); 258 } 259 } 260 261 private static void setConverterMaxIntegerDigits(FacesContext facesContext, 262 NumberConverter converter, 263 String value) 264 { 265 if (value == null) return; 266 if (UIComponentTag.isValueReference(value)) 267 { 268 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 269 Integer i = (Integer )vb.getValue(facesContext); 270 if (i != null) 271 { 272 converter.setMaxIntegerDigits(i.intValue()); 273 } 274 } 275 else 276 { 277 converter.setMaxIntegerDigits(Integer.parseInt(value)); 278 } 279 } 280 281 private static void setConverterMinFractionDigits(FacesContext facesContext, 282 NumberConverter converter, 283 String value) 284 { 285 if (value == null) return; 286 if (UIComponentTag.isValueReference(value)) 287 { 288 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 289 Integer i = (Integer )vb.getValue(facesContext); 290 if (i != null) 291 { 292 converter.setMinFractionDigits(i.intValue()); 293 } 294 } 295 else 296 { 297 converter.setMinFractionDigits(Integer.parseInt(value)); 298 } 299 } 300 301 private static void setConverterMinIntegerDigits(FacesContext facesContext, 302 NumberConverter converter, 303 String value) 304 { 305 if (value == null) return; 306 if (UIComponentTag.isValueReference(value)) 307 { 308 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 309 Integer i = (Integer )vb.getValue(facesContext); 310 if (i != null) 311 { 312 converter.setMinIntegerDigits(i.intValue()); 313 } 314 } 315 else 316 { 317 converter.setMinIntegerDigits(Integer.parseInt(value)); 318 } 319 } 320 321 private static void setConverterPattern(FacesContext facesContext, 322 NumberConverter converter, 323 String value) 324 { 325 if (value == null) return; 326 if (UIComponentTag.isValueReference(value)) 327 { 328 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 329 converter.setPattern((String )vb.getValue(facesContext)); 330 } 331 else 332 { 333 converter.setPattern(value); 334 } 335 } 336 337 private static void setConverterType(FacesContext facesContext, 338 NumberConverter converter, 339 String value) 340 { 341 if (value == null) return; 342 if (UIComponentTag.isValueReference(value)) 343 { 344 ValueBinding vb = facesContext.getApplication().createValueBinding(value); 345 converter.setType((String )vb.getValue(facesContext)); 346 } 347 else 348 { 349 converter.setType(value); 350 } 351 } 352 353 354 } 355 | Popular Tags |