1 16 17 package org.apache.taglibs.standard.lang.jpath.expression; 18 19 import java.text.DecimalFormat ; 20 import java.text.NumberFormat ; 21 import java.util.Locale ; 22 import java.util.StringTokenizer ; 23 24 import javax.servlet.jsp.PageContext ; 25 26 import org.apache.taglibs.standard.lang.jpath.adapter.ConversionException; 27 import org.apache.taglibs.standard.lang.jpath.adapter.Convert; 28 import org.apache.taglibs.standard.lang.jpath.adapter.IterationContext; 29 30 37 public class FormatNumberFunction extends SimpleNode { 38 39 46 public FormatNumberFunction(int id) { 47 super(id); 48 } 49 50 58 public FormatNumberFunction(Parser p, int id) { 59 super(p, id); 60 } 61 62 72 public String toNormalizedString() { 73 74 String normalized = ""; 75 76 normalized = "format-number(" + jjtGetChild(0).toNormalizedString() 77 + jjtGetChild(1).toNormalizedString() + "," + ")"; 78 79 return normalized; 80 } 81 82 99 public Object evaluate(PageContext pageContext, IterationContext icontext) 100 throws EvaluationException { 101 102 String formatted; 103 104 try { 105 Double arg = Convert.toDouble(jjtGetChild(0).evaluate(pageContext, 106 icontext)); 107 String pattern = 108 Convert.toString(jjtGetChild(1).evaluate(pageContext, 109 icontext)); 110 NumberFormat form; 111 112 if (jjtGetNumChildren() > 2) { 113 String arg3 = 114 Convert.toString(jjtGetChild(2).evaluate(pageContext, 115 icontext)); 116 Locale locale = getLocale(arg3); 117 118 form = NumberFormat.getInstance(locale); 119 } else { 120 form = NumberFormat.getInstance(); 121 } 122 123 try { 124 ((DecimalFormat ) form).applyPattern(pattern); 125 126 formatted = form.format(arg); 127 } catch (IllegalArgumentException iae) { 128 formatted = new String ("NaN"); 129 } 130 } catch (ConversionException ce) { 131 throw new EvaluationException(this, ce.getMessage()); 132 } 133 134 return formatted; 135 } 136 137 146 private Locale getLocale(String arg) { 147 148 Locale result; 149 StringTokenizer st = new StringTokenizer (arg, "_"); 150 String language = null; 151 String country = null; 152 String variant = null; 153 154 if (st.hasMoreTokens()) { 155 language = st.nextToken(); 156 157 if (st.hasMoreTokens()) { 158 country = st.nextToken(); 159 160 if (st.hasMoreTokens()) { 161 variant = st.nextToken(); 162 result = new Locale (language, country, variant); 163 } else { 164 result = new Locale (language, country); 165 } 166 } else { 167 result = new Locale (language, ""); 168 } 169 } else { 170 result = Locale.getDefault(); 171 } 172 173 return result; 174 } 175 } 176 | Popular Tags |