Thu, 19 Nov 2020 13:58:54 +0100
migrates DAO classes
mike@159 | 1 | /* |
mike@159 | 2 | * Copyright 2020 Mike Becker. All rights reserved. |
mike@159 | 3 | * |
mike@159 | 4 | * Redistribution and use in source and binary forms, with or without |
mike@159 | 5 | * modification, are permitted provided that the following conditions are met: |
mike@159 | 6 | * |
mike@159 | 7 | * 1. Redistributions of source code must retain the above copyright |
mike@159 | 8 | * notice, this list of conditions and the following disclaimer. |
mike@159 | 9 | * |
mike@159 | 10 | * 2. Redistributions in binary form must reproduce the above copyright |
mike@159 | 11 | * notice, this list of conditions and the following disclaimer in the |
mike@159 | 12 | * documentation and/or other materials provided with the distribution. |
mike@159 | 13 | * |
mike@159 | 14 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
mike@159 | 15 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
mike@159 | 16 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
mike@159 | 17 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
mike@159 | 18 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
mike@159 | 19 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
mike@159 | 20 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
mike@159 | 21 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
mike@159 | 22 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
mike@159 | 23 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
mike@159 | 24 | * |
mike@159 | 25 | */ |
mike@159 | 26 | |
mike@159 | 27 | package de.uapcore.lightpit.dao.postgres |
mike@159 | 28 | |
mike@159 | 29 | import de.uapcore.lightpit.dao.AbstractUserDao |
mike@159 | 30 | import de.uapcore.lightpit.dao.Functions |
mike@159 | 31 | import de.uapcore.lightpit.entities.User |
mike@159 | 32 | import java.sql.Connection |
mike@159 | 33 | import java.sql.ResultSet |
mike@159 | 34 | |
mike@159 | 35 | class PGUserDao(connection: Connection) : AbstractUserDao() { |
mike@159 | 36 | |
mike@159 | 37 | companion object { |
mike@159 | 38 | fun mapResult(rs: ResultSet): User { |
mike@159 | 39 | val id = rs.getInt("userid") |
mike@159 | 40 | return if (rs.wasNull()) { |
mike@159 | 41 | User(-1) |
mike@159 | 42 | } else { |
mike@159 | 43 | val user = User(id) |
mike@159 | 44 | user.username = rs.getString("username") |
mike@159 | 45 | user.givenname = Functions.getSafeString(rs, "givenname") |
mike@159 | 46 | user.lastname = Functions.getSafeString(rs, "lastname") |
mike@159 | 47 | user.mail = Functions.getSafeString(rs, "mail") |
mike@159 | 48 | user |
mike@159 | 49 | } |
mike@159 | 50 | } |
mike@159 | 51 | } |
mike@159 | 52 | |
mike@159 | 53 | private val listStmt = connection.prepareStatement( |
mike@159 | 54 | "select userid, username, lastname, givenname, mail " + |
mike@159 | 55 | "from lpit_user where userid >= 0 " + |
mike@159 | 56 | "order by username") |
mike@159 | 57 | private val findStmt = connection.prepareStatement( |
mike@159 | 58 | "select userid, username, lastname, givenname, mail " + |
mike@159 | 59 | "from lpit_user where userid = ? ") |
mike@159 | 60 | private val findByUsernameStmt = connection.prepareStatement( |
mike@159 | 61 | "select userid, username, lastname, givenname, mail " + |
mike@159 | 62 | "from lpit_user where lower(username) = lower(?) ") |
mike@159 | 63 | private val insertStmt = connection.prepareStatement("insert into lpit_user (username, lastname, givenname, mail) values (?, ?, ?, ?)") |
mike@159 | 64 | private val updateStmt = connection.prepareStatement("update lpit_user set lastname = ?, givenname = ?, mail = ? where userid = ?") |
mike@159 | 65 | |
mike@159 | 66 | override fun mapResult(rs: ResultSet): User = Companion.mapResult(rs) |
mike@159 | 67 | |
mike@159 | 68 | override fun save(instance: User) { |
mike@159 | 69 | insertStmt.setString(1, instance.username) |
mike@159 | 70 | Functions.setStringOrNull(insertStmt, 2, instance.lastname) |
mike@159 | 71 | Functions.setStringOrNull(insertStmt, 3, instance.givenname) |
mike@159 | 72 | Functions.setStringOrNull(insertStmt, 4, instance.mail) |
mike@159 | 73 | insertStmt.executeUpdate() |
mike@159 | 74 | } |
mike@159 | 75 | |
mike@159 | 76 | override fun update(instance: User): Boolean { |
mike@159 | 77 | Functions.setStringOrNull(updateStmt, 1, instance.lastname) |
mike@159 | 78 | Functions.setStringOrNull(updateStmt, 2, instance.givenname) |
mike@159 | 79 | Functions.setStringOrNull(updateStmt, 3, instance.mail) |
mike@159 | 80 | updateStmt.setInt(4, instance.id) |
mike@159 | 81 | return updateStmt.executeUpdate() > 0 |
mike@159 | 82 | } |
mike@159 | 83 | |
mike@159 | 84 | override fun list(): List<User> = super.list(listStmt) |
mike@159 | 85 | |
mike@159 | 86 | override fun find(id: Int): User? { |
mike@159 | 87 | findStmt.setInt(1, id) |
mike@159 | 88 | return super.find(findStmt) |
mike@159 | 89 | } |
mike@159 | 90 | |
mike@159 | 91 | override fun findByUsername(username: String): User? { |
mike@159 | 92 | findByUsernameStmt.setString(1, username) |
mike@159 | 93 | return super.find(findByUsernameStmt) |
mike@159 | 94 | } |
mike@159 | 95 | } |