Merge changes from topics "VID-30", "VID-37"
[vid.git] / vid-app-common / src / main / java / org / onap / vid / logging / Headers.kt
1 @file:JvmName("Headers")
2
3 package org.onap.vid.logging
4
5 import org.onap.portalsdk.core.util.SystemProperties
6 import org.onap.vid.logging.RequestIdHeader.*
7 import java.util.*
8 import javax.servlet.http.HttpServletRequest
9
10 interface Header {
11     val headerName: String
12     fun stringEquals(header: String): Boolean = headerName.equals(header, true)
13 }
14
15 abstract class NamedHeader(override val headerName: String) : Header {
16     abstract fun getHeaderValue(): String
17 }
18
19 @JvmField
20 val PARTNER_NAME = object : NamedHeader("X-ONAP-PartnerName") {
21     override fun getHeaderValue() = "VID.VID"
22 }
23
24 @JvmField
25 val INVOCATION_ID = object : NamedHeader("X-InvocationID") {
26     override fun getHeaderValue() = UUID.randomUUID().toString()
27 }
28
29 enum class RequestIdHeader(override val headerName: String) : Header {
30     ONAP_ID("X-ONAP-RequestID"),
31     REQUEST_ID("X-RequestID"),
32     TRANSACTION_ID("X-TransactionID"),
33     ECOMP_ID(SystemProperties.ECOMP_REQUEST_ID),
34     ;
35
36     fun getHeaderValue(request: HttpServletRequest): String? = request.getHeader(headerName)
37 }
38
39 fun prioritizedRequestIdHeaders() = listOf(
40         ONAP_ID,
41         REQUEST_ID,
42         TRANSACTION_ID,
43         ECOMP_ID
44 )
45
46 fun highestPriorityHeader(httpRequest: HttpServletRequest): RequestIdHeader? {
47     val headers = httpRequest.headerNames.asSequence().toSet()
48     return prioritizedRequestIdHeaders().firstOrNull {
49         requestIdHeader -> headers.any { requestIdHeader.stringEquals(it) }
50     }
51 }