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

class MySubordinate
{

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

  //MySubordinate Attributes
  private $number;

  //MySubordinate Associations
  private $myDriver;

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

  public function __construct($aNumber, $aMyDriver)
  {
    $this->number = $aNumber;
    $didAddMyDriver = $this->setMyDriver($aMyDriver);
    if (!$didAddMyDriver)
    {
      throw new Exception("Unable to create mySubordinate due to myDriver. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html");
    }
  }

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

  public function setNumber($aNumber)
  {
    $wasSet = false;
    $this->number = $aNumber;
    $wasSet = true;
    return $wasSet;
  }

  public function getNumber()
  {
    return $this->number;
  }

  public function getMyDriver()
  {
    return $this->myDriver;
  }

  public function setMyDriver($aNewMyDriver)
  {
    $wasSet = false;
    if ($aNewMyDriver == null)
    {
      //Unable to setMyDriver to null, as mySubordinate must always be associated to a myDriver
      return $wasSet;
    }
    
    $existingMySubordinate = $aNewMyDriver->getMySubordinate();
    if ($existingMySubordinate != null && $this != $existingMySubordinate)
    {
      //Unable to setMyDriver, the current myDriver already has a mySubordinate, which would be orphaned if it were re-assigned
      return $wasSet;
    }
    
    $anOldMyDriver = $this->myDriver;
    $this->myDriver = $aNewMyDriver;
    $this->myDriver->setMySubordinate($this);
    
    if ($anOldMyDriver != null)
    {
      $anOldMyDriver->setMySubordinate(null);
    }
    $wasSet = true;
    return $wasSet;
  }

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

  public function delete()
  {
    $existingMyDriver = $this->myDriver;
    $this->myDriver = null;
    if ($existingMyDriver != null)
    {
      $existingMyDriver->setMySubordinate(null);
    }
  }

}
?>
<?php
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/

class MyDriver
{

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

  //MyDriver Attributes
  private $name;

  //MyDriver Associations
  public $mySubordinate; //until PHP 5.3 (setAccessible)

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

  public function __construct($aName)
  {
    $this->name = $aName;
  }

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

  public function setName($aName)
  {
    $wasSet = false;
    $this->name = $aName;
    $wasSet = true;
    return $wasSet;
  }

  public function getName()
  {
    return $this->name;
  }

  public function getMySubordinate()
  {
    return $this->mySubordinate;
  }

  public function hasMySubordinate()
  {
    $has = $this->mySubordinate != null;
    return $has;
  }

  public function setMySubordinate($aNewMySubordinate)
  {
    $wasSet = false;
    if ($this->mySubordinate != null && $this->mySubordinate != $aNewMySubordinate && $this == $this->mySubordinate->getMyDriver())
    {
      //Unable to setMySubordinate, as existing mySubordinate would become an orphan
      return $wasSet;
    }
    
    $this->mySubordinate = $aNewMySubordinate;
    $anOldMyDriver = $aNewMySubordinate != null ? $aNewMySubordinate->getMyDriver() : null;
    
    if ($this != $anOldMyDriver)
    {
      if ($anOldMyDriver != null)
      {
        $anOldMyDriver->mySubordinate = null;
      }
      if ($this->mySubordinate != null)
      {
        $this->mySubordinate->setMyDriver($this);
      }
    }
    $wasSet = true;
    return $wasSet;
  }

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

  public function delete()
  {
    $existingMySubordinate = $this->mySubordinate;
    $this->mySubordinate = null;
    if ($existingMySubordinate != null)
    {
      $existingMySubordinate->delete();
    }
  }

}
?>