Uploaded image for project: 'Commons SCXML'
  1. Commons SCXML
  2. SCXML-73

Propose to evaluate delay expression in Send action before parsing

    Details

    • Type: Wish
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.5, 0.6, 0.7, 0.8
    • Fix Version/s: 0.9
    • Labels:
      None

      Description

      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

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              wongkl Elaine Wong
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: