Provide a state machine support class to allow for delegation.
--------------------------------------------------------------

                 Key: SCXML-47
                 URL: https://issues.apache.org/jira/browse/SCXML-47
             Project: Commons SCXML
          Issue Type: Improvement
            Reporter: Michael Heuer
            Priority: Minor


This is not completely thought out yet, but if folks like the idea I might 
persue it further.

I would like to use AbstractStateMachine but cannot extend from it:

class B extends A /*, AbstractStateMachine */ {
  // copy source from AbstractStateMachine here
}


I propose here a StateMachineSupport class that provides for use by subclassing 
and for use by delegation.  The constructors are a little messy, but in the end 
I have

public class StateMachineSupport {
  // use by subclassing
  protected StateMachineSupport(...) {
  }

  // use by delegation
  public StateMachineSupport(Object delegator, ...) {
  }

  // ... methods from AbstractStateMachine
}

public abstract class AbstractStateMachine extends StateMachineSupport {
  protected AbstractStateMachine(...) {
    super(...);
  }
}


// use by subclassing
class ConcreteStateMachine extends AbstractStateMachine {
  ConcreteStateMachine() {
    super(..."stopwatch.xml");
  }

  public void reset() { ... }
  public void running() { ... }
  public void paused() { ... }
  public void stopped() { ... }
}

// use by delegation
class DelegatingStateMachine extends SomethingElse {
  StateMachineSupport delegate;

  DelegatingStateMachine() {
    delegate = new StateMachineSupport(this, ..."stopwatch.xml");
  }

  public void reset() { ... }
  public void running() { ... }
  public void paused() { ... }
  public void stopped() { ... }
}

StateMachineSupport.java, AbstractStateMachine2.java, 
StateMachineSupportTest.java, and AbstractStateMachine2Test.java attached.

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


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to