src/main/kotlin/de/uapcore/lightpit/servlet/UsersServlet.kt

changeset 184
e8eecee6aadf
child 209
c9c6abf167c7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/kotlin/de/uapcore/lightpit/servlet/UsersServlet.kt	Fri Apr 02 11:59:14 2021 +0200
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2021 Mike Becker. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package de.uapcore.lightpit.servlet
+
+import de.uapcore.lightpit.AbstractServlet
+import de.uapcore.lightpit.HttpRequest
+import de.uapcore.lightpit.LoggingTrait
+import de.uapcore.lightpit.dao.DataAccessObject
+import de.uapcore.lightpit.entities.User
+import de.uapcore.lightpit.logger
+import de.uapcore.lightpit.viewmodel.UserEditView
+import de.uapcore.lightpit.viewmodel.UsersView
+import javax.servlet.annotation.WebServlet
+
+@WebServlet(urlPatterns = ["/users/*"])
+class UsersServlet : AbstractServlet(), LoggingTrait {
+
+    init {
+        get("/", this::index)
+        get("/-/create", this::create)
+        get("/%userid/edit", this::edit)
+        post("/-/commit", this::commit)
+    }
+
+    private val list = "users"
+    private val form = "user-form"
+
+    fun index(http: HttpRequest, dao: DataAccessObject) {
+        with(http) {
+            view = UsersView(dao.listUsers())
+            render(list)
+        }
+    }
+
+    fun create(http: HttpRequest, dao: DataAccessObject) {
+        with(http) {
+            view = UserEditView(User(-1))
+            render(form)
+        }
+    }
+
+    fun edit(http: HttpRequest, dao: DataAccessObject) {
+        val id = http.pathParams["userid"]?.toIntOrNull()
+        if (id == null) {
+            http.response.sendError(404)
+        } else {
+            val user = dao.findUser(id)
+            if (user == null) {
+                http.response.sendError(404)
+            } else {
+                with(http) {
+                    view = UserEditView(user)
+                    render(form)
+                }
+            }
+        }
+    }
+
+    fun commit(http: HttpRequest, dao: DataAccessObject) {
+        val id = http.param("userid")?.toIntOrNull()
+        if (id == null) {
+            http.response.sendError(400)
+            return
+        }
+
+        val user = User(id)
+        with(user) {
+            username = http.param("username") ?: ""
+            givenname = http.param("givenname")
+            lastname = http.param("lastname")
+            mail = http.param("mail")
+        }
+
+        if (dao.findUserByName(user.username) != null) {
+            with(http) {
+                view = UserEditView(user).apply { errorText = "validation.username.unique" }
+            }
+        }
+
+        if (user.id > 0) {
+            logger().info("Update user ${user.username} with id ${user.id}.")
+            dao.updateUser(user)
+        } else {
+            logger().info("Insert user ${user.username}.")
+            dao.insertUser(user)
+        }
+        http.renderCommit("users/")
+    }
+}
\ No newline at end of file

mercurial