Adding bidirectional associations in main package
Add the following bidirectional associations:
-
Projet — User -
Projet — Task -
Task — Context
Projet — User
Issue
We can see on the UML diagram that there exists a association between these two classes. Indeed, one project can have zero or more users.
If you add a user to the project, the user must be link to this same project. But, they must not call indefinitely the same methods (like add() and set()), this handshake must be handle.
Tests
We can add in ProjectTest class the following tests:
- testSetProjectToUser(): to check if a project can be set to the user
- testUnSetProjectToUser(): to check if a project can be unset to the user
- testOppositeUserReferenceOfProjectContainsUser(): to check if a project contains the wanted user
We can add in UserTest class the following tests:
- testAddUser(): to check if a user can be added to a project
- testAddUsers(): to check if users can be added to a project
- testRemoveUser(): to check if a user can be removed from a project
- testOppositeProjectOfUserReferenceGetProject(): to check if we can access the project of a user
Solution
Two classes called ReferenceToUsers and ReferenceToProject must created that will allow us to make the association between the classes. We must handle the handshaking by adding those methods: basicSetProjectForUser, basicUnsetProjectForUser to ReferenceToProject class and basicAddUser, basicRemoveUser to ReferenceToUsers. Of course, the standard methods (like add, remove and set, get, unSet) will be present in the associated classes.
Projet — Task
Issue
We can see on the UML diagram that there exists a association between these two classes. Indeed, one project can have zero or more tasks.
If you add a task to the project, the task must be link to this same project. But, they must not call indefinitely the same methods (like add() and set()), this handshake must be handle.
Tests
We can add in ProjectTest class the following tests:
- testSetProjectToTask(): to check if a project can be set to the task
- testUnSetProjectToTask(): to check if a project can be unset to the task
- testOppositeTaskReferenceOfProjectContainsTask(): to check if a project contains the wanted task
We can add in TaskTest class the following tests:
- testAddTaskToProject(): to check if a task can be added to a project
- testAddTasksToProject(): to check if tasks an be added to a project
- testRemoveTaskToProject(): to check if a task can be removed from a project
- testOppositeProjectReferenceOfTaskGetProject(): to check if we can access the project of a task
Solution
One class called ReferenceToTasks must be created that will allow us to make the association between the classes. It is possible to modify ReferenceToProject to adapt it to the new association. We must handle the handshaking by adding those methods: basicSetProjectForTask, basicUnsetProjectForTask to ReferenceToProject class and basicAddTaskForProject, basicRemoveTaskForProject to ReferenceToTasks.
Task — Context
Issue
We can see on the UML diagram that there exists a association between these two classes. Indeed, tasks can have the same context.
If you add a task to a context, the task must be link to this same context. But, they must not call indefinitely the same methods (like add() and set()), this handshake must be handle.
Tests
We can add in ContextTest class the following tests:
- testSetContext(): to check if a context can be set to the task
- testUnSetContext(): to check if a context can be unset to the task
- testOppositeTaskReferenceOfContextContainsTask(): to check if a context contains the wanted task
We can add in TaskTest class the following tests:
- testAddTaskToContext(): to check if a task can be added to a context
- testAddTasksToContext(): to check if tasks an be added to a context
- testRemoveTaskToContext(): to check if a task can be removed from a context
- testOppositeContextReferenceOfTaskGetContext(): to check if we can access the context of a task
Solution
One class called ReferenceToContext must be created that will allow us to make the association between the classes. It is possible to modify ReferenceToTasks to adapt it to the new association. We must handle the handshaking by adding those methods: basicSetContext, basicUnsetContext to ReferenceToContext class and basicAddTaskForContext, basicRemoveTaskForContext to ReferenceToTasks.