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

class Light
{

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

  //Light State Machines
  private static $StatusOn = 1;
  private static $StatusOff = 2;
  private static $StatusOnNull = 3;
  private static $StatusOnSemiOn = 4;
  private static $StatusOnFullOn = 5;
  private $status;
  private $statusOn;

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

  public function __construct()
  {
    $this->setStatusOn(self::$StatusOnNull);
    $this->setStatus(self::$StatusOn);
  }

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

  public function getStatusFullName()
  {
    $answer = $this->getStatus();
    if ($this->statusOn != self::$StatusOnNull) { $answer .= "." . $this->getStatusOn(); }
    return $answer;
  }

  public function getStatus()
  {
    if ($this->status == self::$StatusOn) { return "StatusOn"; }
    elseif ($this->status == self::$StatusOff) { return "StatusOff"; }
    return null;
  }

  public function getStatusOn()
  {
    if ($this->statusOn == self::$StatusOnNull) { return "StatusOnNull"; }
    elseif ($this->statusOn == self::$StatusOnSemiOn) { return "StatusOnSemiOn"; }
    elseif ($this->statusOn == self::$StatusOnFullOn) { return "StatusOnFullOn"; }
    return null;
  }

  public function flip()
  {
    $wasEventProcessed = false;
    
    $aStatus = $this->status;
    if ($aStatus == self::$StatusOn)
    {
      $this->exitStatus();
      $this->setStatus(self::$StatusOff);
      $wasEventProcessed = true;
    }
    elseif ($aStatus == self::$StatusOff)
    {
      $this->setStatus(self::$StatusOn);
      $wasEventProcessed = true;
    }
    return $wasEventProcessed;
  }

  private function enterOn()
  {
    $wasEventProcessed = false;
    
    $aStatusOn = $this->statusOn;
    if ($aStatusOn == self::$StatusOnNull)
    {
      $this->setStatusOn(self::$StatusOnSemiOn);
      $wasEventProcessed = true;
    }
    return $wasEventProcessed;
  }

  private function exitOn()
  {
    $wasEventProcessed = false;
    
    $aStatusOn = $this->statusOn;
    if ($aStatusOn == self::$StatusOnSemiOn)
    {
      $this->setStatusOn(self::$StatusOnNull);
      $wasEventProcessed = true;
    }
    elseif ($aStatusOn == self::$StatusOnFullOn)
    {
      $this->setStatusOn(self::$StatusOnNull);
      $wasEventProcessed = true;
    }
    return $wasEventProcessed;
  }

  private function exitStatus()
  {
    if ($this->status == self::$StatusOn)
    {
      print("Tracing state StatusOn exit action(s)");
      $this->exitOn();
    }
  }

  private function setStatus($aStatus)
  {
    $this->status = $aStatus;

    // entry actions and do activities
    if ($this->status == self::$StatusOn)
    {
      print("Tracing state StatusOn entry action(s)");
      if ($this->statusOn == self::$StatusOnNull) { $this->setStatusOn(self::$StatusOnSemiOn); }
    }
  }

  private function setStatusOn($aStatusOn)
  {
    $this->statusOn = $aStatusOn;
    if ($this->status != self::$StatusOn && $aStatusOn != self::$StatusOnNull) { $this->setStatus(self::$StatusOn); }
  }

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

  public function delete()
  {}

}
?>
