[ 
https://issues.apache.org/jira/browse/SCXML-73?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rahul Akolkar updated SCXML-73:
-------------------------------

    Fix Version/s:     (was: 0.7)
                       (was: 0.6)
                       (was: 0.5)

> Propose to evaluate delay expression in Send action before parsing
> ------------------------------------------------------------------
>
>                 Key: SCXML-73
>                 URL: https://issues.apache.org/jira/browse/SCXML-73
>             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="time.ms(0,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: "time.ms(0,1,0,0,0,0)"
> 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.

Reply via email to