1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/dao/postgres/PGUserDao.kt Thu Nov 19 13:58:54 2020 +0100 1.3 @@ -0,0 +1,95 @@ 1.4 +/* 1.5 + * Copyright 2020 Mike Becker. All rights reserved. 1.6 + * 1.7 + * Redistribution and use in source and binary forms, with or without 1.8 + * modification, are permitted provided that the following conditions are met: 1.9 + * 1.10 + * 1. Redistributions of source code must retain the above copyright 1.11 + * notice, this list of conditions and the following disclaimer. 1.12 + * 1.13 + * 2. Redistributions in binary form must reproduce the above copyright 1.14 + * notice, this list of conditions and the following disclaimer in the 1.15 + * documentation and/or other materials provided with the distribution. 1.16 + * 1.17 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1.18 + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.19 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1.20 + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 1.21 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1.22 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 1.23 + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 1.24 + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 1.25 + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1.26 + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1.27 + * 1.28 + */ 1.29 + 1.30 +package de.uapcore.lightpit.dao.postgres 1.31 + 1.32 +import de.uapcore.lightpit.dao.AbstractUserDao 1.33 +import de.uapcore.lightpit.dao.Functions 1.34 +import de.uapcore.lightpit.entities.User 1.35 +import java.sql.Connection 1.36 +import java.sql.ResultSet 1.37 + 1.38 +class PGUserDao(connection: Connection) : AbstractUserDao() { 1.39 + 1.40 + companion object { 1.41 + fun mapResult(rs: ResultSet): User { 1.42 + val id = rs.getInt("userid") 1.43 + return if (rs.wasNull()) { 1.44 + User(-1) 1.45 + } else { 1.46 + val user = User(id) 1.47 + user.username = rs.getString("username") 1.48 + user.givenname = Functions.getSafeString(rs, "givenname") 1.49 + user.lastname = Functions.getSafeString(rs, "lastname") 1.50 + user.mail = Functions.getSafeString(rs, "mail") 1.51 + user 1.52 + } 1.53 + } 1.54 + } 1.55 + 1.56 + private val listStmt = connection.prepareStatement( 1.57 + "select userid, username, lastname, givenname, mail " + 1.58 + "from lpit_user where userid >= 0 " + 1.59 + "order by username") 1.60 + private val findStmt = connection.prepareStatement( 1.61 + "select userid, username, lastname, givenname, mail " + 1.62 + "from lpit_user where userid = ? ") 1.63 + private val findByUsernameStmt = connection.prepareStatement( 1.64 + "select userid, username, lastname, givenname, mail " + 1.65 + "from lpit_user where lower(username) = lower(?) ") 1.66 + private val insertStmt = connection.prepareStatement("insert into lpit_user (username, lastname, givenname, mail) values (?, ?, ?, ?)") 1.67 + private val updateStmt = connection.prepareStatement("update lpit_user set lastname = ?, givenname = ?, mail = ? where userid = ?") 1.68 + 1.69 + override fun mapResult(rs: ResultSet): User = Companion.mapResult(rs) 1.70 + 1.71 + override fun save(instance: User) { 1.72 + insertStmt.setString(1, instance.username) 1.73 + Functions.setStringOrNull(insertStmt, 2, instance.lastname) 1.74 + Functions.setStringOrNull(insertStmt, 3, instance.givenname) 1.75 + Functions.setStringOrNull(insertStmt, 4, instance.mail) 1.76 + insertStmt.executeUpdate() 1.77 + } 1.78 + 1.79 + override fun update(instance: User): Boolean { 1.80 + Functions.setStringOrNull(updateStmt, 1, instance.lastname) 1.81 + Functions.setStringOrNull(updateStmt, 2, instance.givenname) 1.82 + Functions.setStringOrNull(updateStmt, 3, instance.mail) 1.83 + updateStmt.setInt(4, instance.id) 1.84 + return updateStmt.executeUpdate() > 0 1.85 + } 1.86 + 1.87 + override fun list(): List<User> = super.list(listStmt) 1.88 + 1.89 + override fun find(id: Int): User? { 1.90 + findStmt.setInt(1, id) 1.91 + return super.find(findStmt) 1.92 + } 1.93 + 1.94 + override fun findByUsername(username: String): User? { 1.95 + findByUsernameStmt.setString(1, username) 1.96 + return super.find(findByUsernameStmt) 1.97 + } 1.98 +} 1.99 \ No newline at end of file