#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.38.0.8942.247e17422 modeling language!


class Student:
    def __init__(self, aNumber, aMentor):
        self._number = aNumber
        self._mentor = None
        if not self.setMentor(aMentor):
            raise RuntimeError("Unable to create student due to mentor. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html")

    def setNumber(self, aNumber):
        self._number = aNumber
        return True

    def getNumber(self):
        return self._number

    def getMentor(self):
        return self._mentor

    def setMentor(self, aNewMentor):
        if aNewMentor is None:
            return False
        existingStudent = aNewMentor.getStudent()
        if existingStudent is not None and existingStudent is not self:
            return False
        anOldMentor = self._mentor
        self._mentor = aNewMentor
        self._mentor.setStudent(self)
        if anOldMentor is not None:
            anOldMentor.setStudent(None)
        return True

    def delete(self):
        existingMentor = self._mentor
        self._mentor = None
        if existingMentor is not None:
            existingMentor.setStudent(None)

    def __str__(self):
        return (super().__str__() + "["
                + "number:" + str(self.getNumber())
                + "]"
                + "\n  mentor = " + ("null" if self.getMentor() is None else format(id(self.getMentor()), "x")))

#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.38.0.8942.247e17422 modeling language!


class Mentor:
    theInstance = None

    def __init__(self):
        if __class__.theInstance is not self:
            raise RuntimeError("Mentor is a singleton, so use Mentor.getInstance()")
        self._name = None
        self._student = None

    @staticmethod
    def getInstance():
        if __class__.theInstance is None:
            __class__.theInstance = __class__.__new__(__class__)
            try:
                __class__.theInstance.__init__()
            except BaseException:
                __class__.theInstance = None
                raise
        return __class__.theInstance

    def setName(self, aName):
        self._name = aName
        return True

    def getName(self):
        return self._name

    def getStudent(self):
        return self._student

    def hasStudent(self):
        return self._student is not None

    def setStudent(self, aNewStudent):
        if self._student is not None and self._student is not aNewStudent and self._student.getMentor() is self:
            return False
        self._student = aNewStudent
        anOldMentor = aNewStudent.getMentor() if aNewStudent is not None else None
        if anOldMentor is not self:
            if anOldMentor is not None:
                anOldMentor._student = None
            if self._student is not None:
                self._student.setMentor(self)
        return True

    def delete(self):
        existingStudent = self._student
        self._student = None
        if existingStudent is not None:
            existingStudent.delete()

    def __str__(self):
        return (super().__str__() + "["
                + "name:" + str(self.getName())
                + "]"
                + "\n  student = " + ("null" if self.getStudent() is None else format(id(self.getStudent()), "x")))