/**
  * Constructor for timed sequences
  *
  * @param msb the model state broker
  * @param actionURI the URI of the action sequence in the schedule ontology
  * @param firstAction the first action in the sequence
  * @param time the time at which the sequence starts
  * @param increment the time gap between consecutive members of the sequence
  * @throws ScheduleException
  */
 public SequentialActionGroup(
     ModelStateBroker msb,
     URI actionURI,
     AbstractScheduledAction firstAction,
     double time,
     double increment)
     throws ScheduleException {
   super(msb, actionURI, time);
   init(firstAction);
   if (increment <= 0.0 || Double.isNaN(increment) || Double.isInfinite(increment)) {
     throw new ScheduleException(
         actionURI, "non-positive, infinite, or not-a-number increment: " + increment);
   }
   this.increment = increment;
   firstAction.synchroniseWith(this);
 }
 /**
  * Constructor
  *
  * @param msb the model state broker
  * @param actionURI the URI of the action sequence in the schedule ontology
  * @param assertedNonTimed <code>true</code> if the action is asserted non-timed
  * @param firstAction the first action in the sequence
  * @throws ScheduleException
  */
 public SequentialActionGroup(
     ModelStateBroker msb,
     URI actionURI,
     boolean assertedNonTimed,
     AbstractScheduledAction firstAction)
     throws ScheduleException {
   super(msb, actionURI, assertedNonTimed);
   init(firstAction);
   increment = null;
   if (firstAction instanceof SequentialActionGroup) {
     synchroniseWith(firstAction);
   } else if (firstAction.isTimed()) {
     throw new ScheduleException(
         actionURI, "Non-timed action sequence with timed sub-action " + firstAction.getURI());
   }
 }