Merge changes from topics "VID-30", "VID-37"
[vid.git] / vid-app-common / src / main / java / org / onap / vid / logging / Headers.kt
index cc5ebf3..e9f83ef 100644 (file)
@@ -1,20 +1,51 @@
+@file:JvmName("Headers")
+
 package org.onap.vid.logging
 
-import org.onap.portalsdk.core.util.SystemProperties.ECOMP_REQUEST_ID
-import org.springframework.stereotype.Component
+import org.onap.portalsdk.core.util.SystemProperties
+import org.onap.vid.logging.RequestIdHeader.*
+import java.util.*
 import javax.servlet.http.HttpServletRequest
 
-@Component
-class Headers {
-    fun prioritizedRequestIdHeaders() = listOf(
-            "X-ONAP-RequestID",
-            "X-RequestID",
-            "X-TransactionID",
-            ECOMP_REQUEST_ID
-    )
-
-    fun highestPriorityHeader(httpRequest: HttpServletRequest): String? {
-        val headers = httpRequest.headerNames.asSequence().toSet().map { it.toUpperCase() }
-        return prioritizedRequestIdHeaders().firstOrNull { headers.contains(it.toUpperCase()) }
+interface Header {
+    val headerName: String
+    fun stringEquals(header: String): Boolean = headerName.equals(header, true)
+}
+
+abstract class NamedHeader(override val headerName: String) : Header {
+    abstract fun getHeaderValue(): String
+}
+
+@JvmField
+val PARTNER_NAME = object : NamedHeader("X-ONAP-PartnerName") {
+    override fun getHeaderValue() = "VID.VID"
+}
+
+@JvmField
+val INVOCATION_ID = object : NamedHeader("X-InvocationID") {
+    override fun getHeaderValue() = UUID.randomUUID().toString()
+}
+
+enum class RequestIdHeader(override val headerName: String) : Header {
+    ONAP_ID("X-ONAP-RequestID"),
+    REQUEST_ID("X-RequestID"),
+    TRANSACTION_ID("X-TransactionID"),
+    ECOMP_ID(SystemProperties.ECOMP_REQUEST_ID),
+    ;
+
+    fun getHeaderValue(request: HttpServletRequest): String? = request.getHeader(headerName)
+}
+
+fun prioritizedRequestIdHeaders() = listOf(
+        ONAP_ID,
+        REQUEST_ID,
+        TRANSACTION_ID,
+        ECOMP_ID
+)
+
+fun highestPriorityHeader(httpRequest: HttpServletRequest): RequestIdHeader? {
+    val headers = httpRequest.headerNames.asSequence().toSet()
+    return prioritizedRequestIdHeaders().firstOrNull {
+        requestIdHeader -> headers.any { requestIdHeader.stringEquals(it) }
     }
 }