Index: ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/implementations/EmployeeManager.vb
===================================================================
diff -u -r1714 -r1718
--- ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/implementations/EmployeeManager.vb (.../EmployeeManager.vb) (revision 1714)
+++ ActiviteitenOpvolging/ActiviteitenOpvolging/domain/managers/implementations/EmployeeManager.vb (.../EmployeeManager.vb) (revision 1718)
@@ -1,4 +1,6 @@
-Public Class EmployeeManager
+Imports ActiviteitenOpvolging.configs
+
+Public Class EmployeeManager
Implements IEmployeeManager
Private ReadOnly _employees As ICollection(Of IEmployee)
@@ -15,44 +17,70 @@
'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) _
+ Not _selectedEmployeesDictionary.Any(Function(selectedEmployee) _
employee.Equals(selectedEmployee))))
End Get
End Property
- Private ReadOnly _selectedEmployees As New List(Of IEmployee)
+ Private ReadOnly _selectedEmployeesDictionary As new Dictionary(Of Integer, IEmployee)
'''
Public ReadOnly Property SelectedEmployees As ICollection(Of IEmployee) Implements IEmployeeManager.SelectedEmployees
Get
- Return New HashSet(Of IEmployee)(_selectedEmployees)
+ Return New HashSet(Of IEmployee)(_selectedEmployeesDictionary.Values)
End Get
End Property
Sub New()
'Initial fetching of employees, then stored.
_employees = EmployeesDatabaseMapper.FetchEmployees()
+ 'Filling the selected employees dictionary with the employee number (an index) and 'Nothing' as value. Indicating no selected employee.
+ For i = 0 To ConfigsLoader.NumberOfEmployees - 1
+ _selectedEmployeesDictionary.Add(i, Nothing)
+ Next
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
+ Public Function GetSelectedEmployee(employeeNumber As Integer) As IEmployee Implements IEmployeeManager.GetSelectedEmployee
+ If _selectedEmployeesDictionary.ContainsKey(employeeNumber) Then
+ Throw New InternalException($"Employee number for getting the selected value is invalid, key value: {employeeNumber}.")
+ End If
+ 'Get the value.
+ Return _selectedEmployeesDictionary.Item(employeeNumber)
+ End Function
+
+ '''
+ Public Sub SelectEmployee(employeeNumber As Integer, employee As IEmployee) Implements IEmployeeManager.SelectEmployee
+ 'Employee number must be valid: exist in the dictionary.
+ If not _selectedEmployeesDictionary.ContainsKey(employeeNumber) Then
+ Throw New InternalException($"Employee number for selecting an employee is invalid, key value: {employeeNumber}.")
+ End If
+ 'Employee can't be nothing.
+ If employee Is Nothing Then
+ Throw New InternalException($"The soon-to-be selected Employee can't be nothing.")
+ End If
+ 'Check whether or not that employee is already picked. The selected employees can be 'Nothing'.
+ If _selectedEmployeesDictionary.Values.Any(Function(selectedEmployee) Not IsNothing(selectedEmployee) AndAlso 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)
+ 'No employee can already be selected for that number.
+ If _selectedEmployeesDictionary.Item(employeeNumber) IsNot Nothing Then
+ Throw New Exception($"An employee was already chosen for number (index): {employeeNumber}.")
+ End If
+
+ 'Add employee to dictionary of selected employees -> set the value according to an employee number.
+ _selectedEmployeesDictionary.Item(employeeNumber) = employee
End Sub
'''
- Public Sub RemoveEmployeeSelection(employee As IEmployee) Implements IEmployeeManager.RemoveEmployeeSelection
+ Public Sub RemoveEmployeeSelection(employeeNumber As Integer) Implements IEmployeeManager.RemoveEmployeeSelection
'Find the employee to remove.
- Dim employeeToRemove = _selectedEmployees.Find(Function(selectedEmployee) selectedEmployee.Equals(employee))
+ Dim employeeToRemove = _selectedEmployeesDictionary.Item(employeeNumber)
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)
+ 'Remove the employee -> set the value back to 'Nothing'.
+ _selectedEmployeesDictionary.Item(employeeNumber) = Nothing
End Sub
End Class