001: /*
002: * $Id: OfbizCurrencyTransform.java,v 1.3 2004/02/10 15:06:19 ajzeneski Exp $
003: *
004: * Copyright (c) 2003 The Open For Business Project - www.ofbiz.org
005: *
006: * Permission is hereby granted, free of charge, to any person obtaining a
007: * copy of this software and associated documentation files (the "Software"),
008: * to deal in the Software without restriction, including without limitation
009: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
010: * and/or sell copies of the Software, and to permit persons to whom the
011: * Software is furnished to do so, subject to the following conditions:
012: *
013: * The above copyright notice and this permission notice shall be included
014: * in all copies or substantial portions of the Software.
015: *
016: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
017: * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
018: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
019: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
020: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
021: * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
022: * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
023: *
024: */
025: package org.ofbiz.content.webapp.ftl;
026:
027: import java.io.IOException;
028: import java.io.Writer;
029: import java.util.Locale;
030: import java.util.Map;
031:
032: import javax.servlet.http.HttpServletRequest;
033:
034: import org.ofbiz.base.util.Debug;
035: import org.ofbiz.base.util.UtilFormatOut;
036: import org.ofbiz.base.util.UtilHttp;
037:
038: import freemarker.ext.beans.BeanModel;
039: import freemarker.ext.beans.NumberModel;
040: import freemarker.template.*;
041:
042: /**
043: * OfbizCurrencyTransform - Freemarker Transform for content links
044: *
045: * @author <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a>
046: * @author <a href="mailto:ray.barlow@makeyour-point.com">Ray Barlow</a>
047: * @version $Revision: 1.3 $
048: * @since 3.0
049: */
050: public class OfbizCurrencyTransform implements TemplateTransformModel {
051:
052: public static final String module = OfbizCurrencyTransform.class
053: .getName();
054:
055: private static String getArg(Map args, String key) {
056: String result = "";
057: Object o = args.get(key);
058: if (o != null) {
059: if (Debug.verboseOn())
060: Debug.logVerbose("Arg Object : "
061: + o.getClass().getName(), module);
062: if (o instanceof TemplateScalarModel) {
063: TemplateScalarModel s = (TemplateScalarModel) o;
064: try {
065: result = s.getAsString();
066: } catch (TemplateModelException e) {
067: Debug.logError(e, "Template Exception", module);
068: }
069: } else {
070: result = o.toString();
071: }
072: }
073: return result;
074: }
075:
076: private static Double getAmount(Map args, String key) {
077: if (args.containsKey(key)) {
078: Object o = args.get(key);
079: if (Debug.verboseOn())
080: Debug.logVerbose("Amount Object : "
081: + o.getClass().getName(), module);
082:
083: // handle nulls better
084: if (o == null) {
085: o = new Double(0.00);
086: }
087:
088: if (o instanceof NumberModel) {
089: NumberModel s = (NumberModel) o;
090: return new Double(s.getAsNumber().doubleValue());
091: }
092: if (o instanceof SimpleNumber) {
093: SimpleNumber s = (SimpleNumber) o;
094: return new Double(s.getAsNumber().doubleValue());
095: }
096: if (o instanceof SimpleScalar) {
097: SimpleScalar s = (SimpleScalar) o;
098: return new Double(s.getAsString());
099: }
100: return new Double(o.toString());
101: }
102: return new Double(0.00);
103: }
104:
105: public Writer getWriter(final Writer out, Map args) {
106: final StringBuffer buf = new StringBuffer();
107:
108: final Double amount = OfbizCurrencyTransform.getAmount(args,
109: "amount");
110: final String isoCode = OfbizCurrencyTransform.getArg(args,
111: "isoCode");
112: final String locale = OfbizCurrencyTransform.getArg(args,
113: "locale");
114:
115: return new Writer(out) {
116: public void write(char cbuf[], int off, int len) {
117: buf.append(cbuf, off, len);
118: }
119:
120: public void flush() throws IOException {
121: out.flush();
122: }
123:
124: public void close() throws IOException {
125: try {
126: if (Debug.verboseOn())
127: Debug.logVerbose("parms: " + amount + " "
128: + isoCode + " " + locale, module);
129: if (locale.length() < 1) {
130: // Load the locale from the session
131: Environment env = Environment
132: .getCurrentEnvironment();
133: BeanModel req = (BeanModel) env
134: .getVariable("request");
135: if (req != null) {
136: HttpServletRequest request = (HttpServletRequest) req
137: .getWrappedObject();
138: out.write(UtilFormatOut.formatCurrency(
139: amount, isoCode, UtilHttp
140: .getLocale(request)));
141: } else {
142: out.write(UtilFormatOut.formatCurrency(
143: amount, isoCode, env.getLocale()));
144: }
145: } else {
146: out.write(UtilFormatOut.formatCurrency(amount
147: .doubleValue(), isoCode, new Locale(
148: locale)));
149: }
150: } catch (TemplateModelException e) {
151: throw new IOException(e.getMessage());
152: }
153: }
154: };
155: }
156: }
|