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 >>>>>