<?php
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE @UMPLE_VERSION@ modeling language!*/

class QueuedSMwithConcurrentStates_2
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //QueuedSMwithConcurrentStates_2 State Machines
  private static $SmState1 = 1;
  private static $SmState2 = 2;
  private static $SmState3 = 3;
  private static $SmState1SubState1Null = 4;
  private static $SmState1SubState1SubState1 = 5;
  private static $SmState1SubState2Null = 6;
  private static $SmState1SubState2SubState2 = 7;
  private $sm;
  private $smState1SubState1;
  private $smState1SubState2;

  //QueuedSMwithConcurrentStates_2 Do Activity Threads
  private $doActivitySmState2Thread = null;
  private $doActivitySmState3Thread = null;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public function __construct()
  {
    $this->setSmState1SubState1(self::$SmState1SubState1Null);
    $this->setSmState1SubState2(self::$SmState1SubState2Null);
    $this->setSm(self::$SmState1);
  }

  //------------------------
  // INTERFACE
  //------------------------

  public function getSmFullName()
  {
    $answer = $this->getSm();
    if ($this->smState1SubState1 != self::$SmState1SubState1Null) { $answer .= "." . $this->getSmState1SubState1(); }
    if ($this->smState1SubState2 != self::$SmState1SubState2Null) { $answer .= "." . $this->getSmState1SubState2(); }
    return $answer;
  }

  public function getSm()
  {
    if ($this->sm == self::$SmState1) { return "SmState1"; }
    elseif ($this->sm == self::$SmState2) { return "SmState2"; }
    elseif ($this->sm == self::$SmState3) { return "SmState3"; }
    return null;
  }

  public function getSmState1SubState1()
  {
    if ($this->smState1SubState1 == self::$SmState1SubState1Null) { return "SmState1SubState1Null"; }
    elseif ($this->smState1SubState1 == self::$SmState1SubState1SubState1) { return "SmState1SubState1SubState1"; }
    return null;
  }

  public function getSmState1SubState2()
  {
    if ($this->smState1SubState2 == self::$SmState1SubState2Null) { return "SmState1SubState2Null"; }
    elseif ($this->smState1SubState2 == self::$SmState1SubState2SubState2) { return "SmState1SubState2SubState2"; }
    return null;
  }

  public function transit()
  {
    $wasEventProcessed = false;
    
    $aSm = $this->sm;
    if ($aSm == self::$SmState1)
    {
      $this->exitSm();
      $this->setSm(self::$SmState2);
      $wasEventProcessed = true;
    }
    return $wasEventProcessed;
  }

  private function enterState1()
  {
    $wasEventProcessed = false;
    
    $aSmState1SubState1 = $this->smState1SubState1;
    $aSmState1SubState2 = $this->smState1SubState2;
    if ($aSmState1SubState1 == self::$SmState1SubState1Null)
    {
      $this->setSmState1SubState1(self::$SmState1SubState1SubState1);
      $wasEventProcessed = true;
    }

    
    if ($aSmState1SubState2 == self::$SmState1SubState2Null)
    {
      $this->setSmState1SubState2(self::$SmState1SubState2SubState2);
      $wasEventProcessed = true;
    }
    return $wasEventProcessed;
  }

  private function exitState1()
  {
    $wasEventProcessed = false;
    
    $aSmState1SubState1 = $this->smState1SubState1;
    $aSmState1SubState2 = $this->smState1SubState2;
    if ($aSmState1SubState1 == self::$SmState1SubState1SubState1)
    {
      $this->setSmState1SubState1(self::$SmState1SubState1Null);
      $wasEventProcessed = true;
    }

    
    if ($aSmState1SubState2 == self::$SmState1SubState2SubState2)
    {
      $this->setSmState1SubState2(self::$SmState1SubState2Null);
      $wasEventProcessed = true;
    }
    return $wasEventProcessed;
  }

  private function exitSm()
  {
    if ($this->sm == self::$SmState1)
    {
      $this->exitState1();
    }
  }

  private function setSm($aSm)
  {
    $this->sm = $aSm;

    // entry actions and do activities
    if ($this->sm == self::$SmState1)
    {
      if ($this->smState1SubState1 == self::$SmState1SubState1Null) { $this->setSmState1SubState1(self::$SmState1SubState1SubState1); }
      if ($this->smState1SubState2 == self::$SmState1SubState2Null) { $this->setSmState1SubState2(self::$SmState1SubState2SubState2); }
    }
    elseif ($this->sm == self::$SmState2)
    {
      doTransition1();
    }
    elseif ($this->sm == self::$SmState3)
    {
      doTransition2();
    }
  }

  private function setSmState1SubState1($aSmState1SubState1)
  {
    $this->smState1SubState1 = $aSmState1SubState1;
    if ($this->sm != self::$SmState1 && $aSmState1SubState1 != self::$SmState1SubState1Null) { $this->setSm(self::$SmState1); }
  }

  private function setSmState1SubState2($aSmState1SubState2)
  {
    $this->smState1SubState2 = $aSmState1SubState2;
    if ($this->sm != self::$SmState1 && $aSmState1SubState2 != self::$SmState1SubState2Null) { $this->setSm(self::$SmState1); }
  }

  public function equals($compareTo)
  {
    return $this == $compareTo;
  }

  public function delete()
  {}

}
?>