Custom detekt rule for logger usage check
[dcaegen2/collectors/hv-ves.git] / sources / hv-collector-utils / src / main / kotlin / org / onap / dcae / collectors / veshv / utils / http / http.kt
1 /*
2  * ============LICENSE_START=======================================================
3  * dcaegen2-collectors-veshv
4  * ================================================================================
5  * Copyright (C) 2018 NOKIA
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.dcae.collectors.veshv.utils.http
21
22 import arrow.typeclasses.Show
23 import java.util.*
24 import javax.json.Json
25
26 /**
27  * @author Jakub Dudycz <jakub.dudycz@nokia.com>
28  * @since August 2018
29  */
30 object HttpConstants {
31     const val STATUS_OK = 200
32     const val STATUS_ACCEPTED = 202
33     const val STATUS_BAD_REQUEST = 400
34     const val STATUS_NOT_FOUND = 404
35     const val STATUS_INTERNAL_SERVER_ERROR = 500
36     const val STATUS_SERVICE_UNAVAILABLE = 503
37
38     const val CONTENT_TYPE_JSON = "application/json"
39     const val CONTENT_TYPE_TEXT = "text/plain"
40 }
41
42 enum class HttpStatus(val number: Int) {
43     OK(HttpConstants.STATUS_OK),
44     ACCEPTED(HttpConstants.STATUS_ACCEPTED),
45     BAD_REQUEST(HttpConstants.STATUS_BAD_REQUEST),
46     NOT_FOUND(HttpConstants.STATUS_NOT_FOUND),
47     INTERNAL_SERVER_ERROR(HttpConstants.STATUS_INTERNAL_SERVER_ERROR),
48     SERVICE_UNAVAILABLE(HttpConstants.STATUS_SERVICE_UNAVAILABLE)
49 }
50
51
52 enum class ContentType(val value: String) {
53     JSON(HttpConstants.CONTENT_TYPE_JSON),
54     TEXT(HttpConstants.CONTENT_TYPE_TEXT)
55 }
56
57 data class Response(val status: HttpStatus, val content: Content<Any>)
58 data class Content<T>(val type: ContentType, val value: T, val serializer: Show<T> = Show.any())
59
60 /**
61  * @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
62  * @since September 2018
63  */
64 object Responses {
65
66     fun acceptedResponse(id: UUID): Response {
67         return Response(
68                 HttpStatus.ACCEPTED,
69                 Content(ContentType.TEXT, id)
70         )
71     }
72
73     fun statusResponse(name: String, message: String, httpStatus: HttpStatus = HttpStatus.OK): Response {
74         return Response(httpStatus,
75                 Content(ContentType.JSON,
76                         Json.createObjectBuilder()
77                                 .add("status", name)
78                                 .add("message", message)
79                                 .build()))
80     }
81 }