Ah, and just to be clear: I also agree with the comments in Confluence about deprecating other elements as well (I actually didn't include them in my list but I agree they should be removed).
Jacopo On Mar 8, 2012, at 4:18 PM, Jacopo Cappellato wrote: > A) I would like to see removed all the attributes "map-name" and just leave > the "field" attribute; for example: > > <clear-field field="foo" map-name="parameters"/> > > can be: > > <clear-field field="parameters.foo"/> > > B) instead of: > > <fail-property resource="ErrorMessages" property="FooError" /> > > we could have > > <fail-property property="ErrorMessages.FooError" /> > > C) instead of: > > <request-to-field> > <session-to-field> > > we could have: > > <set field="foo" from="parameters.request.inputFoo"/> > <set field="foo" from="parameters.session.inputFoo"/> > > D) similarly deprecate (replaced by "set"): > > <field-to-env> > <field-to-field> > <field-to-list> > <field-to-request> > <field-to-session> > <property-to-field> > <now-timestamp-to-env> > <now-date-to-env> > <map-to-map> > <list-to-list> > <string-to-field> > <string-to-list> > <to-string> > <webapp-property-to-field> > <set-current-user-login> > > I don't have more time today but there may be others :-) > > Jacopo > > > On Mar 8, 2012, at 3:16 PM, Nicolas Malin wrote: > >> Ok thanks adrian >> >> Nicolas >> Le 08/03/2012 14:46, adrian.c...@sandglass-software.com a écrit : >>> Voting on each item will not work because there are too many. We can >>> discuss things here and when there seems to be general agreement, I will >>> ask for a vote on the entire grammar. When that vote passes, I will include >>> the proposals in the grammar (move them out of the blue boxes and into the >>> normal text), and change the status from draft to final. >>> >>> -Adrian >>> >>> Quoting Nicolas Malin <malin.nico...@librenberry.net>: >>> >>>> Thanks adrian for this works, >>>> >>>> I will add my propositions. >>>> >>>> After all proposition will include on wiki, how to you proceed to approve >>>> each ? A vote on mailing list for each ? >>>> >>>> Nicolas >>>> >>>> Le 07/03/2012 19:18, Adrian Crum a écrit : >>>>> I created a Wiki page to help get things started: >>>>> >>>>> https://cwiki.apache.org/confluence/display/OFBADMIN/Mini-language+Reference >>>>> I put just enough information in it to work on the layout. I will >>>>> continue working on it when I have time. Everyone with write access is >>>>> welcome to work on it also. The information is based on the mini-language >>>>> Java code - which is the ultimate authority. The schemas are inaccurate - >>>>> they should be used only for looking up schema-supplied default values. >>>>> >>>>> The goal is to document the current mini-language grammar, and add >>>>> proposed changes. If a proposal is approved, then it can get a green >>>>> check mark. If a proposal is vetoed, then it can get a red X. When >>>>> everyone agrees on the grammar, the document will be updated, and it will >>>>> move out of the draft stage. Then the job will be to work on the Java and >>>>> XML code to make it match the grammar. >>>>> >>>>> I put a couple of proposals in the page to help get things started. >>>>> >>>>> Let me know what you think. >>>>> >>>>> -Adrian >>>>> >>>>> On 3/6/2012 9:42 AM, Adrian Crum wrote: >>>>>> <set field="field4" from="parameters.inputField1 + 10"/> <!-- use >>>>>> Minilang built-in and efficient support: not currently supported but >>>>>> maybe something to consider in the future --> >>>>>> >>>>>> The from attribute contains a UEL expression, so it is currently >>>>>> supported. >>>>>> >>>>>> -Adrian >>>>>> >>>>>> On 3/6/2012 9:33 AM, Jacopo Cappellato wrote: >>>>>>> On Mar 6, 2012, at 10:03 AM, Adrian Crum wrote: >>>>>>> >>>>>>>> Replacing FSE with Groovy is a bad idea. Adam and I optimized FSE so >>>>>>>> that it is very lightweight and fast. I also optimized the UEL >>>>>>>> integration so there is very little overhead in the evaluation >>>>>>>> process. Switching everything to Groovy will slow things down and >>>>>>>> increase memory usage. Also keep in mind that Groovy creates a class >>>>>>>> for every script, so we will run out of permgen space again. >>>>>>> Ok, makes perfect sense, thank you. >>>>>>> >>>>>>>> I think a wiser strategy would be to make mini-lang as feature >>>>>>>> complete as possible, and include a from-script attribute for any >>>>>>>> feature gaps. In other words, use from-script as a last resort - >>>>>>>> because it is costly. >>>>>>> +1: by the way we could still use the "from" attribute for both: >>>>>>> >>>>>>> <set field="field4" from="parameters.inputField1"/> <!-- use Minilang >>>>>>> built-in and efficient support --> >>>>>>> <set field="field4" from="parameters.inputField1 + 10"/> <!-- use >>>>>>> Minilang built-in and efficient support: not currently supported but >>>>>>> maybe something to consider in the future --> >>>>>>> <set field="field4" from="groovy: parameters.inputField1 + 10"/> <!-- >>>>>>> use Groovy (inefficient) --> >>>>>>> >>>>>>> Jacopo >>>>>>> >>>>>>>> >>>>>>>> -Adrian >>>>>>>> >>>>>>>> On 3/6/2012 8:53 AM, Jacopo Cappellato wrote: >>>>>>>>> On Mar 6, 2012, at 9:32 AM, Adrian Crum wrote: >>>>>>>>> >>>>>>>>>> I don't understand what you mean by supporting a limited number of >>>>>>>>>> types. Currently, mini-lang supports any type - thanks to the >>>>>>>>>> conversion framework. >>>>>>>>> The conversion framework is fine; I was thinking that we could >>>>>>>>> implicitly (by default) treat in Minilang all the numbers as >>>>>>>>> BigDecimals, all the strings as GStrings/Expandable Strings; where >>>>>>>>> special conversions are required than the type can be specified. >>>>>>>>> >>>>>>>>>> I like the idea of changing the from-field attribute to from. I >>>>>>>>>> would like to see a from-script attribute added: >>>>>>>>>> >>>>>>>>>> <set field="field4" from-script="groovy: parameters.inputField1 + >>>>>>>>>> 10"/><!-- Use Groovy --> >>>>>>>>>> >>>>>>>>> and why not: >>>>>>>>> >>>>>>>>> <set field="field4" from="parameters.inputField1"/><!-- Use Groovy >>>>>>>>> internally: refactor OFBiz custom code to delegate on Groovy the >>>>>>>>> evaluation of simple assignments; this could potentially replace >>>>>>>>> FlexibleStringExpander related code --> >>>>>>>>> <set field="field4" from="groovy: parameters.inputField1 + 10"/><!-- >>>>>>>>> Use Groovy explicitly to evaluate the expression (use the same "from" >>>>>>>>> attribute instead of a separate "from-script")--> >>>>>>>>> <set field="field4" from="parameters.inputField1 + 10"/><!-- Use >>>>>>>>> Groovy (by default, configurable) to evaluate the expression--> >>>>>>>>> <set field="field4" from="beanshell: parameters.inputField1 + >>>>>>>>> 10"/><!-- Use Beanshell to evaluate the expression--> >>>>>>>>> >>>>>>>>> ? >>>>>>>>> >>>>>>>>>> Then we can remove script support from expressions, which will >>>>>>>>>> eliminate ugly hacks like: >>>>>>>>>> >>>>>>>>>> <set field="field4" value="${groovy: parameters.inputField1 + 10}"/> >>>>>>>>>> >>>>>>>>> +1 >>>>>>>>> >>>>>>>>> Jacopo >>>>>>>>> >>>>>>>>>> -Adrian >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 3/6/2012 7:31 AM, Jacopo Cappellato wrote: >>>>>>>>>>> I am a big fan of Minilang too. >>>>>>>>>>> The "evolution" strategy that I would like to see implemented for >>>>>>>>>>> Minilang is actually the same one I would liketo see applied to >>>>>>>>>>> OFBiz framework in general: review the current usage of the tool, >>>>>>>>>>> fix existing usage for consistency (upgrade old code to use newer >>>>>>>>>>> mechanisms offered by the tool), get rid of unused or old >>>>>>>>>>> mechanisms in the attempt to slim down the size of the framework >>>>>>>>>>> code, unify/simplify mechanisms based on lesson learned; all of >>>>>>>>>>> this could be useful even to prepare the future migration to a >>>>>>>>>>> different tool (e.g. Groovy). >>>>>>>>>>> >>>>>>>>>>> I know that it is very vague and doesn't add much to this thread >>>>>>>>>>> but I like the approach suggested by Adrian. >>>>>>>>>>> In my opinion, a good way to define a new version of the "set" >>>>>>>>>>> operation could be that of analyzing how we are currently using the >>>>>>>>>>> operation in OFBiz: as a starting point we could start by searching >>>>>>>>>>> all occurrences of "<set " string in OFBiz, then review them and >>>>>>>>>>> see different patterns; discuss and define the few ones that we >>>>>>>>>>> like more, convert all code to use them consistently, then (or in >>>>>>>>>>> the same phase) define the new element to better implement the >>>>>>>>>>> patterns that we like. >>>>>>>>>>> >>>>>>>>>>> And now I am switching to the "brainstorming" mode :-) >>>>>>>>>>> >>>>>>>>>>> Kind regards, >>>>>>>>>>> >>>>>>>>>>> Jacopo >>>>>>>>>>> >>>>>>>>>>> ======================== >>>>>>>>>>> <brainstorming> >>>>>>>>>>> I would like to have a "set" operation that implements some of the >>>>>>>>>>> ideas of the "configure by exception" concept. >>>>>>>>>>> As regards the type supported, but pending the review of existing >>>>>>>>>>> usage, we may consider to only support these: >>>>>>>>>>> >>>>>>>>>>> * Object >>>>>>>>>>> * List >>>>>>>>>>> * Map >>>>>>>>>>> * BigDecimal/BigInteger (all numbers in Minilang should be treated >>>>>>>>>>> as BigDecimal; no support for Integer, Float etc...) >>>>>>>>>>> * String (expander i.e. the equivalent of GString in Groovy) >>>>>>>>>>> * a date object >>>>>>>>>>> >>>>>>>>>>> Then we could get rid of the "from-field" attribute and replace it >>>>>>>>>>> with a "from" attribute that can take as input a single field (as >>>>>>>>>>> it is now) or an expression; some examples (all the following are >>>>>>>>>>> evaluated using Groovy except where a different language is >>>>>>>>>>> specified i.e. default scripting language): >>>>>>>>>>> >>>>>>>>>>> <set field="field1" from="parameters.inputField1"/> // field1 >>>>>>>>>>> will have the same type of inputField1 >>>>>>>>>>> <set field="field2" from="parameters.inputField1 + >>>>>>>>>>> parameters.inputField2"/> // if inputField1 and inputField2 are >>>>>>>>>>> numbers then field2 will be the BigDecimal sum of the two >>>>>>>>>>> <set field="field3" from="parameters.inputField1 * 10"/> >>>>>>>>>>> <set field="field4" from="script:bsh parameters.inputField1 + 10"/> >>>>>>>>>>> // use Beanshell >>>>>>>>>>> <set field="field5" from="parameters.inputField1" >>>>>>>>>>> type="BigDecimal"/> // if inputField1 is a string representation >>>>>>>>>>> of a number we can convert with the explicit definition of the type >>>>>>>>>>> >>>>>>>>>>> For the constant values (I am not sure if it is a good idea, but >>>>>>>>>>> for now I will throw it out): >>>>>>>>>>> >>>>>>>>>>> <set field="stringField" value="This is a string"/> >>>>>>>>>>> <set field="stringField" value="This is a string with a >>>>>>>>>>> ${variable}"/> >>>>>>>>>>> // the following two are equivalent >>>>>>>>>>> <set field="bigDecimalField" value="100"/> // the system attempt >>>>>>>>>>> to parse "100" as a number first (BigDecimal) and then as a string >>>>>>>>>>> <set field="bigDecimalField" value="100" type="BigDecimal"/> >>>>>>>>>>> <set field="stringField" value="100" type="String"/> // treat >>>>>>>>>>> the field as a string >>>>>>>>>>> >>>>>>>>>>> </brainstorming> >>>>>>>>>>> On Mar 5, 2012, at 9:07 PM, Adrian Crum wrote: >>>>>>>>>>> >>>>>>>>>>>> I am not one of those people. I use mini-lang almost exclusively. >>>>>>>>>>>> >>>>>>>>>>>> -Adrian >>>>>>>>>>>> >>>>>>>>>>>> On 3/5/2012 7:46 PM, Anil Patel wrote: >>>>>>>>>>>>> Adrian, >>>>>>>>>>>>> Thanks for starting this thread. >>>>>>>>>>>>> >>>>>>>>>>>>> While we all love mini-lang, I am wondering if we should really >>>>>>>>>>>>> ask ourselves if we really want to overhaul mini-lang or should >>>>>>>>>>>>> we consider alternates. From what I know, Not many people like to >>>>>>>>>>>>> build application using mini lang. Many end up using Java or >>>>>>>>>>>>> Groovy. >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks and Regards >>>>>>>>>>>>> Anil Patel >>>>>>>>>>>>> HotWax Media Inc >>>>>>>>>>>>> >>>>>>>>>>>>> On Mar 5, 2012, at 9:47 AM, Adrian Crum wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Mini-language has evolved a lot over the years. Most of the >>>>>>>>>>>>>> development has occurred on an as-needed basis, so there is no >>>>>>>>>>>>>> clear design or implementation - things just get tacked on over >>>>>>>>>>>>>> time. >>>>>>>>>>>>>> >>>>>>>>>>>>>> A recent discussion has opened up the possibility to rework the >>>>>>>>>>>>>> mini-language<set> element. From my perspective, that task >>>>>>>>>>>>>> is long overdue. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Also, the schemas are out of date, and they are unnecessarily >>>>>>>>>>>>>> complicated. So, those need a thorough going over. >>>>>>>>>>>>>> >>>>>>>>>>>>>> While we are at it, why don't we create a draft design document >>>>>>>>>>>>>> based on the current implementation, and then use it to look for >>>>>>>>>>>>>> other ways mini-language can be improved? We can all offer >>>>>>>>>>>>>> suggestions and comments, agree on a final design, finalize the >>>>>>>>>>>>>> draft, and then implement it in code. The design document then >>>>>>>>>>>>>> becomes the developer's reference. >>>>>>>>>>>>>> >>>>>>>>>>>>>> What do you think? >>>>>>>>>>>>>> >>>>>>>>>>>>>> -Adrian >>>>>>>>>>>>>> >>>> >>>> >>>> -- >>>> Nicolas MALIN >>>> Consultant >>>> Tél : 06.17.66.40.06 >>>> Site projet : http://www.neogia.org/ >>>> ------- >>>> Société LibrenBerry >>>> Tél : 02.48.02.56.12 >>>> Site : http://www.librenberry.net/ >>>> >>>> >>> >>> >> >> >> -- >> Nicolas MALIN >> Consultant >> Tél : 06.17.66.40.06 >> Site projet : http://www.neogia.org/ >> ------- >> Société LibrenBerry >> Tél : 02.48.02.56.12 >> Site : http://www.librenberry.net/ >> >