<?php
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/
class Mentor
{
//------------------------
// MEMBER VARIABLES
//------------------------
//Mentor Attributes
private $name;
//Mentor Associations
private $pupils;
//------------------------
// CONSTRUCTOR
//------------------------
public function __construct($aName)
{
$this->name = $aName;
$this->pupils = array();
}
//------------------------
// INTERFACE
//------------------------
public function setName($aName)
{
$wasSet = false;
$this->name = $aName;
$wasSet = true;
return $wasSet;
}
public function getName()
{
return $this->name;
}
public function getPupil_index($index)
{
$aPupil = $this->pupils[$index];
return $aPupil;
}
public function getPupils()
{
$newPupils = $this->pupils;
return $newPupils;
}
public function numberOfPupils()
{
$number = count($this->pupils);
return $number;
}
public function hasPupils()
{
$has = $this->numberOfPupils() > 0;
return $has;
}
public function indexOfPupil($aPupil)
{
$wasFound = false;
$index = 0;
foreach($this->pupils as $pupil)
{
if ($pupil->equals($aPupil))
{
$wasFound = true;
break;
}
$index += 1;
}
$index = $wasFound ? $index : -1;
return $index;
}
public function isNumberOfPupilsValid()
{
$isValid = $this->numberOfPupils() >= self::minimumNumberOfPupils() && $this->numberOfPupils() <= self::maximumNumberOfPupils();
return $isValid;
}
public static function minimumNumberOfPupils()
{
return 5;
}
public static function maximumNumberOfPupils()
{
return 7;
}
public function addPupilVia($aNumber)
{
if ($this->numberOfPupils() >= self::maximumNumberOfPupils())
{
return null;
}
else
{
return new Pupil($aNumber, $this);
}
}
public function addPupil($aPupil)
{
$wasAdded = false;
if ($this->indexOfPupil($aPupil) !== -1) { return false; }
if ($this->numberOfPupils() >= self::maximumNumberOfPupils())
{
return $wasAdded;
}
$existingMentor = $aPupil->getMentor();
$isNewMentor = $existingMentor != null && $this !== $existingMentor;
if ($isNewMentor && $existingMentor->numberOfPupils() <= self::minimumNumberOfPupils())
{
return $wasAdded;
}
if ($isNewMentor)
{
$aPupil->setMentor($this);
}
else
{
$this->pupils[] = $aPupil;
}
$wasAdded = true;
return $wasAdded;
}
public function removePupil($aPupil)
{
$wasRemoved = false;
//Unable to remove aPupil, as it must always have a mentor
if ($this === $aPupil->getMentor())
{
return $wasRemoved;
}
//mentor already at minimum (5)
if ($this->numberOfPupils() <= self::minimumNumberOfPupils())
{
return $wasRemoved;
}
unset($this->pupils[$this->indexOfPupil($aPupil)]);
$this->pupils = array_values($this->pupils);
$wasRemoved = true;
return $wasRemoved;
}
public function addPupilAt($aPupil, $index)
{
$wasAdded = false;
if($this->addPupil($aPupil))
{
if($index < 0 ) { $index = 0; }
if($index > $this->numberOfPupils()) { $index = $this->numberOfPupils() - 1; }
array_splice($this->pupils, $this->indexOfPupil($aPupil), 1);
array_splice($this->pupils, $index, 0, array($aPupil));
$wasAdded = true;
}
return $wasAdded;
}
public function addOrMovePupilAt($aPupil, $index)
{
$wasAdded = false;
if($this->indexOfPupil($aPupil) !== -1)
{
if($index < 0 ) { $index = 0; }
if($index > $this->numberOfPupils()) { $index = $this->numberOfPupils() - 1; }
array_splice($this->pupils, $this->indexOfPupil($aPupil), 1);
array_splice($this->pupils, $index, 0, array($aPupil));
$wasAdded = true;
}
else
{
$wasAdded = $this->addPupilAt($aPupil, $index);
}
return $wasAdded;
}
public function equals($compareTo)
{
return $this == $compareTo;
}
public function delete()
{
foreach ($this->pupils as $aPupil)
{
$aPupil->delete();
}
}
}
?>
<?php
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/
class Pupil
{
//------------------------
// MEMBER VARIABLES
//------------------------
//Pupil Attributes
private $number;
//Pupil Associations
private $mentor;
//------------------------
// CONSTRUCTOR
//------------------------
public function __construct($aNumber, $aMentor)
{
$this->number = $aNumber;
$didAddMentor = $this->setMentor($aMentor);
if (!$didAddMentor)
{
throw new Exception("Unable to create pupil due to mentor. 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 getMentor()
{
return $this->mentor;
}
public function setMentor($aMentor)
{
$wasSet = false;
//Must provide mentor to pupil
if ($aMentor == null)
{
return $wasSet;
}
//mentor already at maximum (7)
if ($aMentor->numberOfPupils() >= Mentor::maximumNumberOfPupils())
{
return $wasSet;
}
$existingMentor = $this->mentor;
$this->mentor = $aMentor;
if ($existingMentor != null && $existingMentor != $aMentor)
{
$didRemove = $existingMentor->removePupil($this);
if (!$didRemove)
{
$this->mentor = $existingMentor;
return $wasSet;
}
}
$this->mentor->addPupil($this);
$wasSet = true;
return $wasSet;
}
public function equals($compareTo)
{
return $this == $compareTo;
}
public function delete()
{
$placeholderMentor = $this->mentor;
$this->mentor = null;
$placeholderMentor->removePupil($this);
}
}
?>