commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rahul Akolkar (JIRA)" <>
Subject [jira] Resolved: (SCXML-73) Propose to evaluate delay expression in Send action before parsing
Date Tue, 17 Jun 2008 22:10:45 GMT


Rahul Akolkar resolved SCXML-73.

    Resolution: Fixed

I've applied a similar patch for this to trunk in r668848 and added you to the contributors

This will be included in the next release (v0.9), but there is no schedule for the next release
yet. Until then, you can try building from SVN trunk.

Thanks for the report.

> Propose to evaluate delay expression in Send action before parsing
> ------------------------------------------------------------------
>                 Key: SCXML-73
>                 URL:
>             Project: Commons SCXML
>          Issue Type: Wish
>    Affects Versions: 0.5, 0.6, 0.7, 0.8
>            Reporter: Elaine Wong
>             Fix For: 0.9
> I am using the Send action to schedule a future event. The current implementation for
Send requires me to express delay either as a number or a string defined in CSS2 format. My
delay can be as long as 1 month, which works out to:
>     2678400s for Jan, Mar, May, Jul, Aug, Oct, Dec
>     2592000s for Apr, Jun, Sep, Nov
>     2419200s for Feb (non-leap years)
> A straightforward way for me to calculate the number of seconds for the current month
is to tap on Java's calendar classes, so I created a helper object to perform that calculation
and tried calling my object in the delay expression, i.e.
>     <send event="charge" delay=",1,0,0,0,0)"/> 
> But this doesn't work. I get the following error message:
> ERROR [log] For input string: "delay" java.lang.NumberFormatException: For input string:
> Looking at the code for Send, I realize that the delay expression does not get evaluated
by the evaluator, unlike the other attributes. I did a little experiment and modified the
Send.execute method to evaluate the delay expression before parsing. ie. 
>     In execute(), I added: 
>         String delayString = (String) eval.eval(ctx, delay); 
>         long wait = parseDelay(delayString, appLog);
>     I then modified parseDelay() to parse delayString instead of delay, i.e. 
>         private long parseDelay(final String delayString, final Log appLog)  throws SCXMLExpressionException
>             long wait = 0L;
>             long multiplier = 1L;  
>             if (!SCXMLHelper.isStringEmpty(delayString)) {
>                 String trimDelay = delayString.trim();
>                 String numericDelay = trimDelay;
>                 .... 
> With these modifications, the above delay expression worked. Although this is a minor
tweak, it is very useful for delay expressions that go beyond a couple of seconds or change
under different scenarios. 
> Can this feature be included in the next release for SCXML?
> Elaine

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message