Posted by
Jacques Le Roux on
Apr 20, 2006; 6:25pm
URL: http://ofbiz.116.s1.nabble.com/Dev-proposal-to-add-feature-to-flexible-string-expander-tp167697p167699.html
Just a note : in France we write with € symbol after the amount. Perhaps it can
be done in the same time ?
Jacques
----- Original Message -----
From: "David E Jones" <
[hidden email]>
To: "OFBiz Project Development Discussion" <
[hidden email]>
Sent: Thursday, April 20, 2006 6:48 PM
Subject: Re: [OFBiz] Dev - proposal to add feature to flexible stringexpander
>
> I think this sort of change is fine, but perhaps with a syntax closer to that
of FreeMarker it will be easier for people to use/remember. Something like the
"?" separator they use for built-ins. So it might look something like:
>
> > ${payment.amount?currency(EUR)}
> > or
> > ${payment.amount?currency(${payment.currencyUomId})}
>
> Of course, as we make this more complex eventually we're going to want a more
formal parser than just doing String compares and such... I guess we can table
that for later though.
>
> -David
>
>
> Hans Bakker wrote:
> > Good morning,
> >
> > currently it is not possible to do currency localization on currency values
> > displayed in the label statement in a screen widget and every where the
> > flexible string expander is used.
> >
> > attached a patch to enable the following code which displays the amount of a
> > payment taking into account the current locale and requested currency. The
> > implementation is similar to the 'bsh:' prefix.
> >
> > ${currency=EUR:payment.amount}
> > or
> > ${currency=${payment.currencyUomId}:payment.amount}
> >
> > will display as: € 40,33
> > when the currency is set to 'EUR' and the locale is dutch.
> >
> > any opinions?
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > Index: base/src/base/org/ofbiz/base/util/string/FlexibleStringExpander.java
> > ===================================================================
> > --- base/src/base/org/ofbiz/base/util/string/FlexibleStringExpander.java
(revision 7344)
> > +++ base/src/base/org/ofbiz/base/util/string/FlexibleStringExpander.java
(working copy)
> > @@ -1,25 +1,19 @@
> > /*
> > * $Id$
> > *
> > - * Copyright (c) 2003 The Open For Business Project - www.ofbiz.org
> > - *
> > - * Permission is hereby granted, free of charge, to any person obtaining a
> > - * copy of this software and associated documentation files (the
"Software"),
> > - * to deal in the Software without restriction, including without
limitation
> > - * the rights to use, copy, modify, merge, publish, distribute,
sublicense,
> > - * and/or sell copies of the Software, and to permit persons to whom the
> > - * Software is furnished to do so, subject to the following conditions:
> > - *
> > - * The above copyright notice and this permission notice shall be included
> > - * in all copies or substantial portions of the Software.
> > - *
> > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> > - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> > - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> > - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT
> > - * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR
> > - * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> > + * Copyright 2001-2006 The Apache Software Foundation
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License"); you may
not
> > + * use this file except in compliance with the License. You may obtain a
copy of
> > + * the License at
> > + *
> > + *
http://www.apache.org/licenses/LICENSE-2.0> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT
> > + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
> > + * License for the specific language governing permissions and limitations
> > + * under the License.
> > */
> > package org.ofbiz.base.util.string;
> >
> > @@ -33,6 +27,8 @@
> > import org.ofbiz.base.util.BshUtil;
> > import org.ofbiz.base.util.Debug;
> > import org.ofbiz.base.util.collections.FlexibleMapAccessor;
> > +import org.ofbiz.base.util.UtilFormatOut;
> > +import org.ofbiz.base.util.UtilMisc;
> >
> > import bsh.EvalError;
> >
> > @@ -40,8 +36,13 @@
> > * Expands string values with in a Map context supporting the ${} syntax
for
> > * variable placeholders and the "." (dot) and "[]" (square-brace) syntax
> > * elements for accessing Map entries and List elements in the context.
> > + * It Also supports the execution of bsh files by using the 'bsh:' prefix.
> > + * Further it is possible to control the output by specifying the suffix
> > + * 'currency=XXX:' to format the output according the current locale
> > + * and specified (XXX) currency
> > *
> > * @author <a href="mailto:
[hidden email]">David E. Jones</a>
> > + * @author <a href="mailto:
[hidden email]">Hans Bakker</a>
added currency=xxx prefix
> > * @version $Rev$
> > * @since 2.2
> > */
> > @@ -51,6 +52,8 @@
> >
> > protected String original;
> > protected List stringElements = new LinkedList();
> > + protected static boolean localizeCurrency = false;
> > + protected static String currencyCode = null;
> >
> > public FlexibleStringExpander(String original) {
> > this.original = original;
> > @@ -91,6 +94,7 @@
> > * they are dependent on the context which isn't known until expansion
time.
> > *
> > * @param context A context Map containing the variable values
> > + * @param locale the current set locale
> > * @return The original String expanded by replacing varaible place
holders.
> > */
> > public String expandString(Map context, Locale locale) {
> > @@ -103,7 +107,7 @@
> > }
> >
> > //call back into this method with new String to take care of
any/all nested expands
> > - return expandString(expanded.toString(), context);
> > + return expandString(expanded.toString(), context,locale);
> > }
> >
> > /**
> > @@ -112,13 +116,17 @@
> > * the "${}" syntax and the variable name inside the curly-braces can
use
> > * the "." (dot) syntax to access sub-Map entries and the "[]"
square-brace
> > * syntax to access List elements.
> > + * It Also supports the execution of bsh files by using the 'bsh:'
prefix.
> > + * Further it is possible to control the output by specifying the
suffix
> > + * 'currency=XXX:' to format the output according the current locale
> > + * and specified (XXX) currency
> > *
> > * @param original The original String that will be expanded
> > * @param context A context Map containing the variable values
> > * @return The original String expanded by replacing varaible place
holders.
> > */
> > public static String expandString(String original, Map context) {
> > - return expandString(original, context, null);
> > + return expandString(original, context, null);
> > }
> >
> > /**
> > @@ -127,6 +135,10 @@
> > * the "${}" syntax and the variable name inside the curly-braces can
use
> > * the "." (dot) syntax to access sub-Map entries and the "[]"
square-brace
> > * syntax to access List elements.
> > + * It Also supports the execution of bsh files by using the 'bsh:'
prefix.
> > + * Further it is possible to control the output by specifying the
prefix
> > + * 'currency=XXX:' to format the output according the current locale
> > + * and specified (XXX) currency
> > *
> > * @param original The original String that will be expanded
> > * @param context A context Map containing the variable values
> > @@ -134,7 +146,7 @@
> > */
> > public static String expandString(String original, Map context, Locale
locale) {
> > // if null or less than 3 return original; 3 chars because that is
the minimum necessary for a ${}
> > - if (original == null || original.length() < 3) {
> > + if (original == null || original.length() < 3) {
> > return original;
> > }
> >
> > @@ -151,12 +163,19 @@
> > }
> > }
> >
> > + if (locale == null && context.containsKey("locale")) {
> > + locale = (Locale) context.get("locale");
> > + }
> > + if (locale == null && context.containsKey("autoUserLogin")) {
> > + locale = UtilMisc.ensureLocale(((Map)
context.get("autoUserLogin")).get("lastLocale"));
> > + }
> > +
> > StringBuffer expanded = new StringBuffer();
> > ParseElementHandler handler = new OnTheFlyHandler(expanded,
context, locale);
> > parseString(original, handler);
> >
> > //call back into this method with new String to take care of
any/all nested expands
> > - return expandString(expanded.toString(), context);
> > + return expandString(expanded.toString(), context,locale);
> > }
> >
> > public static void parseString(String original, ParseElementHandler
handler) {
> > @@ -189,10 +208,17 @@
> > // append everything from the current index to the start of the
var
> > handler.handleConstant(original, currentInd, start);
> >
> > + localizeCurrency = false;
> > // check to see if this starts with a "bsh:", if so treat the
rest of the string as a bsh scriptlet
> > if (original.indexOf("bsh:", start+2) == start+2) {
> > // get the bsh scriptlet and append it
> > handler.handleBsh(original, start+6, end);
> > + // see if currency=xxx: formatting is required
> > + } else if (original.indexOf("currency=", start+2) == start+2) {
> > + int colonPos = original.indexOf(":", start+9);
> > + currencyCode = original.substring(start+11,colonPos);
> > + localizeCurrency = true;
> > + handler.handleVariable(original, colonPos+1, end);
> > } else {
> > // get the environment value and append it
> > handler.handleVariable(original, start+2, end);
> > @@ -318,7 +344,11 @@
> > FlexibleMapAccessor fma = new FlexibleMapAccessor(envName);
> > Object envVal = fma.get(context, locale);
> > if (envVal != null) {
> > - targetBuffer.append(envVal.toString());
> > + if(localizeCurrency) {
> > + targetBuffer.append(UtilFormatOut.formatCurrency(new
Double(envVal.toString()),currencyCode,locale));
> > + } else {
> > + targetBuffer.append(envVal.toString());
> > + }
> > } else {
> > Debug.logWarning("Could not find value in environment for
the name [" + envName + "], inserting nothing.", module);
_______________________________________________
Dev mailing list
[hidden email]
http://lists.ofbiz.org/mailman/listinfo/dev