2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 Huawei Technologies Co., Ltd. All rights reserved.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.ccsdk.cds.blueprintsprocessor.dmaap
23 import com.fasterxml.jackson.databind.JsonNode
24 import org.onap.ccsdk.cds.blueprintsprocessor.core.BluePrintPropertiesService
25 import org.onap.ccsdk.cds.blueprintsprocessor.dmaap.DmaapLibConstants.Companion.SERVICE_BLUEPRINT_DMAAP_LIB_PROPERTY
26 import org.onap.ccsdk.cds.blueprintsprocessor.dmaap.DmaapLibConstants.Companion.TYPE_HTTP_AAF_AUTH
27 import org.onap.ccsdk.cds.blueprintsprocessor.dmaap.DmaapLibConstants.Companion.TYPE_HTTP_NO_AUTH
28 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
29 import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
30 import org.slf4j.LoggerFactory
31 import org.springframework.beans.factory.annotation.Autowired
32 import org.springframework.context.annotation.Configuration
33 import org.springframework.context.annotation.PropertySource
34 import org.springframework.context.annotation.PropertySources
35 import org.springframework.core.env.ConfigurableEnvironment
36 import org.springframework.core.env.Environment
37 import org.springframework.core.io.support.ResourcePropertySource
38 import org.springframework.stereotype.Service
39 import java.util.Properties
42 * Representation of DMAAP lib property service to load the properties
43 * according to the connection type to the DMAAP server and returning back
44 * the appropriate DMAAP client to send messages DMAAP client.
46 @Service(SERVICE_BLUEPRINT_DMAAP_LIB_PROPERTY)
48 @PropertySources(PropertySource("classpath:event.properties"))
49 open class BluePrintDmaapLibPropertyService(private var bluePrintPropertiesService: BluePrintPropertiesService) {
52 * Static variable for logging.
56 var log = LoggerFactory.getLogger(
57 BluePrintDmaapLibPropertyService::class.java
62 * Environment entity to derive it from the system to load a specific
66 lateinit var env: Environment
69 * Returns the DMAAP client by providing the input properties as a JSON
72 fun blueprintDmaapClientService(jsonNode: JsonNode):
73 BluePrintDmaapClientService {
74 val dmaapProps = dmaapClientProperties(jsonNode)
75 return blueprintDmaapClientService(dmaapProps)
79 * Returns the DMAAP client by providing the input properties as a
82 fun blueprintDmaapClientService(selector: String):
83 BluePrintDmaapClientService {
84 val prefix = "blueprintsprocessor.dmaapclient.$selector"
85 val dmaapProps = dmaapClientProperties(prefix)
86 return blueprintDmaapClientService(dmaapProps)
90 * Returns the DMAAP client properties from the type of connection it
93 fun dmaapClientProperties(prefix: String): DmaapClientProperties {
94 val type = bluePrintPropertiesService.propertyBeanType(
95 "$prefix.type", String::class.java
97 val clientProps: DmaapClientProperties
100 TYPE_HTTP_NO_AUTH -> {
101 clientProps = bluePrintPropertiesService.propertyBeanType(
102 prefix, HttpNoAuthDmaapClientProperties::class.java
104 clientProps.props = parseEventProps()
107 TYPE_HTTP_AAF_AUTH -> {
108 clientProps = bluePrintPropertiesService.propertyBeanType(
109 prefix, AafAuthDmaapClientProperties::class.java
111 clientProps.props = parseEventProps()
115 throw BluePrintProcessorException(
116 "DMAAP adaptor($type) is " +
125 * Returns the DMAAP client properties from the type of connection it
128 fun dmaapClientProperties(jsonNode: JsonNode): DmaapClientProperties {
129 val type = jsonNode.get("type").textValue()
130 val clientProps: DmaapClientProperties
133 TYPE_HTTP_NO_AUTH -> {
134 clientProps = JacksonUtils.readValue(
136 HttpNoAuthDmaapClientProperties::class.java
138 clientProps.props = parseEventProps()
141 TYPE_HTTP_AAF_AUTH -> {
142 clientProps = JacksonUtils.readValue(
144 AafAuthDmaapClientProperties::class.java
146 clientProps.props = parseEventProps()
150 throw BluePrintProcessorException(
151 "DMAAP adaptor($type) is " +
160 * Returns DMAAP client service according to the type of client properties.
162 private fun blueprintDmaapClientService(clientProps: DmaapClientProperties):
163 BluePrintDmaapClientService {
165 is HttpNoAuthDmaapClientProperties -> {
166 return HttpNoAuthDmaapClientService(clientProps)
169 is AafAuthDmaapClientProperties -> {
170 return AafAuthDmaapClientService(clientProps)
174 throw BluePrintProcessorException(
175 "Unable to get the DMAAP " +
183 * Parses the event.properties file which contains the default values for
184 * the connection required.
186 private fun parseEventProps(): Properties {
187 val prodProps = Properties()
188 val proProps = (env as ConfigurableEnvironment).propertySources.get(
189 "class path resource [event.properties]"
192 if (proProps != null) {
193 val entries = (proProps as ResourcePropertySource).source.entries
195 prodProps.put(e.key, e.value)
198 log.error("Unable to load the event.properties file")