commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Elaine Wong (JIRA)" <j...@apache.org>
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
                 URL: https://issues.apache.org/jira/browse/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="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