transformations in FLUID-4695

Antranig Basman antranig.basman at colorado.edu
Tue May 8 07:25:00 UTC 2012


Thanks for these reports, Anastasia - I've fixed these issues in my branch FLUID-4695, some notes inline.

On 07/05/2012 15:29, Cheetham, Anastasia wrote:
>
> On 2012-05-07, at 8:26 AM, Antranig Basman wrote:
>
>> do try it out and let me know what further problems you run into.
>
>
> Hi, Antranig,
>
> Thanks for your changes. Cindy and I spent some time today updating the AfAStore to use the new model transformation code. She pushed the work to her branch:
>
> 	https://github.com/cindyli/infusion/tree/FLUID-1653
>
> Almost everything is working now, but we did encounter a few problems :
>
> 1) The requirement for a default value for the valueMapper: In a situation where the source model doesn't even mention a given setting, the transformation seems to want to use the 'defaultInputValue' to set a default output value. What we want is for "no input" to produce "no output." For example, if the UIO settings don't mention a text font at all, we don't want to have to choose some default font family to put in the AfA settings; we want to leave it out.

This is now resolved through special support for valueMapper options members named "undefinedInputValue" and 
"undefinedOutputValue". These have the effects that it would be possible to have, were it legal to write the 
elements
inputValue: undefined     and
outpuValue: undefined

Note that the "undefined" value is special since it is not a legal member of a JSON structure for 
interchange, whilst "null" is. So to ensure that our model transformation rules can always be encoded as 
valid JSON even whilst expressing rules for matching the "undefined" value, we require special support of 
this form. Note that the effect of "undefinedInputValue" can be had in the short form by using a key of 
"undefined" - however, much like "falsy" checks in JavaScript, this shouldn't be used in cases where there 
is any possibility of conflict with the actual string value named "undefined" - for a real world instance of 
this kind of problem see the following posting about an "employee named Null"

http://stackoverflow.com/questions/4456438/how-can-i-pass-the-string-null-through-wsdl-soap-from-as3-to-coldfusion-web

Even worse than a "wooden leg named Smith". In general the "long form" of the options (that is, options as a 
list, with inputValue as a value rather than as a key, like so

             options: [ {
                     inputValue: true,
                     outputPath: "trueCATT"
                 }, {
                     inputValue: false,
                     outputPath: "falseCATT"
                 }
              ]

) are recommended where there is any possibility of confusion. These, for example, definitely only match the 
boolean values true and false and not their string equivalents. There are now a variety of tests written in 
both styles.


> 2) When your branch is merged with master (without any of our changes), we're getting an error when we run the non-fat-panel tests (FullNoPreviewUIOptions-test.html and FullPreviewUIOptions-test.html). The error doesn't happen with the fat panel tests, but we are getting the same problem in our branch with the fat panel (which has both master and your branch).

Thanks for catching this - this is a side-effect of the change which revealed
http://issues.fluidproject.org/browse/FLUID-4706 - I decided to just fix this in the framework now, so that 
from now on, "noexpand" simply means "noexpand" and not also "nomerge", which is the expectation that all 
the flavours of UIOptions had, through different causes. This change of meaning shouldn't affect any other 
framework code but may impact some uses in CSpace.

> 3) fluid.model.transformWithRules() used to accept an array of rulesets. This doesn't seem to work anymore; we're not sure if that was intentional. We're able to cumulatively apply rule sets ourselves, so it's not that big a deal if the framework doesn't do it directly.

This was deliberate, since with model transformation going into the core framework, the control over the 
exact workload of transformation needs to be more fine-grained. However, I added back in a dedicated 
function named fluid.model.transform.sequence which has the effect of the former call.


Let me know how you get on with these changes tomorrow,
A.


More information about the fluid-work mailing list