[
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.