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


class MySubordinate:
    def __init__(self, aNumber, aMyDriver):
        self._number = aNumber
        self._myDriver = None
        if not self.setMyDriver(aMyDriver):
            raise RuntimeError("Unable to create mySubordinate due to myDriver. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html")

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

    def getNumber(self):
        return self._number

    def getMyDriver(self):
        return self._myDriver

    def setMyDriver(self, aNewMyDriver):
        if aNewMyDriver is None:
            return False
        existingMySubordinate = aNewMyDriver.getMySubordinate()
        if existingMySubordinate is not None and existingMySubordinate is not self:
            return False
        anOldMyDriver = self._myDriver
        self._myDriver = aNewMyDriver
        self._myDriver.setMySubordinate(self)
        if anOldMyDriver is not None:
            anOldMyDriver.setMySubordinate(None)
        return True

    def delete(self):
        existingMyDriver = self._myDriver
        self._myDriver = None
        if existingMyDriver is not None:
            existingMyDriver.setMySubordinate(None)

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

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


class MyDriver:
    def __init__(self, aName):
        self._name = aName
        self._mySubordinate = None

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

    def getName(self):
        return self._name

    def getMySubordinate(self):
        return self._mySubordinate

    def hasMySubordinate(self):
        return self._mySubordinate is not None

    def setMySubordinate(self, aNewMySubordinate):
        if self._mySubordinate is not None and self._mySubordinate is not aNewMySubordinate and self._mySubordinate.getMyDriver() is self:
            return False
        self._mySubordinate = aNewMySubordinate
        anOldMyDriver = aNewMySubordinate.getMyDriver() if aNewMySubordinate is not None else None
        if anOldMyDriver is not self:
            if anOldMyDriver is not None:
                anOldMyDriver._mySubordinate = None
            if self._mySubordinate is not None:
                self._mySubordinate.setMyDriver(self)
        return True

    def delete(self):
        existingMySubordinate = self._mySubordinate
        self._mySubordinate = None
        if existingMySubordinate is not None:
            existingMySubordinate.delete()

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