Index: ActiviteitenOpvolging/ActiviteitenOpvolging/domain/controllers/IDomainController.vb =================================================================== diff -u -r1712 -r1714 --- ActiviteitenOpvolging/ActiviteitenOpvolging/domain/controllers/IDomainController.vb (.../IDomainController.vb) (revision 1712) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/domain/controllers/IDomainController.vb (.../IDomainController.vb) (revision 1714) @@ -2,16 +2,28 @@ #Region "Employees" ''' - ''' Gets a collection of all the employees. + ''' Gets a collection of all the available employees. ''' ''' - Function GetEmployees() As ICollection(Of IEmployee) + Function GetAvailableEmployees() As ICollection(Of IEmployee) ''' + ''' Gets a collection of all the selected employees. + ''' + ''' + Function GetSelectedEmployees() As ICollection(Of IEmployee) + + ''' ''' Select an employee as one of the usable employees. ''' ''' sub SelectEmployee(employee As IEmployee) + + ''' + ''' Deselect an employee. + ''' + ''' + sub DeselectEmployee(employee As IEmployee) #End Region #Region "Work items" Index: ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/IEmployee.vb =================================================================== diff -u -r1709 -r1714 --- ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/IEmployee.vb (.../IEmployee.vb) (revision 1709) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/IEmployee.vb (.../IEmployee.vb) (revision 1714) @@ -4,4 +4,6 @@ Property FirstName As String Property LastName As String Property Initials As String + + Function Equals(obj As Object) As Boolean End Interface Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolging.vbproj =================================================================== diff -u -r1711 -r1714 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolging.vbproj (.../ActiviteitenOpvolging.vbproj) (revision 1711) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolging.vbproj (.../ActiviteitenOpvolging.vbproj) (revision 1714) @@ -81,6 +81,10 @@ + + + + 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 Index: ActiviteitenOpvolging/ActiviteitenOpvolging/domain/controllers/DomainController.vb =================================================================== diff -u -r1712 -r1714 --- ActiviteitenOpvolging/ActiviteitenOpvolging/domain/controllers/DomainController.vb (.../DomainController.vb) (revision 1712) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/domain/controllers/DomainController.vb (.../DomainController.vb) (revision 1714) @@ -31,15 +31,25 @@ #Region "Employees" ''' - Public Function GetEmployees() As ICollection(Of IEmployee) Implements IDomainController.GetEmployees - Return _employeeManager.Employees + Public Function GetAvailableEmployees() As ICollection(Of IEmployee) Implements IDomainController.GetAvailableEmployees + Return _employeeManager.AvailableEmployees End Function ''' + Public Function GetSelectedEmployees() As ICollection(Of IEmployee) Implements IDomainController.GetSelectedEmployees + Return _employeeManager.SelectedEmployees + End Function + + ''' Public Sub SelectEmployee(employee As IEmployee) Implements IDomainController.SelectEmployee _employeeManager.SelectEmployee(employee) End Sub + ''' + public sub DeselectEmployee(employee As IEmployee) Implements IDomainController.DeselectEmployee + _employeeManager.RemoveEmployeeSelection(employee) + End sub + #End Region #Region "Work items" Index: ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/IEmployeeManager.vb =================================================================== diff -u -r1712 -r1714 --- ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/IEmployeeManager.vb (.../IEmployeeManager.vb) (revision 1712) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/IEmployeeManager.vb (.../IEmployeeManager.vb) (revision 1714) @@ -1,9 +1,31 @@ Public Interface IEmployeeManager + ''' + ''' A collection of all the employees. + ''' + ''' ReadOnly Property Employees As ICollection(Of IEmployee) ''' + ''' All the non-selected employees. + ''' + ''' + ReadOnly Property AvailableEmployees As ICollection(Of IEmployee) + + ''' + ''' The selected employees. + ''' + ''' + ReadOnly Property SelectedEmployees As ICollection(Of IEmployee) + + ''' ''' Select and store the chosen employee. ''' ''' Sub SelectEmployee(employee As IEmployee) + + ''' + ''' Deselect an employee. + ''' + ''' + sub RemoveEmployeeSelection(employee As IEmployee) End Interface Index: ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/implementations/Employee.vb =================================================================== diff -u -r1709 -r1714 --- ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/implementations/Employee.vb (.../Employee.vb) (revision 1709) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/domain/classes/implementations/Employee.vb (.../Employee.vb) (revision 1714) @@ -1,8 +1,22 @@ -Public Class Employee +Imports ActiviteitenOpvolging + +Public Class Employee Implements IEmployee Public Property EmployeeNumber As Integer Implements IEmployee.EmployeeNumber Public Property FirstName As String Implements IEmployee.FirstName Public Property LastName As String Implements IEmployee.LastName Public Property Initials As String Implements IEmployee.Initials + + Public Overrides Function Equals(obj As Object) As Boolean Implements IEmployee.Equals + If Not TypeOf obj Is IEmployee Then + 'Not the right type. + Return False + End If + 'Cast to IEmployee. + Dim employee As IEmployee = obj + 'Compare the initials. + Return employee.Initials.Equals(Initials, StringComparison.CurrentCultureIgnoreCase) + End Function + End Class