@startuml

TaskManagerServer --> MembersController
TaskManagerServer --> ProjectsController
TaskManagerServer --> StatusController
TaskManagerServer --> TaskController

AbstractDao --> MemberDao
AbstractDao --> ProjectDao
AbstractDao --> MemberToProjectDao
AbstractDao --> StatusDao
AbstractDao --> TasksDao

MembersController <-- Member
MembersController <-- MemberDao

MemberToProjectController <-- MemberToProject
MemberToProjectController <-- MemberToProjectDao

ProjectsController <-- Project
ProjectsController <-- ProjectDao

StatusController <-- Status
StatusController <-- StatusDao

TaskController <-- Task
TaskController <-- TasksDao

HttpController --> EchoHttpController
HttpController --> FileHttpController

MembersController --> HttpController
MemberToProjectController --> HttpController
ProjectsController --> HttpController
StatusController --> HttpController
TaskController --> HttpController


+class TaskManagerServer {
+main()
----
+Id
+MemberName
+ProjectName
+TaskName
+StatusName
}

+abstract class AbstractDao {
+{abstract} AbstractDao()
+{abstract} void insertObject()
+insert()
+ void update()
}

+class MemberDao {
+ void insertObject()
+MemberDao()
#Member readObject()
+ insert()
+Member retrieve()
}

+class MembersController {
+ MembersController()
+ void handle()
}

+class MemberToProjectDao {
+ MemberToProjectDao()
+ void insertObject()
# MemberToProject readObject()
+ insert()
+ void insert()
}

+class ProjectDao {
+ ProjectDao()
+ void insertObject()
# Project readObject()
+List<> listSelectedProjects()
+ Project retrieve()
}

+class TasksDao {
+ TasksDao()
+ void insertObject()
# Task readObject()
+ insert()

}

+class StatusDao {
+ StatusDao()
+ void insertObject()
# Status readObject()
+ insert()
}

+interface HttpController {
+ void handle()
}

+class EchoHttpController {
+ void handle
}

+class FileHttpController {
+ FileHttpController
- {static} final logger
+ void handle
}

@enduml