[stringtemplate-interest] How to use variables inside formatmodifiers

Mohamed Mansour m0.interactive at gmail.com
Mon Aug 3 06:36:01 PDT 2009


Thanks for the reply, I decided to not to implement the calculate method and
place it in my model instead, so if a user needs a new calculation, I would
have to hard code that.
What I am doing is creating a generic reporting tool, previously, for every
financial institution, it requires a specific report to be sent back to the
bank. There are over 50 of them (where each one is a big module of code
itself) and they keep on expanding. I decided, as an experiment, to remove
all the legacy code and use String template which is a single module to do
what the other 50 modules has done. And it is working perfectly.

I was really sad when I wanted to break the model view separation, but I
wanted to dynamically alter the model.

Thanks for all your help! I am going to stick with the strict model / view
separation, and figure out different ways to generically do my task.

Regards,
Mohamed Mansour


On Mon, Aug 3, 2009 at 5:36 AM, Koerner, Ron <ron.koerner at wincor-nixdorf.com
> wrote:

>  Hi Mohamed,
>
> actually it is the philosophy of StringTemplate that templates don't do
> calculations other than what is needed for display. So I fear it is not the
> right tool for your task, since you require something which builds a page
> model (all data displayed on the generated page) from your business model
> (all data the application provides) and something which generates a visible
> page from the page model.
> StringTemplate only performs the latter job. If you want to use ST anyway
> you need to build something which takes some userdefined rules/calculations
> and generates a page model out of the business model.
>
> If you prefer a very dirty hack: create an object like:
>
> class Calculator implements Map { public String get(String expr) { return
> eval(expr); }  /* implement dummies for the other operations */ }
>
> Add a calculator to your page model:
> st.setAttribute("calc",new Calculator());
>
> Use the calculator in your template:
>
> $calc.({$a$+$b$})$
>
> Just to make clear: this is a very very dirty hack and violates the
> StringTemplate philosophy in ways which could bring the wrath of the god(s)
> of model/view-separation upon you or me and may or may not turn the one who
> actually implements the above into an appropriate heap of dust.
> Also Terence might not invite you to dinner anymore...
>
> Regards,
> Ron
>
>  ------------------------------
>  *From:* stringtemplate-interest-bounces at antlr.org [mailto:
> stringtemplate-interest-bounces at antlr.org] *On Behalf Of *Mohamed Mansour
> *Sent:* Friday, July 31, 2009 8:27 PM
> *To:* Jim Idle
> *Cc:* stringtemplate-interest at antlr.org
> *Subject:* Re: [stringtemplate-interest] How to use variables inside
> formatmodifiers
>
> Hmm, that would be unfortunate. I can't use this kind of approach then. I
> am trying to create a generic "Report" where every user can do whatever they
> want with it. If they wanted to add 10 to the result to any variable, they
> could. But we can't do that with StringTemplate.
> I guess that is the limitation of StringTemplate.
>
> Isn't there any way I can make it work, like a hack? A user can modify a
> variable by appending(adding) a number to it. (simply scenario)
>
> Thanks,
>
> -- Mohamed Mansour
>
>
> On Fri, Jul 31, 2009 at 2:16 PM, Jim Idle <jimi at temporal-wave.com> wrote:
>
>>   Mohamed Mansour wrote:
>>
>> Hello,
>> I have been using StringTemplate to produce stylized report files. Some
>> variables need to be formatted someway, for example if I want to uppercase a
>> variable I do, therefore I setup an attribute renderer:
>> $foo;format="uppercase"$
>>
>> In my specific case I would need to apply more than one formatter (more
>> than one attribute renderer for a variable), so I created many attribute
>> renders and I can process them like:
>> $foo;format="uppercase|fixedlength:10:x:R|lowercase"$ If you notice a
>> modifer could have parameters ( with colons as seen with fixedlength)
>>
>> So if $foo is "123aBc" it will return "XXXX123abc", the above works
>> perfectly fine
>>
>> My main problem is that, some parameters in my format modifiers need to be
>> ST variables, for example, I would need to add a number:
>> $numA;format="calculate:+:$numB$"$
>>
>> If numA = 10, and numB = 5, the formatter will return15. But my problem is
>> that, it treats the variables as a string doesn't actually give me the exact
>> value of the variable.
>>
>> How can I pass variables in the "format" area?
>>
>> Calculations need to be performed before setting the values in the
>> templates otherwise you are breaking the model/view separation that
>> StringTemplate is as strict about as it can be. In other words you should
>> not be trying to do this.
>>
>> The attribute renderer while powerful, has to be used carefully so that
>> you do not break this  separation as it is kind of a back door (the only way
>> to close it would be to implement a generic formatting engine and get rid of
>> attribute renderers, but that is a lot of code bloat of course.
>>
>> Jim
>>
>> _______________________________________________
>> stringtemplate-interest mailing list
>> stringtemplate-interest at antlr.org
>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>>
>>
> ------------------------------
> WINCOR NIXDORF International GmbH
> Sitz der Gesellschaft: Paderborn
> Registergericht Paderborn HRB 3507
> Geschäftsführer: Eckard Heidloff (Vorsitzender), Stefan Auerbach, Dr.
> Jürgen Wunram
> Vorsitzender des Aufsichtsrats: Karl-Heinz Stiller
> Steuernummer: 339/5884/0020 - Ust-ID Nr.: DE812927716 - WEEE-Reg.-Nr.
> DE44477193
>
> Diese E-Mail enthält vertrauliche Informationen. Wenn Sie nicht der
> richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben,
> informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail.
> Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist
> nicht gestattet.
>
> This e-mail may contain confidential information. If you are not the
> intended recipient (or have received this e-mail in error) please notify the
> sender immediately and destroy this e-mail. Any unauthorised copying,
> disclosure or distribution of the material in this e-mail is strictly
> forbidden.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/stringtemplate-interest/attachments/20090803/c61875f9/attachment-0001.html 


More information about the stringtemplate-interest mailing list