Index: ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/implementations/EmployeeManager.vb =================================================================== diff -u -r1712 -r1714 --- ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/implementations/EmployeeManager.vb (.../EmployeeManager.vb) (revision 1712) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/implementations/EmployeeManager.vb (.../EmployeeManager.vb) (revision 1714) @@ -2,20 +2,57 @@ Implements IEmployeeManager Private ReadOnly _employees As ICollection(Of IEmployee) + ''' Public ReadOnly Property Employees As ICollection(Of IEmployee) Implements IEmployeeManager.Employees Get Return New HashSet(Of IEmployee)(_employees) End Get End Property + ''' + Public ReadOnly Property AvailableEmployees As ICollection(Of IEmployee) Implements IEmployeeManager.AvailableEmployees + Get + 'Select the employees from the collection of all employees, which are not selected yet. + 'The employees are compared on their initials in lowercase. + Return New HashSet(Of IEmployee)(_employees.Where(Function(employee) _ + Not _selectedEmployees.Any(Function(selectedEmployee) _ + employee.Equals(selectedEmployee)))) + End Get + End Property + + Private ReadOnly _selectedEmployees As New List(Of IEmployee) + ''' + Public ReadOnly Property SelectedEmployees As ICollection(Of IEmployee) Implements IEmployeeManager.SelectedEmployees + Get + Return New HashSet(Of IEmployee)(_selectedEmployees) + End Get + End Property + Sub New() 'Initial fetching of employees, then stored. _employees = EmployeesDatabaseMapper.FetchEmployees() End Sub ''' Public Sub SelectEmployee(employee As IEmployee) Implements IEmployeeManager.SelectEmployee - + 'Check whether or not that employee is already picked. + If _selectedEmployees.Any(Function(selectedEmployee) selectedEmployee.Equals(employee)) Then + 'Employee was picked already. + Throw New Exception("Employee was already chosen.") + End If + 'Add employee to list of selected employees. + _selectedEmployees.Add(employee) End Sub + ''' + Public Sub RemoveEmployeeSelection(employee As IEmployee) Implements IEmployeeManager.RemoveEmployeeSelection + 'Find the employee to remove. + Dim employeeToRemove = _selectedEmployees.Find(Function(selectedEmployee) selectedEmployee.Equals(employee)) + If employeeToRemove Is Nothing Then + 'The employee was not selected, thus can't be deselected. + Throw New Exception("Cannot remove the selection of a non-selected employee.") + End If + 'Remove the employee. + _selectedEmployees.Remove(employeeToRemove) + End Sub End Class