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

changeset 210
37fbdcb422b7
parent 207
479dd7993ef9
child 214
69647ddb57f2
     1.1 --- a/src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt	Tue Aug 03 13:41:32 2021 +0200
     1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt	Tue Aug 03 14:08:08 2021 +0200
     1.3 @@ -103,21 +103,20 @@
     1.4              selectedComponent
     1.5          )
     1.6  
     1.7 -    sealed class LookupResult<T> {
     1.8 -        class NotFound<T> : LookupResult<T>()
     1.9 -        data class Found<T>(val elem: T?) : LookupResult<T>()
    1.10 -    }
    1.11 +    private sealed interface LookupResult<T>
    1.12 +    private class NotFound<T> : LookupResult<T>
    1.13 +    private data class Found<T>(val elem: T?) : LookupResult<T>
    1.14  
    1.15      private fun <T : HasNode> HttpRequest.lookupPathParam(paramName: String, list: List<T>): LookupResult<T> {
    1.16          val node = pathParams[paramName]
    1.17          return if (node == null || node == "-") {
    1.18 -            LookupResult.Found(null)
    1.19 +            Found(null)
    1.20          } else {
    1.21              val result = list.find { it.node == node }
    1.22              if (result == null) {
    1.23 -                LookupResult.NotFound()
    1.24 +                NotFound()
    1.25              } else {
    1.26 -                LookupResult.Found(result)
    1.27 +                Found(result)
    1.28              }
    1.29          }
    1.30      }
    1.31 @@ -147,7 +146,7 @@
    1.32  
    1.33      private fun feedPath(project: Project) = "feed/${project.node}/issues.rss"
    1.34  
    1.35 -    data class PathInfos(
    1.36 +    private data class PathInfos(
    1.37          val projectInfo: ProjectInfo,
    1.38          val version: Version?,
    1.39          val component: Component?
    1.40 @@ -164,20 +163,20 @@
    1.41          }
    1.42  
    1.43          val version = when (val result = http.lookupPathParam("version", projectInfo.versions)) {
    1.44 -            is LookupResult.NotFound -> {
    1.45 +            is NotFound -> {
    1.46                  http.response.sendError(404)
    1.47                  return null
    1.48              }
    1.49 -            is LookupResult.Found -> {
    1.50 +            is Found -> {
    1.51                  result.elem
    1.52              }
    1.53          }
    1.54          val component = when (val result = http.lookupPathParam("component", projectInfo.components)) {
    1.55 -            is LookupResult.NotFound -> {
    1.56 +            is NotFound -> {
    1.57                  http.response.sendError(404)
    1.58                  return null
    1.59              }
    1.60 -            is LookupResult.Found -> {
    1.61 +            is Found -> {
    1.62                  result.elem
    1.63              }
    1.64          }
    1.65 @@ -231,7 +230,6 @@
    1.66      }
    1.67  
    1.68      private fun projectCommit(http: HttpRequest, dao: DataAccessObject) {
    1.69 -        // TODO: replace defaults with throwing validator exceptions
    1.70          val project = Project(http.param("id")?.toIntOrNull() ?: -1).apply {
    1.71              name = http.param("name") ?: ""
    1.72              node = http.param("node") ?: ""
    1.73 @@ -288,11 +286,11 @@
    1.74  
    1.75          val version: Version
    1.76          when (val result = http.lookupPathParam("version", projectInfo.versions)) {
    1.77 -            is LookupResult.NotFound -> {
    1.78 +            is NotFound -> {
    1.79                  http.response.sendError(404)
    1.80                  return
    1.81              }
    1.82 -            is LookupResult.Found -> {
    1.83 +            is Found -> {
    1.84                  version = result.elem ?: Version(-1, projectInfo.project.id)
    1.85              }
    1.86          }
    1.87 @@ -310,17 +308,23 @@
    1.88          }
    1.89      }
    1.90  
    1.91 -    private fun versionCommit(http: HttpRequest, dao: DataAccessObject) {
    1.92 +    private fun obtainIdAndProject(http: HttpRequest, dao:DataAccessObject): Pair<Int, Project>? {
    1.93          val id = http.param("id")?.toIntOrNull()
    1.94          val projectid = http.param("projectid")?.toIntOrNull() ?: -1
    1.95          val project = dao.findProject(projectid)
    1.96 -        if (id == null || project == null) {
    1.97 +        return if (id == null || project == null) {
    1.98              http.response.sendError(400)
    1.99 -            return
   1.100 +            null
   1.101 +        } else {
   1.102 +            Pair(id, project)
   1.103          }
   1.104 +    }
   1.105  
   1.106 -        // TODO: replace defaults with throwing validator exceptions
   1.107 -        val version = Version(id, projectid).apply {
   1.108 +    private fun versionCommit(http: HttpRequest, dao: DataAccessObject) {
   1.109 +        val idParams = obtainIdAndProject(http, dao) ?: return
   1.110 +        val (id, project) = idParams
   1.111 +
   1.112 +        val version = Version(id, project.id).apply {
   1.113              name = http.param("name") ?: ""
   1.114              node = http.param("node") ?: ""
   1.115              ordinal = http.param("ordinal")?.toIntOrNull() ?: 0
   1.116 @@ -372,11 +376,11 @@
   1.117  
   1.118          val component: Component
   1.119          when (val result = http.lookupPathParam("component", projectInfo.components)) {
   1.120 -            is LookupResult.NotFound -> {
   1.121 +            is NotFound -> {
   1.122                  http.response.sendError(404)
   1.123                  return
   1.124              }
   1.125 -            is LookupResult.Found -> {
   1.126 +            is Found -> {
   1.127                  component = result.elem ?: Component(-1, projectInfo.project.id)
   1.128              }
   1.129          }
   1.130 @@ -395,16 +399,10 @@
   1.131      }
   1.132  
   1.133      private fun componentCommit(http: HttpRequest, dao: DataAccessObject) {
   1.134 -        val id = http.param("id")?.toIntOrNull()
   1.135 -        val projectid = http.param("projectid")?.toIntOrNull() ?: -1
   1.136 -        val project = dao.findProject(projectid)
   1.137 -        if (id == null || project == null) {
   1.138 -            http.response.sendError(400)
   1.139 -            return
   1.140 -        }
   1.141 +        val idParams = obtainIdAndProject(http, dao) ?: return
   1.142 +        val (id, project) = idParams
   1.143  
   1.144 -        // TODO: replace defaults with throwing validator exceptions
   1.145 -        val component = Component(id, projectid).apply {
   1.146 +        val component = Component(id, project.id).apply {
   1.147              name = http.param("name") ?: ""
   1.148              node = http.param("node") ?: ""
   1.149              ordinal = http.param("ordinal")?.toIntOrNull() ?: 0
   1.150 @@ -506,8 +504,6 @@
   1.151                  return
   1.152              }
   1.153  
   1.154 -            // TODO: throw validator exception instead of using a default
   1.155 -
   1.156              val commentId = http.param("commentid")?.toIntOrNull() ?: -1
   1.157              if (commentId > 0) {
   1.158                  val comment = dao.findComment(commentId)
   1.159 @@ -533,7 +529,6 @@
   1.160  
   1.161      private fun issueCommit(http: HttpRequest, dao: DataAccessObject) {
   1.162          withPathInfo(http, dao)?.run {
   1.163 -            // TODO: throw validator exception instead of using defaults
   1.164              val issue = Issue(
   1.165                  http.param("id")?.toIntOrNull() ?: -1,
   1.166                  project

mercurial