commons-issues mailing list archives

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

                 Key: SCXML-73
             Project: Commons SCXML
          Issue Type: Wish
    Affects Versions: 0.7, 0.6, 0.5, 0.8, 1.0
            Reporter: Elaine Wong
             Fix For: 0.8, 1.0, 0.7, 0.6, 0.5

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: ",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?


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

View raw message