23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 */ |
24 */ |
25 |
25 |
26 package de.uapcore.lightpit.servlet |
26 package de.uapcore.lightpit.servlet |
27 |
27 |
28 import de.uapcore.lightpit.AbstractServlet |
28 import de.uapcore.lightpit.* |
29 import de.uapcore.lightpit.HttpRequest |
|
30 import de.uapcore.lightpit.LoggingTrait |
|
31 import de.uapcore.lightpit.dao.DataAccessObject |
29 import de.uapcore.lightpit.dao.DataAccessObject |
32 import de.uapcore.lightpit.entities.User |
30 import de.uapcore.lightpit.entities.User |
33 import de.uapcore.lightpit.logger |
|
34 import de.uapcore.lightpit.viewmodel.UserEditView |
31 import de.uapcore.lightpit.viewmodel.UserEditView |
35 import de.uapcore.lightpit.viewmodel.UsersView |
32 import de.uapcore.lightpit.viewmodel.UsersView |
36 import javax.servlet.annotation.WebServlet |
33 import javax.servlet.annotation.WebServlet |
37 |
34 |
38 @WebServlet(urlPatterns = ["/users/*"]) |
35 @WebServlet(urlPatterns = ["/users/*"]) |
46 } |
43 } |
47 |
44 |
48 private val list = "users" |
45 private val list = "users" |
49 private val form = "user-form" |
46 private val form = "user-form" |
50 |
47 |
51 fun index(http: HttpRequest, dao: DataAccessObject) { |
48 private fun index(http: HttpRequest, dao: DataAccessObject) { |
52 with(http) { |
49 with(http) { |
53 view = UsersView(dao.listUsers()) |
50 view = UsersView(dao.listUsers()) |
54 render(list) |
51 render(list) |
55 } |
52 } |
56 } |
53 } |
57 |
54 |
58 fun create(http: HttpRequest, dao: DataAccessObject) { |
55 private fun create(http: HttpRequest, dao: DataAccessObject) { |
59 with(http) { |
56 with(http) { |
60 view = UserEditView(User(-1)) |
57 view = UserEditView(User(-1)) |
61 render(form) |
58 render(form) |
62 } |
59 } |
63 } |
60 } |
64 |
61 |
65 fun edit(http: HttpRequest, dao: DataAccessObject) { |
62 private fun edit(http: HttpRequest, dao: DataAccessObject) { |
66 val id = http.pathParams["userid"]?.toIntOrNull() |
63 val id = http.pathParams["userid"]?.toIntOrNull() |
67 if (id == null) { |
64 if (id == null) { |
68 http.response.sendError(404) |
65 http.response.sendError(404) |
69 } else { |
66 } else { |
70 val user = dao.findUser(id) |
67 val user = dao.findUser(id) |
77 } |
74 } |
78 } |
75 } |
79 } |
76 } |
80 } |
77 } |
81 |
78 |
82 fun commit(http: HttpRequest, dao: DataAccessObject) { |
79 private fun commit(http: HttpRequest, dao: DataAccessObject) { |
83 val id = http.param("userid")?.toIntOrNull() |
80 val id = http.param("userid")?.toIntOrNull() |
84 if (id == null) { |
81 if (id == null) { |
85 http.response.sendError(400) |
82 http.response.sendError(400) |
86 return |
83 return |
87 } |
84 } |
88 |
85 |
89 val user = User(id) |
86 val user = User(id) |
90 with(user) { |
87 with(user) { |
91 username = http.param("username") ?: "" |
|
92 givenname = http.param("givenname") |
88 givenname = http.param("givenname") |
93 lastname = http.param("lastname") |
89 lastname = http.param("lastname") |
94 mail = http.param("mail") |
90 mail = http.param("mail") |
95 } |
91 } |
96 |
92 |
97 if (dao.findUserByName(user.username) != null) { |
93 if (user.id > 0) { |
98 with(http) { |
94 logger().info("Update user with id ${user.id}.") |
99 view = UserEditView(user).apply { errorText = "validation.username.unique" } |
95 dao.updateUser(user) |
|
96 http.renderCommit("users/") |
|
97 } else { |
|
98 val errorMessages = mutableListOf<String>() |
|
99 val username = http.param("username", { |
|
100 if (it == null) ValidationError("validation.username.null") |
|
101 else if (dao.findUserByName(it) != null) ValidationError("validation.username.unique") |
|
102 else ValidatedValue(it) |
|
103 }, errorMessages) |
|
104 |
|
105 if (username != null) { |
|
106 logger().info("Insert user ${username}.") |
|
107 user.username = username |
|
108 dao.insertUser(user) |
|
109 http.renderCommit("users/") |
|
110 } else { |
|
111 http.view = UserEditView(user).apply { this.errorMessages = errorMessages } |
|
112 http.render(form) |
100 } |
113 } |
101 } |
114 } |
102 |
|
103 if (user.id > 0) { |
|
104 logger().info("Update user ${user.username} with id ${user.id}.") |
|
105 dao.updateUser(user) |
|
106 } else { |
|
107 logger().info("Insert user ${user.username}.") |
|
108 dao.insertUser(user) |
|
109 } |
|
110 http.renderCommit("users/") |
|
111 } |
115 } |
112 } |
116 } |