aboutsummaryrefslogtreecommitdiffstats
path: root/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/primary/BlueprintDBLibPropertyService.kt
blob: b272a9708762fe56a881a6ceb19bce5fab4ae143 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
 * Copyright © 2019 Bell Canada Intellectual Property.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.onap.ccsdk.cds.blueprintsprocessor.db.primary

import com.fasterxml.jackson.databind.JsonNode
import org.onap.ccsdk.cds.blueprintsprocessor.core.BlueprintPropertiesService
import org.onap.ccsdk.cds.blueprintsprocessor.db.BlueprintDBLibGenericService
import org.onap.ccsdk.cds.blueprintsprocessor.db.DBDataSourceProperties
import org.onap.ccsdk.cds.blueprintsprocessor.db.DBLibConstants.Companion.MARIA_DB
import org.onap.ccsdk.cds.blueprintsprocessor.db.DBLibConstants.Companion.MYSQL_DB
import org.onap.ccsdk.cds.blueprintsprocessor.db.DBLibConstants.Companion.PROCESSOR_DB
import org.onap.ccsdk.cds.blueprintsprocessor.db.MariaDataSourceProperties
import org.onap.ccsdk.cds.blueprintsprocessor.db.MySqlDataSourceProperties
import org.onap.ccsdk.cds.controllerblueprints.core.BlueprintProcessorException
import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
import org.springframework.stereotype.Service

@Service
class BlueprintDBLibPropertyService(private var bluePrintPropertiesService: BlueprintPropertiesService) {

    fun JdbcTemplate(jsonNode: JsonNode): BlueprintDBLibGenericService =
        blueprintDBDataSourceService(dBDataSourceProperties(jsonNode))

    fun JdbcTemplate(selector: String): BlueprintDBLibGenericService =
        blueprintDBDataSourceService(dBDataSourceProperties("blueprintsprocessor.db.$selector"))

    private fun dBDataSourceProperties(jsonNode: JsonNode): DBDataSourceProperties =
        when (val type = jsonNode.get("type").textValue()) {
            MYSQL_DB -> JacksonUtils.readValue(jsonNode, MySqlDataSourceProperties::class.java)
            MARIA_DB -> JacksonUtils.readValue(jsonNode, MariaDataSourceProperties::class.java)
            else -> {
                throw BlueprintProcessorException(
                    "DB type ($type) is not supported. Valid types: $MARIA_DB, $MYSQL_DB"
                )
            }
        }!!

    private fun dBDataSourceProperties(prefix: String): DBDataSourceProperties =
        bluePrintPropertiesService.propertyBeanType("$prefix.type", String::class.java).let {
            return when (it) {
                MARIA_DB, PROCESSOR_DB -> mariaDBConnectionProperties(prefix)
                MYSQL_DB -> mySqlDBConnectionProperties(prefix)
                else -> {
                    throw BlueprintProcessorException(
                        "DB type ($it) is not supported. Valid types: $MARIA_DB, $MYSQL_DB, $PROCESSOR_DB"
                    )
                }
            }
        }

    private fun blueprintDBDataSourceService(dBConnetionProperties: DBDataSourceProperties): BlueprintDBLibGenericService =
        when (dBConnetionProperties) {
            is MariaDataSourceProperties -> MariaDatabaseConfiguration(dBConnetionProperties)
            is MySqlDataSourceProperties -> MySqlDatabaseConfiguration(dBConnetionProperties)
            else -> throw BlueprintProcessorException(
                "Failed to create db configuration for ${dBConnetionProperties.url}"
            )
        }

    private fun mySqlDBConnectionProperties(prefix: String): MySqlDataSourceProperties =
        bluePrintPropertiesService.propertyBeanType(prefix, MySqlDataSourceProperties::class.java)

    private fun mariaDBConnectionProperties(prefix: String): MariaDataSourceProperties =
        bluePrintPropertiesService.propertyBeanType(prefix, MariaDataSourceProperties::class.java)
}