#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../EnumerationTest_1.ump"
from enum import Enum, auto

class Student():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        FullTime = auto()
        PartTime = auto()

    class Grade(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        High = auto()

    class RelationshipStatus(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Single = auto()
        Married = auto()
        Divorced = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../EnumerationTest_2.ump"
from enum import Enum, auto

class X():
    MY_CONST = 100
    xsByMyName = dict()
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Colour(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Red = auto()
        Blue = auto()
        Green = auto()

    #------------------------
    # STATIC VARIABLES
    #------------------------
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X Attributes
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aDefaultAttr):
        self._sm = None
        self._defaultAttr = None
        self._myName = None
        self._defaultAttr = aDefaultAttr
        if not self.setMyName(aMyName) :
            raise RuntimeError ("Cannot create due to duplicate myName. See https://manual.umple.org?RE003ViolationofUniqueness.html")
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def setMyName(self, aMyName):
        wasSet = False
        anOldMyName = self.getMyName()
        if not (anOldMyName is None) and anOldMyName == aMyName :
            return True
        if X.hasWithMyName(aMyName) :
            return wasSet
        self._myName = aMyName
        wasSet = True
        if not (anOldMyName is None) :
            X.xsByMyName.pop(anOldMyName, None)
        X.xsByMyName[aMyName] = self
        return wasSet

    def setDefaultAttr(self, aDefaultAttr):
        wasSet = False
        self._defaultAttr = aDefaultAttr
        wasSet = True
        return wasSet

    def getMyName(self):
        return self._myName

    # Code from template attribute_GetUnique 
    @staticmethod
    def getWithMyName(aMyName):
        return X.xsByMyName.get(aMyName)

    # Code from template attribute_HasUnique 
    @staticmethod
    def hasWithMyName(aMyName):
        return not (X.getWithMyName(aMyName) is None)

    def getDefaultAttr(self):
        return self._defaultAttr

    def getSmFullName(self):
        answer = self._sm.__str__()
        return answer

    def getSm(self):
        return self._sm

    def goToS2(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s1 :
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setSm(self, aSm):
        self._sm = aSm

    def delete(self):
        X.xsByMyName.pop(self.getMyName(), None)

    def __str__(self):
        return str(super().__str__()) + "[" + "myName" + ":" + str(self.getMyName()) + "," + "defaultAttr" + ":" + str(self.getDefaultAttr()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 6 "../EnumerationTest_3.ump"
import os
from enum import Enum, auto

class C1():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Married = auto()
        Single = auto()
        Divorced = auto()

    class Gender(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Male = auto()
        Female = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #C1 Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aStatus, aGender):
        self._gender = None
        self._status = None
        self._status = aStatus
        self._gender = aGender

    #------------------------
    # INTERFACE
    #------------------------
    def setStatus(self, aStatus):
        wasSet = False
        self._status = aStatus
        wasSet = True
        return wasSet

    def setGender(self, aGender):
        wasSet = False
        self._gender = aGender
        wasSet = True
        return wasSet

    def getStatus(self):
        return self._status

    def getGender(self):
        return self._gender

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "]" + str(os.linesep) + "  " + "status" + "=" + str((((self.getStatus().__str__().replaceAll("  ", "    ")) if not self.getStatus() == self else "this") if not (self.getStatus() is None) else "null")) + str(os.linesep) + "  " + "gender" + "=" + (((self.getGender().__str__().replaceAll("  ", "    ")) if not self.getGender() == self else "this") if not (self.getGender() is None) else "null")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 11 "../EnumerationTest_3.ump"
import os
from enum import Enum, auto

class C2():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Married = auto()
        Single = auto()
        Divorced = auto()

    class Gender(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Male = auto()
        Female = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #C2 Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aStatus, aGender):
        self._gender = None
        self._status = None
        self._status = aStatus
        self._gender = aGender

    #------------------------
    # INTERFACE
    #------------------------
    def setStatus(self, aStatus):
        wasSet = False
        self._status = aStatus
        wasSet = True
        return wasSet

    def setGender(self, aGender):
        wasSet = False
        self._gender = aGender
        wasSet = True
        return wasSet

    def getStatus(self):
        return self._status

    def getGender(self):
        return self._gender

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "]" + str(os.linesep) + "  " + "status" + "=" + str((((self.getStatus().__str__().replaceAll("  ", "    ")) if not self.getStatus() == self else "this") if not (self.getStatus() is None) else "null")) + str(os.linesep) + "  " + "gender" + "=" + (((self.getGender().__str__().replaceAll("  ", "    ")) if not self.getGender() == self else "this") if not (self.getGender() is None) else "null")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 5 "../EnumerationTest_4.ump"
import os
from enum import Enum, auto

class C1():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Married = auto()
        Single = auto()
        Divorced = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #C1 Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aStatus):
        self._status = None
        self._status = aStatus

    #------------------------
    # INTERFACE
    #------------------------
    def setStatus(self, aStatus):
        wasSet = False
        self._status = aStatus
        wasSet = True
        return wasSet

    def getStatus(self):
        return self._status

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "]" + str(os.linesep) + "  " + "status" + "=" + (((self.getStatus().__str__().replaceAll("  ", "    ")) if not self.getStatus() == self else "this") if not (self.getStatus() is None) else "null")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 9 "../EnumerationTest_4.ump"
import os
from enum import Enum, auto

class C2():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Married = auto()
        Single = auto()
        Divorced = auto()

    class Gender(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Male = auto()
        Female = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #C2 Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aGender, aStatus):
        self._status = None
        self._gender = None
        self._gender = aGender
        self._status = aStatus

    #------------------------
    # INTERFACE
    #------------------------
    def setGender(self, aGender):
        wasSet = False
        self._gender = aGender
        wasSet = True
        return wasSet

    def setStatus(self, aStatus):
        wasSet = False
        self._status = aStatus
        wasSet = True
        return wasSet

    def getGender(self):
        return self._gender

    def getStatus(self):
        return self._status

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "]" + str(os.linesep) + "  " + "gender" + "=" + str((((self.getGender().__str__().replaceAll("  ", "    ")) if not self.getGender() == self else "this") if not (self.getGender() is None) else "null")) + str(os.linesep) + "  " + "status" + "=" + (((self.getStatus().__str__().replaceAll("  ", "    ")) if not self.getStatus() == self else "this") if not (self.getStatus() is None) else "null")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 6 "../EnumerationTest_5.ump"
import os
from enum import Enum, auto

class X1():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Month(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        January = auto()
        February = auto()
        March = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X1 Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aMonth):
        self._month = None
        self._month = aMonth

    #------------------------
    # INTERFACE
    #------------------------
    def setMonth(self, aMonth):
        wasSet = False
        self._month = aMonth
        wasSet = True
        return wasSet

    def getMonth(self):
        return self._month

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "]" + str(os.linesep) + "  " + "month" + "=" + (((self.getMonth().__str__().replaceAll("  ", "    ")) if not self.getMonth() == self else "this") if not (self.getMonth() is None) else "null")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 10 "../EnumerationTest_5.ump"
import os
from enum import Enum, auto

class X2():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Fruit(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Apple = auto()
        Orange = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X2 Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aT):
        self._t = None
        self._t = aT

    #------------------------
    # INTERFACE
    #------------------------
    def setT(self, aT):
        wasSet = False
        self._t = aT
        wasSet = True
        return wasSet

    def getT(self):
        return self._t

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "]" + str(os.linesep) + "  " + "t" + "=" + (((self.getT().__str__().replaceAll("  ", "    ")) if not self.getT() == self else "this") if not (self.getT() is None) else "null")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 6 "../EnumerationTest_6.ump"

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "../EnumerationTest_6.ump"

class X2():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 5 "../EnumerationTest_7.ump"
from enum import Enum, auto

class X():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Month(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Jan = auto()
        Feb = auto()
        Mar = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    def delete(self):
        pass

    # line 6 "../EnumerationTest_7.ump"
    def displayMonth(self, m):
        return(m.toString())


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 9 "../EnumerationTest_7.ump"
from enum import Enum, auto

class Y():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Month(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Jan = auto()
        Feb = auto()
        Mar = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Y State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._sm = None
        self.setSm(Y.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        return answer

    def getSm(self):
        return self._sm

    def goToS2(self, m):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == Y.Sm.s1 :
            # line 12 "../EnumerationTest_7.ump"
            print(m)
            self.setSm(Y.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setSm(self, aSm):
        self._sm = aSm

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 18 "../EnumerationTest_7.ump"
from enum import Enum, auto

class Z():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Month(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Jan = auto()
        Feb = auto()
        Mar = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    def delete(self):
        pass

    # line 19 "../EnumerationTest_7.ump"
    def getBirthMonth(self):
        return self.Month.Jan


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 7 "../EnumerationTest_8.ump"
import os
from enum import Enum, auto

class A():
    #------------------------
    # ENUMERATIONS
    #------------------------
    class Month(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        O = auto()
        P = auto()
        Q = auto()

    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #A Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aM, aP):
        self._p = None
        self._m = None
        self._m = aM
        self._p = aP

    #------------------------
    # INTERFACE
    #------------------------
    def setM(self, aM):
        wasSet = False
        self._m = aM
        wasSet = True
        return wasSet

    def setP(self, aP):
        wasSet = False
        self._p = aP
        wasSet = True
        return wasSet

    def getM(self):
        return self._m

    def getP(self):
        return self._p

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "]" + str(os.linesep) + "  " + "m" + "=" + str((((self.getM().__str__().replaceAll("  ", "    ")) if not self.getM() == self else "this") if not (self.getM() is None) else "null")) + str(os.linesep) + "  " + "p" + "=" + (((self.getP().__str__().replaceAll("  ", "    ")) if not self.getP() == self else "this") if not (self.getP() is None) else "null")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 7 "EnumerationTest_9.ump"

class Bar():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Bar Associations
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._foos = None
        self._foos = []

    #------------------------
    # INTERFACE
    #------------------------
    # Code from template association_GetMany 
    def getFoo(self, index):
        aFoo = self._foos[index]
        return aFoo

    def getFoos(self):
        newFoos = tuple(self._foos)
        return newFoos

    def numberOfFoos(self):
        number = len(self._foos)
        return number

    def hasFoos(self):
        has = len(self._foos) > 0
        return has

    def indexOfFoo(self, aFoo):
        index = (-1 if not aFoo in self._foos else self._foos.index(aFoo))
        return index

    # Code from template association_MinimumNumberOfMethod 
    @staticmethod
    def minimumNumberOfFoos():
        return 0

    # Code from template association_AddManyToOne 
    def addFoo1(self, aMyBaz, aMyStr):
        from Foo import Foo
        return Foo(aMyBaz, aMyStr, self)

    def addFoo2(self, aFoo):
        wasAdded = False
        if (aFoo) in self._foos :
            return False
        existingBar = aFoo.getBar()
        isNewBar = not (existingBar is None) and not self == existingBar
        if isNewBar :
            aFoo.setBar(self)
        else :
            self._foos.append(aFoo)
        wasAdded = True
        return wasAdded

    def removeFoo(self, aFoo):
        wasRemoved = False
        #Unable to remove aFoo, as it must always have a bar
        if not self == aFoo.getBar() :
            self._foos.remove(aFoo)
            wasRemoved = True
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addFooAt(self, aFoo, index):
        wasAdded = False
        if self.addFoo(aFoo) :
            if index < 0 :
                index = 0
            if index > self.numberOfFoos() :
                index = self.numberOfFoos() - 1
            self._foos.remove(aFoo)
            self._foos.insert(index, aFoo)
            wasAdded = True
        return wasAdded

    def addOrMoveFooAt(self, aFoo, index):
        wasAdded = False
        if (aFoo) in self._foos :
            if index < 0 :
                index = 0
            if index > self.numberOfFoos() :
                index = self.numberOfFoos() - 1
            self._foos.remove(aFoo)
            self._foos.insert(index, aFoo)
            wasAdded = True
        else :
            wasAdded = self.addFooAt(aFoo, index)
        return wasAdded

    def delete(self):
        i = len(self._foos)
        while i > 0 :
            aFoo = self._foos[i - 1]
            aFoo.delete()
            i -= 1

    def addFoo(self, *argv):
        from Foo import Foo
        if len(argv) == 2 and isinstance(argv[0], Foo.Baz) and isinstance(argv[1], str) :
            return self.addFoo1(argv[0], argv[1])
        if len(argv) == 1 and isinstance(argv[0], Foo) :
            return self.addFoo2(argv[0])
        raise TypeError("No method matches provided parameters")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../EnumerationTest_innerQualified_1.ump"

class Driver():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Driver Associations
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._driverSchedules = None
        self._driverSchedules = []

    #------------------------
    # INTERFACE
    #------------------------
    # Code from template association_GetMany 
    def getDriverSchedule(self, index):
        aDriverSchedule = self._driverSchedules[index]
        return aDriverSchedule

    def getDriverSchedules(self):
        newDriverSchedules = tuple(self._driverSchedules)
        return newDriverSchedules

    def numberOfDriverSchedules(self):
        number = len(self._driverSchedules)
        return number

    def hasDriverSchedules(self):
        has = len(self._driverSchedules) > 0
        return has

    def indexOfDriverSchedule(self, aDriverSchedule):
        index = (-1 if not aDriverSchedule in self._driverSchedules else self._driverSchedules.index(aDriverSchedule))
        return index

    # Code from template association_MinimumNumberOfMethod 
    @staticmethod
    def minimumNumberOfDriverSchedules():
        return 0

    # Code from template association_AddManyToOne 
    def addDriverSchedule1(self, aShift, aStatus):
        from enumerations.DriverSchedule import DriverSchedule
        return DriverSchedule(aShift, aStatus, self)

    def addDriverSchedule2(self, aDriverSchedule):
        wasAdded = False
        if (aDriverSchedule) in self._driverSchedules :
            return False
        existingDriver = aDriverSchedule.getDriver()
        isNewDriver = not (existingDriver is None) and not self == existingDriver
        if isNewDriver :
            aDriverSchedule.setDriver(self)
        else :
            self._driverSchedules.append(aDriverSchedule)
        wasAdded = True
        return wasAdded

    def removeDriverSchedule(self, aDriverSchedule):
        wasRemoved = False
        #Unable to remove aDriverSchedule, as it must always have a driver
        if not self == aDriverSchedule.getDriver() :
            self._driverSchedules.remove(aDriverSchedule)
            wasRemoved = True
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addDriverScheduleAt(self, aDriverSchedule, index):
        wasAdded = False
        if self.addDriverSchedule(aDriverSchedule) :
            if index < 0 :
                index = 0
            if index > self.numberOfDriverSchedules() :
                index = self.numberOfDriverSchedules() - 1
            self._driverSchedules.remove(aDriverSchedule)
            self._driverSchedules.insert(index, aDriverSchedule)
            wasAdded = True
        return wasAdded

    def addOrMoveDriverScheduleAt(self, aDriverSchedule, index):
        wasAdded = False
        if (aDriverSchedule) in self._driverSchedules :
            if index < 0 :
                index = 0
            if index > self.numberOfDriverSchedules() :
                index = self.numberOfDriverSchedules() - 1
            self._driverSchedules.remove(aDriverSchedule)
            self._driverSchedules.insert(index, aDriverSchedule)
            wasAdded = True
        else :
            wasAdded = self.addDriverScheduleAt(aDriverSchedule, index)
        return wasAdded

    def delete(self):
        i = len(self._driverSchedules)
        while i > 0 :
            aDriverSchedule = self._driverSchedules[i - 1]
            aDriverSchedule.delete()
            i -= 1

    def addDriverSchedule(self, *argv):
        from enumerations.DriverSchedule import DriverSchedule
        if len(argv) == 2 and isinstance(argv[0], DriverSchedule.Shift) and isinstance(argv[1], DriverSchedule.Status) :
            return self.addDriverSchedule1(argv[0], argv[1])
        if len(argv) == 1 and isinstance(argv[0], DriverSchedule) :
            return self.addDriverSchedule2(argv[0])
        raise TypeError("No method matches provided parameters")