Public Class DomainController Implements IDomainController Private ReadOnly _employeeManager As IEmployeeManager Private ReadOnly _workItemManager As IWorkItemManager #Region "Singleton pattern" Private Shared _instance As DomainController Private Sub New() 'Initialise managers. _employeeManager = New EmployeeManager _workItemManager = New WorkItemManager End Sub ''' ''' Gets an instance of the domain controller. Only one instance exists. ''' ''' The instance of the domain controller Public Shared Function GetInstance() As IDomainController 'If no instance is present, initialise. If _instance Is Nothing Then _instance = New DomainController() End If 'Return instance. Return _instance End Function #End Region #Region "Employees" ''' Public Function GetAvailableEmployees() As ICollection(Of IEmployee) Implements IDomainController.GetAvailableEmployees Return _employeeManager.AvailableEmployees End Function ''' Public Function GetSelectedEmployee(employeeNumber As Integer) As IEmployee Implements IDomainController.GetSelectedEmployee Return _employeeManager.GetSelectedEmployee(employeeNumber) End Function ''' Public Function GetSelectedEmployees() As ICollection(Of IEmployee) Implements IDomainController.GetSelectedEmployees Return _employeeManager.SelectedEmployees End Function ''' Public Sub SelectEmployee(employeeNumber As Integer, employee As IEmployee) Implements IDomainController.SelectEmployee _employeeManager.SelectEmployee(employeeNumber, employee) End Sub ''' Public Sub DeselectEmployee(employeeNumber As Integer) Implements IDomainController.DeselectEmployee _employeeManager.RemoveEmployeeSelection(employeeNumber) End Sub #End Region #Region "Work items" ''' Function GiveWorkItems(workPostIndex As Integer) As ICollection(Of IWorkItem) Implements IDomainController.GiveWorkItems Return _workItemManager.GiveWorkItems(workPostIndex, _employeeManager.Employees.ToList()) End Function Public Sub StartActivity(activity As IActivity, employeeNumber As Integer) Implements IDomainController.StartActivity Dim employee = _employeeManager.GetSelectedEmployee(employeeNumber) 'Employee can't be nothing. If IsNothing(employee) Then Throw New Exception($"No employee found for employee number: {employeeNumber}.") 'Finish the activity. _workItemManager.StartActivity(activity, employee) End Sub Public Sub FinishActivity(employeeNumber As Integer) Implements IDomainController.FinishActivity Dim employee = _employeeManager.GetSelectedEmployee(employeeNumber) 'Employee can't be nothing. If IsNothing(employee) Then Throw New Exception($"No employee found for employee number: {employeeNumber}.") 'Finish the activity. _workItemManager.FinishActivity(employee.CurrentActivity) End Sub Public Sub StopActivity(employeeNumber As Integer) Implements IDomainController.StopActivity Dim employee = _employeeManager.GetSelectedEmployee(employeeNumber) 'Employee can't be nothing. If IsNothing(employee) Then Throw New Exception($"No employee found for employee number: {employeeNumber}.") 'Stop the activity. _workItemManager.StopActivity(employee.CurrentActivity) End Sub Public Sub PauseActivitiesFromApp() Implements IDomainController.PauseActivitiesFromApp _workItemManager.PauseActivities() End Sub #End Region End Class