Title: [waffle-scm] [277] trunk/extensions/taglib/src/main/java/org: w:number tag to format numbers based on locale or given pattern
Revision
277
Author
fabio.kung
Date
2007-07-24 16:24:52 -0500 (Tue, 24 Jul 2007)

Log Message

w:number tag to format numbers based on locale or given pattern

Modified Paths


Added Paths

Removed Paths

  • trunk/extensions/taglib/src/main/java/org/apache/

Diff

Copied: trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/NumberTag.java (from rev 276, trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/DateTag.java) (0 => 277)

--- trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/NumberTag.java	                        (rev 0)
+++ trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/NumberTag.java	2007-07-24 21:24:52 UTC (rev 277)
@@ -0,0 +1,141 @@
+package org.codehaus.waffle.taglib.form;
+
+import org.codehaus.waffle.taglib.LocaleSupport;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.el.ELException;
+import javax.servlet.jsp.el.ExpressionEvaluator;
+import java.io.IOException;
+import java.io.Writer;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+
+/**
+ * A formatted number element for html files.
+ *
+ * @author Fabio Kung
+ */
+// Decide whether to use locale always or not
+public class NumberTag extends FormElement {
+
+    private final LocaleSupport localeSupport = new LocaleSupport();
+    private String name, pattern;
+    private Number value;
+
+    @Override
+    public void release() {
+        super.release();
+        clear();
+    }
+
+    private void clear() {
+        name = null;
+        pattern = null;
+        value = null;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setPattern(String pattern) {
+        this.pattern = pattern;
+    }
+
+    public void setValue(Number value) {
+        this.value = value;
+    }
+
+    // Evaluates expressions as necessary
+    private void evaluateExpressions() throws ELException {
+
+        ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator();
+        // 'name' attribute
+        if (name != null) {
+            name = (String) evaluator.evaluate(name, String.class, pageContext.getVariableResolver(), null);
+        }
+        // 'pattern' attribute
+        if (pattern != null) {
+            pattern = (String) evaluator.evaluate(pattern, String.class, pageContext.getVariableResolver(), null);
+        }
+    }
+
+    // evaluates _expression_ and chains to parent
+    @Override
+    public int doStartTag() throws JspException {
+
+        // evaluate any expressions we were passed, once per invocation
+        try {
+            evaluateExpressions();
+        } catch (ELException e) {
+            throw new JspException(e);
+        }
+
+        // chain to the parent implementation
+        return super.doStartTag();
+    }
+
+    @Override
+    public IterationResult start(Writer out) throws JspException, IOException {
+
+        out.write("<input type=\"");
+        out.write(getType());
+        out.write("\" name=\"");
+        out.write(name);
+        out.write("\" ");
+        out.write("value=\"");
+        if (this.value != null) {
+            out.write(getFormattedNumber());
+        } else {
+            Number number = this.evaluateNumber("${" + this.name + "}");
+            this.setValue(number);
+            if (number != null) {
+                out.write(getFormattedNumber());
+            }
+        }
+        out.write("\"");
+        attributes.outputTo(out);
+        out.write("/>");
+        clear();
+        return IterationResult.BODY;
+    }
+
+    private Number evaluateNumber(String _expression_) throws JspException {
+        try {
+            return (Number) pageContext.getExpressionEvaluator().evaluate(
+                    _expression_, Number.class, pageContext.getVariableResolver(),
+                    null);
+        } catch (ELException e) {
+            throw new JspException(e);
+        }
+    }
+
+    private String getFormattedNumber() throws JspException {
+        NumberFormat formatter = getFormatter();
+        return formatter.format(value);
+    }
+
+    private NumberFormat getFormatter() {
+        NumberFormat formatter;
+        Locale locale = this.localeSupport.getFormattingLocale(pageContext);
+        if(pattern != null) {
+            DecimalFormat decimalFormat = new DecimalFormat(pattern);
+            decimalFormat.setDecimalFormatSymbols(new DecimalFormatSymbols(locale));
+            formatter = decimalFormat;
+        } else {
+            formatter = NumberFormat.getNumberInstance(locale);
+        }
+        return formatter;
+    }
+
+    protected String getType() {
+        return "text";
+    }
+
+    @Override
+    protected String getDefaultLabel() {
+        return name;
+    }
+}
\ No newline at end of file

Modified: trunk/extensions/taglib/src/main/resources/META-INF/waffle.tld (276 => 277)

--- trunk/extensions/taglib/src/main/resources/META-INF/waffle.tld	2007-07-24 18:22:39 UTC (rev 276)
+++ trunk/extensions/taglib/src/main/resources/META-INF/waffle.tld	2007-07-24 21:24:52 UTC (rev 277)
@@ -195,7 +195,44 @@
     </attribute>
   </tag>
 
+  <!-- number -->
   <tag>
+    <name>number</name>
+    <tagclass>org.codehaus.waffle.taglib.form.NumberTag</tagclass>
+    <bodycontent>empty</bodycontent>
+    <dynamic-attributes>true</dynamic-attributes>
+    <description>Number tag</description>
+    <attribute>
+      <name>rendered</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+      <type>java.lang.Boolean</type>
+      <description>If the field should be rendered or not.</description>
+    </attribute>
+    <attribute>
+      <name>value</name>
+      <required>false</required>
+      <rtexprvalue>true</rtexprvalue>
+      <type>java.lang.Number</type>
+      <description>The number to be rendered and formatted.</description>
+    </attribute>
+    <attribute>
+      <name>name</name>
+      <required>true</required>
+      <rtexprvalue>true</rtexprvalue>
+      <type>java.lang.String</type>
+      <description>Name of the field.</description>
+    </attribute>
+    <attribute>
+      <name>pattern</name>
+      <required>false</required>
+      <rtexprvalue>false</rtexprvalue>
+      <type>java.lang.String</type>
+      <description>number format pattern</description>
+    </attribute>
+  </tag>
+
+  <tag>
     <name>select</name>
     <tagclass>org.codehaus.waffle.taglib.form.SelectTag</tagclass>
     <bodycontent>scriptless</bodycontent>

Copied: trunk/extensions/taglib-acceptance/src/main/webapp/number.jsp (from rev 276, trunk/extensions/taglib-acceptance/src/main/webapp/date.jsp) (0 => 277)

--- trunk/extensions/taglib-acceptance/src/main/webapp/number.jsp	                        (rev 0)
+++ trunk/extensions/taglib-acceptance/src/main/webapp/number.jsp	2007-07-24 21:24:52 UTC (rev 277)
@@ -0,0 +1,29 @@
+<%@ taglib uri="http://waffle.codehaus.org" prefix="w" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
+
+<%@ page contentType="text/html;encoding=iso-8859-1" %>
+<%@ page import="java.lang.Number" %>
+
+<html>
+<head>
+</head>
+<body >
+ 
+<%
+	pageContext.setAttribute("number",new Double(1234.567));
+  pageContext.setAttribute("number2",new Double(1234.5));
+%>
+
+<fmt:setLocale value="pt_BR" />
+
+Number Tag:
+<br/>
+without pattern <w:number id="asfsad" value="${number}" name="numberLocalized"/>
+<br/>
+with pattern <w:number name="d" value="${number2}" pattern="00,000.##"/>
+<br/>
+only name atribute:<w:number name="number" />
+<br/>
+<br/>
+</body >
+</html>


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to