/**
  * Fire the specified transition.
  *
  * @param fsm the involved finite state machine
  * @param sender the event sender
  * @param condition the condition
  * @param params the event parameters
  */
 public void fireTransition(
     FiniteStateMachineT fsm, Object sender, ConditionT condition, Params params) {
   if (this.transitions.containsKey(fsm.getState())) {
     this.transitions.get(fsm.getState()).fireTransition(fsm, sender, condition, params);
   } else {
     throw new IllegalArgumentException(
         "No handler registered for condition " + condition + " in state " + fsm.getState());
   }
 }