commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Elaine Wong (JIRA)" <>
Subject [jira] Commented: (SCXML-73) Propose to evaluate delay expression in Send action before parsing
Date Wed, 18 Jun 2008 01:24:45 GMT


Elaine Wong commented on SCXML-73:

Hi Rahul,

Thanks. I'll update my code from the repository.

And you're welcome - SCXML is a neat effort.


> 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