· 7 years ago · Jan 18, 2019, 03:08 AM
1package ru.slelaron.sd.mvc.dao
2
3import org.springframework.jdbc.core.BeanPropertyRowMapper
4import org.springframework.jdbc.core.support.JdbcDaoSupport
5import ru.slelaron.sd.mvc.model.Task
6import ru.slelaron.sd.mvc.model.TaskList
7import javax.sql.DataSource
8
9class TasksJdbcDao(dataSource: DataSource): JdbcDaoSupport(), TasksDao {
10 init {
11 setDataSource(dataSource)
12 val sqlTasks = "CREATE TABLE IF NOT EXISTS TASKS " +
13 "(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
14 "DESCRIPTION TEXT NOT NULL," +
15 "PARENT_ID INTEGER NOT NULL," +
16 "COMPLETE INTEGER NOT NULL)"
17 val sqlTaskLists = "CREATE TABLE IF NOT EXISTS TASK_LISTS" +
18 "(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
19 "DESCRIPTION TEXT NOT NULL)"
20
21 jdbcTemplate!!.update(sqlTasks)
22 jdbcTemplate!!.update(sqlTaskLists)
23 jdbcTemplate!!.update("DELETE FROM TASKS")
24 jdbcTemplate!!.update("DELETE FROM TASK_LISTS")
25 }
26
27 override fun addTask(task: Task) {
28 val sql = "INSERT INTO TASKS (DESCRIPTION, PARENT_ID, COMPLETE) VALUES (?, ?, ?)"
29 jdbcTemplate!!.update(sql, task.description, task.parentId, 0)
30 }
31
32 override fun addTaskList(taskList: TaskList) {
33 val sql = "INSERT INTO TASK_LISTS (DESCRIPTION) VALUES (?)"
34 jdbcTemplate!!.update(sql, taskList.description)
35 }
36
37 override fun completeTask(task: Task) {
38 val sql = "UPDATE TASKS SET COMPLETE = 1 WHERE ID = ?"
39 jdbcTemplate!!.update(sql, task.id)
40 }
41
42 override fun deleteTask(task: Task) {
43 val sql = "DELETE FROM TASKS WHERE ID = ?"
44 jdbcTemplate!!.update(sql, task.id)
45 }
46
47 override fun deleteTaskList(taskList: TaskList) {
48 System.err.println("TaskList = " + taskList.id)
49 val sql = "DELETE FROM TASKS WHERE PARENT_ID = ?"
50 jdbcTemplate!!.update(sql, taskList.id)
51 val sql1 = "DELETE FROM TASK_LISTS WHERE ID = ?"
52 jdbcTemplate!!.update(sql1, taskList.id)
53 }
54
55 override fun getAll(): Map<TaskList, List<Task>> {
56 val sql = "SELECT * FROM TASK_LISTS"
57 val taskLists: List<TaskList> = jdbcTemplate!!.query(sql, BeanPropertyRowMapper(TaskList::class.java))
58 val idToTaskList = taskLists.mapNotNull { it.id?.let { id -> id to it } }.toMap()
59 val sql1 = "SELECT * FROM TASKS"
60 val tasks: List<Task> = jdbcTemplate!!.query(sql1, BeanPropertyRowMapper(Task::class.java))
61 val taskListToListOfTasks = idToTaskList.map { it.value to mutableListOf<Task>() }.toMap()
62 for (a in tasks) {
63 val key = idToTaskList[a.parentId]!!
64 taskListToListOfTasks[key]?.add(a)
65 }
66 return taskListToListOfTasks.map { entry ->
67 if (entry.value.size > 0) {
68 entry.key.completed = entry.value.all { it.complete }
69 }
70 entry.key to entry.value.toList()
71 }.toMap()
72 }
73}