View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.taglib.core;
20  
21  import org.apache.myfaces.shared.taglib.UIComponentELTagUtils;
22  import org.apache.myfaces.shared.util.LocaleUtils;
23  
24  import javax.el.ELContext;
25  import javax.el.ValueExpression;
26  import javax.faces.context.FacesContext;
27  import javax.faces.convert.Converter;
28  import javax.faces.convert.NumberConverter;
29  import javax.servlet.jsp.JspException;
30  import javax.servlet.jsp.PageContext;
31  import java.util.Locale;
32  
33  /**
34   * @author Manfred Geiler (latest modification by $Author$)
35   * @version $Revision$ $Date$
36   */
37  public class ConvertNumberTag extends ConverterTag
38  {
39      private static final long serialVersionUID = -8365745569697171573L;
40      private ValueExpression _currencyCode = null;
41      private ValueExpression _currencySymbol = null;
42      private ValueExpression _groupingUsed = null;
43      private ValueExpression _integerOnly = null;
44      private ValueExpression _locale = null;
45      private ValueExpression _maxFractionDigits = null;
46      private ValueExpression _maxIntegerDigits = null;
47      private ValueExpression _minFractionDigits = null;
48      private ValueExpression _minIntegerDigits = null;
49      private ValueExpression _pattern = null;
50      private ValueExpression _type = null;
51  
52      public ConvertNumberTag()
53      {
54          setConverterIdString(NumberConverter.CONVERTER_ID);
55      }
56  
57      public void setCurrencyCode(ValueExpression currencyCode)
58      {
59          _currencyCode = currencyCode;
60      }
61  
62      public void setCurrencySymbol(ValueExpression currencySymbol)
63      {
64          _currencySymbol = currencySymbol;
65      }
66  
67      public void setGroupingUsed(ValueExpression groupingUsed)
68      {
69          _groupingUsed = groupingUsed;
70      }
71  
72      public void setIntegerOnly(ValueExpression integerOnly)
73      {
74          _integerOnly = integerOnly;
75      }
76  
77      public void setLocale(ValueExpression locale)
78      {
79          _locale = locale;
80      }
81  
82      public void setMaxFractionDigits(ValueExpression maxFractionDigits)
83      {
84          _maxFractionDigits = maxFractionDigits;
85      }
86  
87      public void setMaxIntegerDigits(ValueExpression maxIntegerDigits)
88      {
89          _maxIntegerDigits = maxIntegerDigits;
90      }
91  
92      public void setMinFractionDigits(ValueExpression minFractionDigits)
93      {
94          _minFractionDigits = minFractionDigits;
95      }
96  
97      public void setMinIntegerDigits(ValueExpression minIntegerDigits)
98      {
99          _minIntegerDigits = minIntegerDigits;
100     }
101 
102     public void setPattern(ValueExpression pattern)
103     {
104         _pattern = pattern;
105     }
106 
107     public void setType(ValueExpression type)
108     {
109         _type = type;
110     }
111 
112     @Override
113     public void setPageContext(PageContext context)
114     {
115         super.setPageContext(context);
116         setConverterIdString(NumberConverter.CONVERTER_ID);
117     }
118 
119     @Override
120     protected Converter createConverter() throws JspException
121     {
122         NumberConverter converter = (NumberConverter)super.createConverter();
123         ELContext elContext = FacesContext.getCurrentInstance().getELContext();
124         if (null != _currencyCode)
125         {
126             converter.setCurrencyCode((String)UIComponentELTagUtils.evaluateValueExpression(elContext, _currencyCode));
127         }
128         if (null != _currencySymbol)
129         {
130             converter.setCurrencySymbol((String)UIComponentELTagUtils.evaluateValueExpression(elContext,
131                 _currencySymbol));
132         }
133         if (null != _groupingUsed)
134         {
135             converter.setGroupingUsed(UIComponentELTagUtils.getBooleanValue(elContext, _groupingUsed));
136         }
137         else
138         {
139             converter.setGroupingUsed(true);
140         }
141         if (null != _integerOnly)
142         {
143             converter.setIntegerOnly(UIComponentELTagUtils.getBooleanValue(elContext, _integerOnly));
144         }
145         else
146         {
147             converter.setIntegerOnly(false);
148         }
149         if (null != _locale)
150         {
151             Locale locale;
152             if (_locale.isLiteralText())
153             {
154                 locale = LocaleUtils.toLocale(_locale.getExpressionString());
155             }
156             else
157             {
158                 Object localeValue = _locale.getValue(elContext);
159                 if (localeValue instanceof Locale)
160                 {
161                     locale = (Locale)localeValue;
162                 }
163                 else
164                 {
165                     locale = LocaleUtils.toLocale(localeValue.toString());
166                 }
167                 if (null == locale)
168                 {
169                     locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
170                 }
171             }
172             converter.setLocale(locale);
173         }
174         if (null != _maxFractionDigits)
175         {
176             converter.setMaxFractionDigits(UIComponentELTagUtils.getIntegerValue(elContext, _maxFractionDigits));
177         }
178         if (null != _maxIntegerDigits)
179         {
180             converter.setMaxIntegerDigits(UIComponentELTagUtils.getIntegerValue(elContext, _maxIntegerDigits));
181         }
182         if (null != _minFractionDigits)
183         {
184             converter.setMinFractionDigits(UIComponentELTagUtils.getIntegerValue(elContext, _minFractionDigits));
185         }
186         if (null != _minIntegerDigits)
187         {
188             converter.setMinIntegerDigits(UIComponentELTagUtils.getIntegerValue(elContext, _minIntegerDigits));
189         }
190         if (null != _pattern)
191         {
192             converter.setPattern((String)UIComponentELTagUtils.evaluateValueExpression(elContext, _pattern));
193         }
194         if (null != _type)
195         {
196             converter.setType((String)UIComponentELTagUtils.evaluateValueExpression(elContext, _type));
197         }
198         else
199         {
200             converter.setType("number");
201         }
202         return converter;
203     }
204 }