1 package org.onap.vid.services
3 import com.fasterxml.jackson.module.kotlin.readValue
4 import org.apache.commons.lang3.StringUtils
5 import org.apache.commons.lang3.StringUtils.substringAfterLast
6 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate
7 import org.onap.portalsdk.core.util.SystemProperties
8 import org.onap.vid.model.VersionAndFeatures
9 import org.onap.vid.utils.JACKSON_OBJECT_MAPPER
10 import org.springframework.stereotype.Service
11 import java.util.regex.Pattern
12 import javax.inject.Inject
13 import javax.servlet.ServletContext
18 constructor(internal var servletContext: ServletContext) {
20 private val Logger = EELFLoggerDelegate.getLogger(VersionService::class.java)
22 private val versionAndFeatures: VersionAndFeatures by lazy {
23 loadVersionAndFeatures()
26 private fun readBuildNumber(): String {
27 val resource = servletContext.getResource("/app/vid/scripts/constants/version.json")
28 return JACKSON_OBJECT_MAPPER.readValue<Map<String, String>>(resource)["Version"]!!
31 //protected so can be easily tested in UT
32 protected fun readFeatureSet(): String {
33 return SystemProperties.getProperty("features.set.filename")
36 //protected so can be easily tested in UT
37 protected fun buildDisplayVersion(features: String, build: String): String {
38 val matcher = Pattern.compile("([^/]+?)(\\.features|$)").matcher(features)
39 val majorByFeatures = if (matcher.find()) matcher.group(1) else features
41 val buildByVersion = StringUtils.defaultIfBlank(substringAfterLast(build, "."), build)
43 return StringUtils.join(majorByFeatures, ".", buildByVersion)
46 fun retrieveVersionAndFeatures(): VersionAndFeatures {
49 } catch (exception: Exception) {
50 Logger.error("Failed to read build number or feature properties settings from version file", exception)
51 VersionAndFeatures.unknown
55 private fun loadVersionAndFeatures(): VersionAndFeatures {
56 val featureSet = readFeatureSet();
57 val build = readBuildNumber();
58 val displayVersion = buildDisplayVersion(featureSet, build)
59 return VersionAndFeatures(featureSet, build, displayVersion)
62 //might throw an exception
63 fun retrieveBuildNumber(): String {
64 return versionAndFeatures.build