commons-issues mailing list archives

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

     [ 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.8)
                   0.9

> 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, 1.0
>            Reporter: Elaine Wong
>             Fix For: 0.5, 0.6, 0.7, 0.9, 1.0
>
>   Original Estimate: 0.25h
>  Remaining Estimate: 0.25h
>
> 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.


Mime
View raw message